版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章單片機(jī)指令系統(tǒng)一個(gè)單片機(jī)所需執(zhí)行的指令的集合即為單片機(jī)指令系統(tǒng)。3.1概述3.2尋址方式3.3數(shù)據(jù)傳送指令3.4算術(shù)運(yùn)算類指令3.5邏輯運(yùn)算和移位指令3.6控制轉(zhuǎn)移指令3.7位操作指令3.1概述3.1.1指令分類
MCS-51單片機(jī)共有111條指令,按其功能可分為5大類:數(shù)據(jù)傳送類指令(共29條)算術(shù)運(yùn)算類指令(共24條)邏輯運(yùn)算及移位類指令(共24條)控制轉(zhuǎn)移類指令(共17條)布爾變量操作類指令(共17條)按其執(zhí)行速度分類,可分為單機(jī)器周期指令(64條)、雙機(jī)器周期指令(45條)和四機(jī)器周期指令(2條)。3.1.2指令格式指令的表示方法稱為指令格式,一條指令通常由操作碼和操作數(shù)兩部分組成。一條匯編語言指令中最多包含四個(gè)區(qū)段:[標(biāo)號(hào):]
操作碼助記符
[目的操作數(shù)][,源操作數(shù)][;注釋]
例如,把立即數(shù)F0H送累加器的指令為
START:MOVA,#0F0H;立即數(shù)F0H→(A)
標(biāo)號(hào)區(qū)段是由用戶定義的符號(hào)組成,必須由英文字母開始,標(biāo)號(hào)區(qū)段可缺省。若一條指令中有標(biāo)號(hào)區(qū)段,標(biāo)號(hào)代表該指令第一個(gè)字節(jié)所存放的存儲(chǔ)器單元的地址,故標(biāo)號(hào)又稱為符號(hào)地址,則在匯編時(shí)把該地址賦值給標(biāo)號(hào)。
操作碼規(guī)定指令進(jìn)行什么操作,采用助記符表示。根據(jù)指令的不同功能實(shí)現(xiàn)不同的操作。如數(shù)據(jù)傳送、算術(shù)運(yùn)算、邏輯運(yùn)算、程序轉(zhuǎn)移、調(diào)用子程序等。
操作數(shù)表示指令的操作對(duì)象,操作數(shù)可能是一個(gè)具體的數(shù)據(jù),也可能是指出到哪里取得數(shù)據(jù)的地址或符號(hào)。不同類型的指令,操作數(shù)也不相同,可以有三個(gè)、兩個(gè)、一個(gè)或沒有操作數(shù)。
MCS-51單片機(jī)的指令系統(tǒng)中,有單字節(jié)、雙字節(jié)和三字節(jié)三種不同長度的指令。1)單字節(jié)指令指令只有一個(gè)字節(jié),操作碼和操作數(shù)在一個(gè)字節(jié)中,例如:
CLRA2)雙字節(jié)指令雙字節(jié)指令格式由兩個(gè)字節(jié)組成,操作碼和操作數(shù),例如: MOVA,#10H→74H10H3)三字節(jié)指令三字節(jié)指令格式中,第一個(gè)字節(jié)為操作碼,后兩個(gè)字節(jié)為操作數(shù),例如:
MOV40H,#30H→75H40H30H3.1.3一些特殊符號(hào)的意義對(duì)描述指令的一些符號(hào)作簡(jiǎn)單的說明:
Rn——表示當(dāng)前工作寄存器組中的工作寄存器,n取0~7,表示R0~R7。
direct——8位內(nèi)部數(shù)據(jù)存儲(chǔ)單元地址。它可以是一個(gè)內(nèi)部數(shù)據(jù)RAM單元(0~127)或特殊功能寄存器地址或地址符號(hào)。
@Ri——通過寄存器R1或R0間接尋址的8位內(nèi)部數(shù)據(jù)RAM單元(0~255),i=0,1。
#data——指令中的8位立即數(shù)。
#data16——指令中的16位立即數(shù)。
addr16——16位目標(biāo)地址,用于LCALL和LJMP指令,可指向64?KB程序存儲(chǔ)器地址空間的任何地方。
addr11——11位目標(biāo)地址,用于ACALL和AJMP指令,轉(zhuǎn)至當(dāng)前PC所在的同一個(gè)2KB程序存儲(chǔ)器地址空間內(nèi)。
rel——補(bǔ)碼形式的8位偏移量,用于相對(duì)轉(zhuǎn)移和所有條件轉(zhuǎn)移指令。偏移量相對(duì)于當(dāng)前PC計(jì)算,在-128~+127范圍內(nèi)取值。
DPTR——數(shù)據(jù)指針,用作16位的地址寄存器。
A——累加器。
B——特殊功能寄存器,專用于乘(MUL)和除(DIV)指令。
C——進(jìn)位標(biāo)志或進(jìn)位位。
bit——內(nèi)部數(shù)據(jù)RAM或部分特殊功能寄存器里的可尋址位的位地址。
——表示對(duì)該位操作數(shù)取反。
(X)——X中的內(nèi)容。
((X))——表示以X單元的內(nèi)容為地址的存儲(chǔ)器單元內(nèi)容,即(X)作地址,該地址單元的內(nèi)容用((X))表示。3.1.4單片機(jī)執(zhí)行指令的過程計(jì)算機(jī)每執(zhí)行一條指令都可分為三個(gè)階段進(jìn)行,即取指令---分析指令---執(zhí)行指令。取指令階段的任務(wù):根據(jù)程序計(jì)數(shù)器PC中的值從程序存儲(chǔ)器讀出現(xiàn)行指令,送到指令寄存器。分析指令階段的任務(wù):將指令寄存器中的指令操作碼取出后進(jìn)行譯碼,分析其指令性質(zhì)。若指令要求操作數(shù),則尋找操作數(shù)地址。計(jì)算機(jī)執(zhí)行程序的過程實(shí)際上就是逐條地重復(fù)上述指令的操作過程,直至遇到停機(jī)指令或循環(huán)等待指令。3.2尋址方式尋址方式指的是指令按某種方式尋址到所需的操作數(shù)或信息。在MCS-51單片機(jī)指令系統(tǒng)中,有以下7種尋址方式:
(1)立即尋址;
(2)直接尋址;
(3)寄存器尋址;
(4)寄存器間接尋址;
(5)基址寄存器加變址寄存器間接尋址;
(6)相對(duì)尋址;
(7)位尋址。3.2.1立即尋址立即尋址方式是操作數(shù)包含在指令字節(jié)中,指令操作碼后面字節(jié)的內(nèi)容就是操作數(shù)本身,該操作數(shù)稱為立即數(shù)。立即操作數(shù)用前面加有#號(hào)的8位或16位數(shù)來表示。
例:
MOVA,#30H
其中30H就是立即數(shù),此指令的功能是將30H賦給累加器A。
MCS-51中除了一條指令需16位長的立即數(shù)外,其他都是8位的立即數(shù),這條16位的立即尋址指令是:
MOV DPTR,#data16
指令的功能是將16位的立即數(shù)賦給數(shù)據(jù)指針DPTR寄存器,把立即數(shù)的高8位送入DPH寄存器,低8位送入DPL寄存器。3.2.2直接尋址
直接尋址即在指令中含有操作數(shù)的直接地址,該地址指出了參與操作的數(shù)據(jù)所在的字節(jié)地址或位地址。例:MOVA,30H
其功能是把內(nèi)部RAM30H單元中的數(shù)據(jù)傳送給累加器A,指令中30H就是操作數(shù)的直接地址,其尋址方式示意圖如圖3-1所示。圖3-1直接尋址示意圖
直接尋址方式中操作數(shù)存儲(chǔ)的空間有三種:(1)8051單片機(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)器的低128個(gè)字節(jié)單元(00H~7FH),例如:
MOVA,70H;(70H)→(A)
該指令的功能是把內(nèi)部RAM70H單元中的內(nèi)容送入累加器A。(2)位地址空間,例如:
MOVC,00H;直接位地址00H內(nèi)容→進(jìn)位位(3)特殊功能寄存器。特殊功能寄存器只能用直接尋址方式進(jìn)行訪問。例如:
MOVIE,#85H;立即數(shù)85H→中斷允許寄存器IE
IE為特殊功能寄存器,其字節(jié)地址為A8H。一般在訪問SFR時(shí),可在指令中直接使用該寄存器的名字來代替地址。3.2.3寄存器尋址
由指令指出某一個(gè)寄存器中的內(nèi)容作為操作數(shù),這種尋址方式稱為寄存器尋址。寄存器尋址按所選定的工作寄存器R0~R7進(jìn)行操作。寄存器包括當(dāng)前寄存器組中的8個(gè)工作寄存器R0~R7,累加器A,寄存器B、數(shù)據(jù)指針DPTR和進(jìn)位位CY。例如:MOVA,R1
其功能是把寄存器R1中的內(nèi)容傳送到累加器A中。3.2.4寄存器間接尋址以寄存器中內(nèi)容為地址,以該地址中內(nèi)容為操作數(shù)的尋址方式。間接尋址的存儲(chǔ)器空間包括內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。在寄存器名稱前面加一個(gè)符號(hào)@來表示寄存器間接尋址。例如:
MOVA,@R0;((R0))→(A)
該指令的功能是把R0所指向的內(nèi)部RAM單元中的內(nèi)容送累加器A。若R0內(nèi)容為60H,而內(nèi)部RAM60H單元中的內(nèi)容是3BH,則指令“MOVA,@R0”的功能是將3BH這個(gè)數(shù)送到累加器A,如圖3-2所示。
圖3-2寄存器間接尋址過程示意圖寄存器間接尋址的尋址范圍包括:①內(nèi)部RAM低128單元。使用R0、R1作為寄存器間接尋址。②外部RAM64KB。低256單元可使用R0、R1、DPTR作為寄存器間接尋址,而其余單元只能使用DPTR作為寄存器間接尋址。③堆棧操作指令(PUSH和POP)也應(yīng)算是寄存器間接尋址,即以堆棧指針(SP)作間接寄存器的間接尋址方式。3.2.5基址寄存器加變址寄存器間接尋址變址尋址是以DPTR或PC作基址寄存器,以累加器A作變址寄存器,以兩者內(nèi)容之和形成16位數(shù)作為操作數(shù)的實(shí)際地址。這種尋址方式用于訪問程序存儲(chǔ)器中的數(shù)據(jù)表格。例如:MOVCA,@A+DPTR;((DPTR)+(A))→(A)其操作示意圖如圖3-3所示。程序存儲(chǔ)器02F1HDPTRA0302H1EH11HA執(zhí)行前1EHA執(zhí)行后+圖3-3變址尋址過程示意圖3.2.6相對(duì)尋址這類尋址方式是以當(dāng)前PC的內(nèi)容作為基地址,加上指令中給定的偏移量(rel)所得結(jié)果作為轉(zhuǎn)移地址,它只適用于雙字節(jié)轉(zhuǎn)移指令。偏移量是帶符號(hào)數(shù),在
-128~+127范圍內(nèi),用補(bǔ)碼表示。相對(duì)尋址用于修改PC值,主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移。因此轉(zhuǎn)移目的地址可用如下公式表示:目的地址=轉(zhuǎn)移指令地址+轉(zhuǎn)移指令的字節(jié)數(shù)+rel
例:
SJMPrel
;PC←PC+2+rel
如圖3-4所示的指令執(zhí)行示意圖。程序存儲(chǔ)器SJMP200AH08H2000H+208H執(zhí)行前PC2000H執(zhí)行后PC圖3-4相對(duì)尋址過程的示意圖3.2.7位尋址
位地址表示一個(gè)可作位尋址的單元,它或者在內(nèi)部RAM中進(jìn)行位尋址,字節(jié)地址為20H~2FH,相應(yīng)的位地址為00H~7FH;或者在某些特殊功能寄存器(SFR)中進(jìn)行位尋址。
在位尋址指令中,一般用bit(具體值取決于訪問的位地址單元)表示位地址,以區(qū)別用direct表示的字節(jié)地址。為了提高程序設(shè)計(jì)的可讀性,匯編語言中有以下四種方式表示位地址:
(1)直接使用位地址單元,如:
MOVC,07H ;CY←(07H)
07H為位地址,它表示20H字節(jié)單元的D7位,即20H.7(2)采用某個(gè)字節(jié)單元第幾位表示,如:
MOVC,20H.7;CY←(07H)(3)對(duì)于可位尋址的特殊功能寄存器可以采用其寄存器名稱加位數(shù)的方法或直接用位名稱來表示,如對(duì)于程序狀態(tài)字寄存器PSW的進(jìn)位標(biāo)志位置1時(shí),可用如下指令:
SETBPSW.7
或SETBC(4)也可以通過偽指令定義的符號(hào)名稱訪問位單元。如用偽指令bit,REGbitRS1
定義后,可用REG代替RS1。3.3數(shù)據(jù)傳送類指令
數(shù)據(jù)傳送類指令一般的操作是把源操作數(shù)傳送到指令所指定的目標(biāo)操作數(shù)中,指令執(zhí)行后,源操作數(shù)不變,目的操作數(shù)被源操作數(shù)所代替。數(shù)據(jù)傳送指令不影響標(biāo)志C、AC和OV,但可能會(huì)對(duì)奇偶標(biāo)志P有影響。數(shù)據(jù)傳送類指令用到的助記符有MOV、MOVX、MOVC、XCH、XCHD、PUSH和POP。數(shù)據(jù)傳送類指令共有29條,可分為內(nèi)部數(shù)據(jù)傳送指令、外部數(shù)據(jù)傳送指令、堆棧操作指令和數(shù)據(jù)交換指令等四類。1.內(nèi)部RAM和SFR間的傳送指令(16條)1)以累加器為目的操作數(shù)的指令(4條)
MOVA,Rn
;(Rn)→A
MOVA,direct;(direct)→A
MOVA,@Ri ;((Ri))→A
MOVA,#data;#data→A
這組指令功能將源操作數(shù)指定內(nèi)容送到A中。2)
以寄存器Rn為目的操作數(shù)的指令(3條)
MOVRn,A;(A)→Rn
MOVRn,direct;(direct)→Rn
MOVRn,#data;#data→Rn
這組指令功能是把源操作數(shù)指定的內(nèi)容送入當(dāng)前工作寄存器,源操作數(shù)不變。3)
以直接地址為目的操作數(shù)的指令(5條)
MOVdirect,A;(A)→direct MOVdirect,Rn;(Rn)→direct MOVdirect1,direct2;(direct2)→direct1 MOVdirect,@Ri;((Ri))→direct MOVdirect,#data;#data→direct
這組指令功能是把源操作數(shù)指定的內(nèi)容送入由直接地址指出的片內(nèi)存儲(chǔ)單元。4)以間接地址為目的操作數(shù)的指令(3條)
MOV@Ri,A;(A)→(Ri)MOV@Ri,direct ;(direct)→(Ri) MOV@Ri,#data ;#data→(Ri)
這組指令是把源操作數(shù)指定的內(nèi)容送入以R0或R1中內(nèi)容為地址的片內(nèi)存儲(chǔ)單元。5)以DPTR為目的操作數(shù)(1條)
MOVDPTR,#data16;#data→DPTR
8051是8位機(jī),這是唯一的一條16位立即數(shù)傳遞指令。功能:將一個(gè)16位的立即數(shù)送入DPTR中去。其中高8位送入DPH,低8位送入DPL。2.片外RAM、ROM和累加器A之間的傳送(6條)1)訪問片外RAM指令(4條)
MOVXA,@Ri
;((Ri))→A MOVX@Ri,A;(A)→(Ri) MOVXA,@DPTR;((DPTR))→A MOVX@DPTR,A;(A)→(DPTR)說明:在8051中,與外部RAM存儲(chǔ)器打交道的只可以是累加器A。所有需要送入外部RAM的數(shù)據(jù)必需要通過A送去,而所有要讀入的外部RAM中的數(shù)據(jù)也必需通過A讀入。要讀或?qū)懲獠縍AM,必須要知道RAM的地址,采用DPTR時(shí),地址被直接放在DPTR中的。采用Ri(R0或R1)時(shí),由于Ri只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來提供。使用時(shí)應(yīng)先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀寫命令。
例:將外部RAM中100H單元中的內(nèi)容送入外部RAM中200H單元中。
MOVDPTR,#0100H MOVXA,@DPTR MOVDPTR,#0200H MOVX@DPTR,A2)訪問片外ROM指令(2條)
MOVCA,@A+DPTRMOVCA,@A+PC
本組指令是將ROM中的數(shù)送入A中。本組指令也被稱為查表指令,常用此指令來查一個(gè)已做好在ROM中的表格3.堆棧操作類指令(2條)1)入棧操作指令
PUSHdirect;SP+1→SP,(direct)→(SP)
堆棧指針首先加1,直接尋址單元中的數(shù)據(jù)送到堆棧指針SP所指的單元中。2)出棧操作指令
POPdirect;((SP))→(direct),SP-1→SP
堆棧指令SP所指的單元數(shù)據(jù)送到直接尋址單元中,堆棧指針SP再進(jìn)行減1操作。例: MOVSP,#10H MOV40H,#50H PUSH40H POP30H
執(zhí)行第一條PUSH40H指令是這樣的:將SP中的值加1,變?yōu)?1H,然后將40H中的值送到11H單元中,因此執(zhí)行完本條指令后,內(nèi)存11H單元的值是50H,同樣,執(zhí)行POP30H時(shí),是將11H中的值送入到30H單元中,即執(zhí)行完本條指令后,30H單元中的值變?yōu)?0H。4.交換指令1)字節(jié)交換指令
XCHA,Rn;(A)←→(Rn) XCHA,direct;(A) ←→(direct) XCHA,@Ri ;;(A) ←→((Ri))
這組指令是把累加器A中的內(nèi)容與源操作數(shù)所指的數(shù)據(jù)相互交換。2)低半字節(jié)交換指令
XCHDA,@Ri;(A3~0)←→((Ri))3~0
功能是把累加器與工作寄存器Ri所指的存儲(chǔ)單元中的內(nèi)容低四位互換。3)累加器A的高、低半字節(jié)交換
SWAPA;(A3~0)←→(A7~4)
例:(A)=0C5H,執(zhí)行指令:
SWAPA
結(jié)果:(A)=5CH。
3.4算術(shù)運(yùn)算類指令
主要用于8位無符號(hào)數(shù)運(yùn)算;也可用于帶符號(hào)數(shù)運(yùn)算。包括:加、減、乘、除、加1、減1運(yùn)算指令;指令操作將影響PSW中有關(guān)狀態(tài)位。1.不帶進(jìn)位位加法指令(4條)
ADDA,#data ADDA,direct ADDA,Rn
ADDA,@Ri
用途:將A中的值與源操作數(shù)所指內(nèi)容相加,最終結(jié)果存在A中。相加過程中如果D7有進(jìn)位(C7=1),則進(jìn)位CY置1,否則清零;如果D3有進(jìn)位,則輔助進(jìn)位AC置1,否則清零;如果D6有進(jìn)位而D7無進(jìn)位,或者D7有進(jìn)位D6無進(jìn)位,則溢出標(biāo)志OV置1,否則清零。例:(A)=85H,(R0)=20H,(20H)=0AFH,執(zhí)行指令
ADDA,@R0
運(yùn)算過程如圖3-5所示。
結(jié)果:(A)=34H,CY=1,AC=1,OV=1
圖3-5ADD指令執(zhí)行示意圖
對(duì)于加法,溢出只能發(fā)生在兩個(gè)加數(shù)符號(hào)相同的情況。在進(jìn)行帶符號(hào)數(shù)的加法運(yùn)算時(shí),利用它可以判斷兩個(gè)帶符號(hào)數(shù)相加,其和是否溢出(即和大于
+127或小于
-128),當(dāng)溢出時(shí)結(jié)果無意義。本例中,由于OV=1,故結(jié)果無意義。因此,采用加法指令來編寫帶符號(hào)數(shù)的加法運(yùn)算程序時(shí),要想使累加器A中獲得正確的結(jié)果就必須檢測(cè)PSW中的OV標(biāo)志位狀態(tài)。若OV=0,則A中結(jié)果正確;若OV=1,則A中結(jié)果不正確。2.帶進(jìn)位位加法指令(4條)
ADDCA,Rn
;(A)+(Rn)+CY→A ADDCA,direct ;(A)+(direct)+CY→A ADDCA,@Ri
;(A)+((Ri))+CY→A ADDCA,#data ;(A)+data+CY→A用途:將A中的值和其后面的值以及進(jìn)位位C中的值相加,最終結(jié)果存在A,常用于多字節(jié)數(shù)運(yùn)算中
例:(A)=85H,(20H)=0FFH,CY=1,執(zhí)行指令:
ADDCA,20H
運(yùn)算過程如圖3-6所示。
結(jié)果:(A)=85(H),CY=1,AC=1,OV=0。圖3-6ADDC指令執(zhí)行示意圖3.加1指令(5條)
INCA
;(A)+1→A,影響P標(biāo)志
INCRn
;(Rn)+1→Rn
INCdirect
;(direct)+1→direct
INC@Ri
;((Ri))+1→(Ri)
INCDPTR
;(DPTR)+1→DPTR
功能很簡(jiǎn)單,就是將后面目標(biāo)中的值加1。4.帶借位減法指令(4條)
SUBBA,Rn
;(A)-(Rn)-CY→A
SUBBA,direct
;(A)-(direct)-CY→A
SUBBA,@Ri
;(A)-((Ri))-CY→A
SUBBA,#data
;(A)-data-CY→A
將A中的值減去源操作數(shù)所指內(nèi)容以及進(jìn)位位C中的值,最終結(jié)果存在A中。進(jìn)行減法過程中如果位7需借位,則CY置位,否則CY清零;如果位3需借位,則AC置位,否則AC清零;如果位6需借位而位7不需借位或者位7需借位而位6不需借位,則溢出標(biāo)志OV置位,否則溢出標(biāo)志清零。在帶符號(hào)數(shù)運(yùn)算時(shí),只有當(dāng)符號(hào)不相同的兩數(shù)相減時(shí)才會(huì)發(fā)生溢出。5.減1指令(4條)
DECA
;(A)-1→A,
DECRn
;(Rn)-1→Rn
DECdirect
;(direct)-1→direct
DEC@Ri
;((Rn))-1→(Rn)
與加1指令類似。6.十進(jìn)制調(diào)整指令(1條)
DAA
這條指令對(duì)累加器參與的BCD碼加法運(yùn)算所獲得的8位結(jié)果(在累加器中)進(jìn)行十進(jìn)制調(diào)整,使累加器中的內(nèi)容調(diào)整為二位BCD碼。計(jì)算機(jī)進(jìn)行相應(yīng)的調(diào)整規(guī)則是:BCD碼相加后,當(dāng)?shù)?位大于9或D3位向前有進(jìn)位時(shí),在低4位上加06H;當(dāng)高4位大于9或D7位向前有進(jìn)位時(shí),在高4位上加6H。該指令不能對(duì)減法結(jié)果進(jìn)行調(diào)整。例:
(A)=58H,(R5)=26H,執(zhí)行指令:
ADDA,R5
DA?A
運(yùn)算過程如圖3-7所示。圖3-7DAA指令執(zhí)行示意圖結(jié)果:(A)=84H,CY=17.乘法指令(1條)
MULAB
;A×B→BA
此指令的功能是將A和B中的兩個(gè)8位無符號(hào)數(shù)相乘,結(jié)果將為16無符號(hào)數(shù)。其中高8位放在B中,低8位放在A中。在乘積大于FFH時(shí),0V置1,否則OV為0;而CY總是0。例:(A)=50H,(B)=0A0H,執(zhí)行指令:
MULAB
結(jié)果:(B)=32H,(A)=00H(即積為3200H),CY=0,OV=1。8.除法指令(1條)
DIVAB
;A÷B的商→A,余數(shù)→B
此指令的功能是將A中的8位無符號(hào)數(shù)除B中的8位無符號(hào)數(shù),商放在A中,余數(shù)放在B中。如果在做除法前B中的值是00H,也就是除數(shù)為0,那么0V=1。3.5邏輯運(yùn)算和移位指令主要用于對(duì)2個(gè)操作數(shù)按位進(jìn)行邏輯操作,結(jié)果送到A或直接尋址單元。
主要操作與、或、異或、移位、取反、清零等。
對(duì)標(biāo)志位的影響一般不影響程序狀態(tài)字(PSW)標(biāo)志。1.循環(huán)移位指令(4條)
RLA;累加器A中的內(nèi)容左移一位
RRA;累加器A中的內(nèi)容右移一位
RLCA;累加器A中的內(nèi)容連同進(jìn)位位CY左移一位
RRCA;累加器A中的內(nèi)容連同進(jìn)位位CY右移一位
其指令執(zhí)行過程示意圖如圖3-8所示。
圖3-8循環(huán)移位指令執(zhí)行示意圖2.求反指令(1條)
CPLA
這條指令的功能是將累加器A的每一位邏輯取反,原來為1的位變?yōu)?,原來為0的位變?yōu)?,不影響標(biāo)志位。
3.清零指令(1條)
CLRA
這條指令的功能是將累加器A清零,結(jié)果不影響CY、AC、OV等標(biāo)志位。
4.邏輯與操作指令(6條)ANLA,Rn
;(A)∧Rn→AANLA,direct
;(A)∧(direct)→AANLA,@Ri
;(A)∧((Ri))→AANLA,#data
;(A)∧data→AANLdirect,A
;(direct)∧(A)→directANLdirect,#data
;(direct)∧data→direct
若直接地址為I/O端口,則為“讀-修改--寫”操作。
例:設(shè)(A)=07H,(R0)=0FDH,執(zhí)行指令:
ANLA,R0
運(yùn)算過程如圖3-9所示。
結(jié)果:(A)=05H。
圖3-9ANL指令執(zhí)行示意圖5.邏輯或操作指令(6條)ORLA,Rn
;(A)∨(Rn)→AORLA,direct
;(A)∨(direct)→AORLA,@Ri
;(A)∨((Ri))→AORLA,#data
;(A)∨data→AORLdirect,A
;(direct)∨(A)→directORLdirect,#data
;(direct)∨data→direct
若直接地址為I/O端口,則為“讀-修改--寫”操作。例:(P1)=05H,(A)=33H,執(zhí)行指令:
ORLP1,A
運(yùn)算過程如圖3-10所示。
結(jié)果:(P1)=37H。圖3-10ORL指令執(zhí)行示意圖6.邏輯異或操作指令(6條)XRLA,Rn
;(A)⊕(Rn)→AXRLA,direct
;(A)⊕(direct)→AXRLA,@Ri
;(A)⊕((Ri))→AXRLA,#data
;(A)⊕data→AXRLdirect,A
;(direct)⊕(A)→directXRLdirect,#data
;(direct)⊕data→direct
若直接地址為I/O端口,則為“讀-修改--寫”操作例:設(shè)(A)=90H,(R3)=73H,執(zhí)行指令:
XRLA,R3
運(yùn)算過程如圖3-11所示。結(jié)果:(A)=0E3H。圖3-11XRL指令執(zhí)行示意圖3.6控制轉(zhuǎn)移指令1.無條件轉(zhuǎn)移指令(4條)
這組指令執(zhí)行完畢后,程序就會(huì)無條件轉(zhuǎn)移到指令所指向的地址上去。短轉(zhuǎn)移類指令:AJMPaddr11
長轉(zhuǎn)移類指令:LJMPaddr16
相對(duì)轉(zhuǎn)移指令:SJMPrel
間接轉(zhuǎn)移指令:JMP@A+DPTR前三條指令的區(qū)別:
1)跳轉(zhuǎn)的范圍不同轉(zhuǎn)移范圍短轉(zhuǎn)移類指令:AJMPaddr112KB
長轉(zhuǎn)移類指令:LJMPaddr1664KB
相對(duì)轉(zhuǎn)移指令:SJMPrel
-128~+1272)指令構(gòu)成不同。
AJMP、LJMP后跟的是絕對(duì)地址而SJMP后跟的是相對(duì)地址,其目標(biāo)轉(zhuǎn)移地址的求法是:
目標(biāo)轉(zhuǎn)移地址=PC+2+rel3)指令長度不同:AJMP、SJMP均為雙字節(jié)雙周期指令;而LJMP為3字節(jié)雙周期指令。第四條指令JMP@A+DPTR為單字節(jié)雙周期指令,又稱為散轉(zhuǎn)指令。轉(zhuǎn)移地址由A+DPTR形成,并直接送入PC。指令對(duì)A、DPTR和標(biāo)志位均無影響。
DPTR中的基地址是一個(gè)確定的值,常常是一張轉(zhuǎn)移指令表的起始地址。A中的值為表的偏移量地址。常用于多分支程序結(jié)構(gòu)中。2.條件轉(zhuǎn)移指令(8條)條件轉(zhuǎn)移指令是指在滿足一定條件時(shí)進(jìn)行相對(duì)轉(zhuǎn)移,否則程序繼續(xù)執(zhí)行本指令的下一條指令。1)累加器A為零(非零)轉(zhuǎn)移指令(2條)
JZrel
;(A)=0則轉(zhuǎn)移,執(zhí)行PC←(PC)+2+rel
;(A)≠0,程序順序執(zhí)行,PC←(PC)+2
JNZrel
;(A)≠0則轉(zhuǎn)移,執(zhí)行PC←(PC)+2+rel
;(A)=0,程序順序執(zhí)行PC←(PC)+2
在編寫匯編語言源程序時(shí),可以直接寫成:
JZ標(biāo)號(hào) ;即轉(zhuǎn)移到標(biāo)號(hào)處。2)比較條件轉(zhuǎn)移指令(4條)CJNEA,#data,rel
;(A)≠data,轉(zhuǎn)移CJNEA,direct,rel
;(A)≠(direct),轉(zhuǎn)移CJNERn,#data,rel
;(Rn)≠data,轉(zhuǎn)移CJNE@Ri,#data,rel;((Ri))≠data,轉(zhuǎn)移同樣,使用時(shí),可以將rel用標(biāo)號(hào)代替。這組指令還可以用來判斷兩個(gè)操作數(shù)的大小。如果第一個(gè)操作數(shù)小于第二個(gè)操作數(shù)則進(jìn)位標(biāo)志CY置1,否則CY清零。不影響任何一個(gè)操作數(shù)的內(nèi)容。
3)減1非零轉(zhuǎn)移指令(2條)
DJNZRn,rel
DJNZdirect,rel
這組指令把源操作數(shù)減1,結(jié)果送回到源操作數(shù)中,如果結(jié)果不為0則轉(zhuǎn)移,跳到標(biāo)號(hào)rel處執(zhí)行;等于0就執(zhí)行下一條指令。該指令有自動(dòng)減1的功能,通常用于實(shí)現(xiàn)循環(huán)計(jì)數(shù)。
DJNZRn,rel
是2字節(jié)指令;而DJNZdirect,rel是3字節(jié)指令。
3.子程序調(diào)用和返回指令(5條)1)調(diào)用指令(2條)
LCALLaddr16
;長調(diào)用指令(3字節(jié))
ACALLaddr11
;短調(diào)用指令(2字節(jié))
上面兩條指令都是在主程序中調(diào)用子程序,兩者的區(qū)別
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 虛擬現(xiàn)實(shí)技術(shù)在電影中的應(yīng)用-洞察分析
- 隧道襯砌施工質(zhì)量控制-洞察分析
- 線上影視平臺(tái)盈利模式分析-洞察分析
- 施工單位成本合約部部門職責(zé)
- 語法演變與語言變遷-洞察分析
- 2024員工三級(jí)安全培訓(xùn)考試題及答案研優(yōu)卷
- 2023-2024年項(xiàng)目部治理人員安全培訓(xùn)考試題及答案【名校卷】
- 威脅情報(bào)共享機(jī)制概述-洞察分析
- 水能發(fā)電節(jié)能減排-洞察分析
- 醫(yī)療保險(xiǎn)制度的公平性問題-洞察分析
- (高清版)DZT 0338.4-2020 固體礦產(chǎn)資源量估算規(guī)程 第4部分 SD法
- 婦產(chǎn)科學(xué) (安康職業(yè)技術(shù)學(xué)院)智慧樹知到期末考試答案2024年
- 供電所營銷安全管理措施
- 水閘閘門運(yùn)行方案
- 消費(fèi)型股東招募計(jì)劃書
- 2022-2023學(xué)年江蘇省連云港市九年級(jí)(上)期末數(shù)學(xué)試卷(含詳細(xì)答案解析)
- 會(huì)計(jì)事務(wù)所述職報(bào)告
- 2022年江蘇普通高中學(xué)業(yè)水平選擇性考試政治真題及答案
- 玻璃工業(yè)的節(jié)能減排與綠色制造
- 防止交叉感染的護(hù)理措施和策略
- 蘇教譯林版四年級(jí)英語上冊(cè)單詞默寫表
評(píng)論
0/150
提交評(píng)論