大綜合課件單片機(jī)二章_第1頁(yè)
大綜合課件單片機(jī)二章_第2頁(yè)
大綜合課件單片機(jī)二章_第3頁(yè)
大綜合課件單片機(jī)二章_第4頁(yè)
大綜合課件單片機(jī)二章_第5頁(yè)
已閱讀5頁(yè),還剩73頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第二章MCS-51指令系統(tǒng)及匯編語(yǔ)言程序設(shè)計(jì)2-1指令格式2-2尋址方式2-3指令系統(tǒng)2-4偽指令及程序設(shè)計(jì)§2.1指令格式 MCS-51機(jī)器語(yǔ)言代碼長(zhǎng)度有三種格式:?jiǎn)巫止?jié)指令雙字節(jié)指令三字節(jié)指令一、單字節(jié)指令單字節(jié)指令格式由8位二進(jìn)制編碼表示。有兩種形式:(1)8位全表示操作碼例:NOP(空操作),其機(jī)器碼為:00000000(2)8位編碼中包含操作碼和寄存器編碼例:MOV

A,Rn;ARn(n=0,1,2,3,4,5,6,7)機(jī)器碼為:11101Rn操作碼寄存器編碼二、雙字節(jié)指令指令的編碼由兩個(gè)字節(jié)組成。例:MOV

A,#DATA;A

立即數(shù)DATA機(jī)器碼:01110100第一字節(jié)第二字節(jié)操作碼10000101操作數(shù)(立即數(shù)85H)三、三字節(jié)指令第一個(gè)字節(jié)為操作碼,其后兩個(gè)字節(jié)為操作數(shù)。例:MOVdirect,#DATA;(direct)DATA設(shè):direct=78H,DATA=80H則MOV78H,#80H指令的機(jī)器碼為:011101010111100010000000操作碼第一操作數(shù)(目的地址)第二操作數(shù)(立即數(shù))第一字節(jié)第二字節(jié)第三字節(jié)MCS-51匯編語(yǔ)言的形式:標(biāo)號(hào)(:)操作碼(,)操作數(shù)(;)注釋例如:把立即數(shù)AFH送累加器START:MOVA,#0AFH;A

立即數(shù)AFH標(biāo)號(hào)區(qū)操作碼區(qū)操作數(shù)區(qū)注釋區(qū)§2.2尋址方式 MCS-51指令系統(tǒng)有六種尋址方式:立即尋址直接尋址寄存器尋址寄存器間接尋址基寄存器加變址寄存器間接尋址相對(duì)尋址一、立即尋址操作數(shù)緊跟在操作碼之后。例1:機(jī)器碼助記符注釋

7470HMOVA,#70H;A70H例2:機(jī)器碼助記符注釋

908200MOVDPTR,#8200H;DPH82H;DPL00H二、直接尋址緊跟在操作碼后的是操作數(shù)的直接地址。 該方式中操作數(shù)存儲(chǔ)的空間有三種:1.內(nèi)部數(shù)據(jù)存儲(chǔ)器的低128個(gè)字節(jié)單元(00H~7FH)

例:MOVA,70H;(70H)A2.位地址空間例:MOVC,00H;直接位00H內(nèi)容進(jìn)位位3.特殊功用功能寄存器*只能用直接尋址方式進(jìn)行訪問。例:MOVIE,#85H;立即數(shù)85H

中斷允許寄存器三、寄存器尋址操作數(shù)在寄存器中。MCS-51指令系統(tǒng)中寄存器尋址的工作寄存器是R0~R7。例:INCR0;(R0)+1R0四、寄存器間接尋址操作數(shù)的地址在寄存器中。寄存器間接尋址只能使用寄存器R0或R1作為地址指針,來尋址內(nèi)部RAM(00H~FFH)中的數(shù)據(jù)。寄存器間接尋址也適用于訪問外部RAM,可使用R0,R1或DPTR作為地址指針。寄存器間接尋址用符號(hào)“@”表示。例:MOVA,@R0;((R0))A五、基寄存器加變址寄存器間接尋址把基寄存器(DPTR或PC)和變址寄存器(A)的內(nèi)容作為無(wú)符號(hào)數(shù)相加形成16位的地址,訪問程序存儲(chǔ)器中的數(shù)據(jù)表格。例如:

MOVCA,@A+DPTR;((A+DPTR))A MOVCA,@A+PC;((A+PC))

A六、相對(duì)尋址這是地址的尋址方式。以PC的內(nèi)容作為基地址,與指令中給出的偏移量相加得到轉(zhuǎn)移地址。是雙字節(jié)轉(zhuǎn)移指令。偏移量是帶符號(hào)數(shù),范圍是-128~+127。例如:JCrel;C=1跳轉(zhuǎn)設(shè)PC=1000H,rel=05H當(dāng)條件滿足(C=1),新PC為多少?新PC=當(dāng)前PC+rel40051000H1001H當(dāng)前1002H=1002H+05H=1007H新PC1007H§2.3指令系統(tǒng)

按指令的功能,MCS-51指令系統(tǒng)可分為下列五類:數(shù)據(jù)傳送類指令算術(shù)運(yùn)算類指令邏輯操作類指令位操作類指令控制轉(zhuǎn)移類指令一、數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令的助記符有:

MOV、MOVX、MOVC

XCH、XCHD

PUSH、POP1.以直接地址為目標(biāo)和源操作數(shù)

可以實(shí)現(xiàn):

(1)內(nèi)部RAM

內(nèi)部RAM

(2)專用寄存器專用寄存器

(3)內(nèi)部RAM專用寄存器

(4)專用寄存器內(nèi)部RAM助記符機(jī)器碼功能MOVdirect1,direct210000101直接地址(源)直接地址(目標(biāo));direct1direct2目標(biāo)源例:MOV0E0H,78H;(E0H)(78H)機(jī)器碼:85H,78H,E0H2.累加器與外部數(shù)據(jù)存儲(chǔ)器之間該類指令兩組:Ⅰ.由DPTR內(nèi)容指示外部數(shù)據(jù)存儲(chǔ)器地址(1)外部數(shù)據(jù)存儲(chǔ)器內(nèi)容送累加器助記符機(jī)器碼功能MOVXA,@DPTR11100000;A((DPTR))目標(biāo)源執(zhí)行該指令時(shí):2.DPL(低8位地址信息)由P0口輸出,DPH(高8位地址信息)由P2口輸出。3.所選中單元的數(shù)據(jù)由P0輸入到累加器。4.P0口作分時(shí)復(fù)用。1.P3.7引腳上輸出RD有效信號(hào)Ⅰ.由DPTR內(nèi)容指示外部數(shù)據(jù)存儲(chǔ)器地址(2)累加器內(nèi)容送外部數(shù)據(jù)存儲(chǔ)器助記符機(jī)器碼功能MOVX@DPTR,A11110000;((DPTR))

A目標(biāo)源執(zhí)行該指令時(shí):2.DPL(低8位地址信息)由P0口輸出,DPH(高8位地址信息)由P2口輸出。3.累加器A的內(nèi)容由P0口輸出。4.P0口作分時(shí)復(fù)用。1.P3.6引腳上輸出WR有效信號(hào)例:將外部數(shù)據(jù)存儲(chǔ)器從5000H單元開始的50個(gè)工作單元清零。思路:首址存放在DPTR中,循環(huán)次數(shù)存入在R2寄存器中程序如下:CLEAR: CLR A

MOV R2,#32H;置計(jì)數(shù)值

MOVDPTR,#5000H;

LOOP: MOVX @DPTR,A INC DPTR;修改地址指針

DJNZ R2,LOOP;控制循環(huán)

RETⅡ.由Ri內(nèi)容指示外部數(shù)據(jù)存儲(chǔ)器地址(1)外部數(shù)據(jù)存儲(chǔ)器內(nèi)容送累加器助記符機(jī)器碼功能MOVXA,@Ri11100011;A((Ri)+(P2)),i=0,1目標(biāo)源執(zhí)行該指令時(shí):2.Ri包含的低8位地址由P0口輸出,高8位地址信息由P2口輸出。3.所選中存儲(chǔ)單元的數(shù)據(jù)由P0口輸入到累加器。4.P0口作分時(shí)復(fù)用。1.P3.7引腳上輸出RD有效信號(hào)例:設(shè)外部數(shù)據(jù)存儲(chǔ)器2097H單元中內(nèi)容為80H,在執(zhí)行下列指令后,則A中的內(nèi)容為80H。MOV P2,#20HMOV R0,#97HMOVX A,@R0Ⅱ.由Ri內(nèi)容指示外部數(shù)據(jù)存儲(chǔ)器地址(2)累加器內(nèi)容送外部數(shù)據(jù)存儲(chǔ)器助記符機(jī)器碼功能MOVX@Ri,A11110011;((Ri)+(P2))A,i=0,1目標(biāo)源執(zhí)行該指令時(shí):2.Ri包含的低8位地址由P0口輸出,高8位地址信息由P2口輸出。3.累加器A的內(nèi)容由P0口輸出。4.P0口作分時(shí)復(fù)用。1.P3.6引腳上輸出WR有效信號(hào)3.程序存儲(chǔ)器內(nèi)容送累加器例:(A)=30H,執(zhí)行下列指令:地址指令該類指令常用于查表。(1)PC作基址寄存器助記符機(jī)器碼功能MOVCA,@A+PC10000011;PCPC+1A((A)+(PC))目標(biāo)源1000HMOVCA,@A+PC結(jié)果為程序存儲(chǔ)器在1031H單元中的內(nèi)容送入A。例:(A)=30H,(DPTR)=8000H,執(zhí)行下列指令:(2)DPTR作基址寄存器助記符機(jī)器碼功能MOVCA,@A+DPTR10010011;A((A)+(DPTR))目標(biāo)源MOVCA,@A+DPTR結(jié)果為程序存儲(chǔ)器在8030H單元中的內(nèi)容送入A。堆棧的特點(diǎn):a.在內(nèi)部RAM中設(shè)定的一個(gè)后進(jìn)先出的區(qū)域。b.堆棧是字節(jié)操作。c.入棧地址增加,出棧地址減少。4.堆棧操作指令(1)進(jìn)棧指令

助記符機(jī)器碼功能PUSHdirect11000000;SP(SP)+1((SP))direct直接地址(2)出棧指令助記符機(jī)器碼功能POPdirect11010000;direct

((SP))

SP(SP)-1直接地址5.字節(jié)交換指令該類指令的功能是將累加器A的內(nèi)容和源操作數(shù)內(nèi)容相互交換。助記符機(jī)器碼功能XCHA,Rn11001rrr;(A)(Rn),n=0~7XCHA,@Ri1100011i;(A)((Ri)),i=0,1XCHA,direct11000101;(A)direct直接地址6.半字節(jié)交換指令助記符機(jī)器碼功能XCHDA,@Ri1101011r;(A3~0)((Ri)3~0),i=0,1數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令的助記符有:

MOV、MOVX、MOVC

XCH、XCHD

PUSH、POP寄存器C直接地址direct寄存器DPTR寄存器R7~R0直接地址direct立即數(shù)#data累加器A寄存器間址@R7,@R0寄存器間址@PC、@DPTRMCS-51傳送指令示意圖二、算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令包含:加法指令A(yù)DD帶進(jìn)位加法指令A(yù)DDC增量指令I(lǐng)NC十進(jìn)制調(diào)整指令DA

A帶進(jìn)位減法指令SUBB減量指令DEC乘法指令MUL除法指令DIV特點(diǎn):該類指令執(zhí)行的結(jié)果將影響進(jìn)位、輔助進(jìn)位位、溢出標(biāo)志位。但是增量和減量指令不影響這些標(biāo)志。1.加法指令

功能:把所指出的字節(jié)變量加到累加器A上,結(jié)果在累加器中。助記符機(jī)器碼功能ADDA,Rn00101rrr;(A)(A)+(Rn),n=0~7ADDA,@Ri0010011i;(A)(A)+((Ri)),i=0,1ADDA,#data00100100;(A)(A)+data立即數(shù)ADDA,direct00100101;(A)(A)+(direct)直接地址例:(A)=85H,(R0)=20H,(20H)=0AFH,執(zhí)行指令:

ADDA,@R0運(yùn)算過程:1000010110101111+)100110100D3位向D4位有進(jìn)位,AC=1C6=0C7=1CY=1結(jié)果:(A)=34H;CY=1;AC=1;OV=1。2.帶進(jìn)位加法指令

功能:把所指出的字節(jié)變量、進(jìn)位標(biāo)志與累加器A內(nèi)容相加,結(jié)果在累加器中。助記符機(jī)器碼功能ADDCA,Rn00111rrr;(A)(A)+(Rn)+CY,n=0~7ADDCA,@Ri0011011i;(A)(A)+((Ri))+CY,i=0,1ADDCA,#data00110100;(A)(A)+data+CY立即數(shù)ADDCA,direct00110101;(A)(A)+(direct)+CY直接地址3.增量指令功能:把所指出的字節(jié)變量的內(nèi)容加1。該指令不影響任何標(biāo)志。注意:用該指令修改輸出口Pi時(shí),其功能是“讀——修改(增量)—寫”,且所讀內(nèi)容來自端口的鎖存器而不是端口的引腳。助記符機(jī)器碼功能INCA00000100;(A)(A)+1INC@Ri0000011i;((Ri))((Ri))+1,i=0,1INCDPTR10100011;(DPTR)(DPTR)+1INCRn00001rrr;(Rn)(Rn)+1INCdirect00000101;(direct)(direct)+1直接地址例:兩個(gè)8位的無(wú)符號(hào)數(shù)相加和是8位。設(shè)內(nèi)部RAM中40H,41H單元中分別存放N1,N2,結(jié)果送42H單元。程序如下:AD1: MOV R0,#40H;設(shè)R0為數(shù)據(jù)指針

MOV A,@R0;取N1

INC R0;修改指針

ADD A,@R0;N1+N2

INC R0;

MOV @R0,A;存結(jié)果

RET4.十進(jìn)制調(diào)整指令

功能:對(duì)累加器參與的BCD碼加法運(yùn)算所得結(jié)果(8位)進(jìn)行十進(jìn)制調(diào)整。助記符機(jī)器碼DAA110101005.帶進(jìn)位減法指令

功能:從累加器中減去指定的變量和進(jìn)位標(biāo)志,結(jié)果在累加器中。助記符機(jī)器碼功能SUBBA,Rn10011rrr;(A)(A)-(Rn)-CY,n=0~7SUBBA,@Ri1001011i;(A)(A)-((Ri))-CY,i=0,1SUBBA,#data10010100;(A)(A)-data-CY立即數(shù)SUBBA,direct10010101;(A)(A)-(direct)-CY直接地址例:設(shè)存儲(chǔ)單元ST1和ST2中存入兩個(gè)不帶符號(hào)的二進(jìn)制數(shù),找出其中的大數(shù)存入ST3單元中。A>(指針)?指針

指針+1(指針)A結(jié)束開始指針

ST1A(指針)指針

指針+1YA(指針)NN1N2大數(shù)ST1ST2ST3程序清單: ORG 8000HSTART: CLR C ;進(jìn)位位清零

MOV DPTR,#ST1 ;設(shè)數(shù)據(jù)指針

MOVXA,@DPTR ;取第一個(gè)數(shù)

MOV R2,A ;暫存R2 INC DPTR MOVXA,@DPTR;取第二個(gè)數(shù)

SUBB A,

R2 ;兩數(shù)比較

JNC BIG1 XCH A,R2 ;第一數(shù)(ST1)大BIG0: INC DPTR MOVX@DPTR,A ;存大數(shù)

RET BIG1: MOVXA,@DPTR ;第二數(shù)(ST2)大

SJMP BIG0 ;ST1: EQU 8040H ; END6.減量指令功能:把所指出的字節(jié)變量的內(nèi)容減1。該指令不影響任何標(biāo)志。注意:用該指令修改輸出口Pi時(shí),其功能是“讀——修改(減量)—寫”,且所讀內(nèi)容來自端口的鎖存器而不是端口的引腳。助記符機(jī)器碼功能DECA00010100;(A)(A)-1DEC@Ri0001011i;((Ri))((Ri))-1,i=0,1DECRn00011rrr;(Rn)(Rn)-1DECdirect00010101;(direct)(direct)-1直接地址注:若原來為00H,減1后為0FFH,不影響標(biāo)志位。7.乘法指令

功能:將累加器A和寄存器B中的無(wú)符號(hào)8位整數(shù)進(jìn)行相乘,16位的乘積中高8位在寄存器B中,低8位在累加器A中。助記符機(jī)器碼功能MULAB10100100;(B).(A)(A)×(B)例:(A)=0CH,(B)=02H,執(zhí)行指令:MULAB結(jié)果:(A)=18H,(B)=00H,CY=0,OV=0.8.除法指令

功能:將累加器A和寄存器B中的8位無(wú)符號(hào)數(shù)進(jìn)行相除,商在累加器A中,余數(shù)在寄存器B中。助記符機(jī)器碼DIVAB10000100;商(A),余數(shù)(B)(A)÷(B)例:(A)=0FH,(B)=05H,執(zhí)行指令:DIVAB結(jié)果:(A)=03H,(B)=00H,CY=0,OV=0.三、邏輯操作類指令邏輯操作類指令包括:簡(jiǎn)單邏輯操作指令邏輯與指令邏輯或指令邏輯異或指令1.簡(jiǎn)單邏輯操作指令功能:將累加器A清“0”。不影響CY,AC,OV等標(biāo)志。助記符機(jī)器碼功能CLRA11100100;A0(1)累加器清零(2)累加器內(nèi)容按位取反功能:將累加器A的每一位邏輯取反。不影響標(biāo)志位。助記符機(jī)器碼功能CPLA11110100;A(A)(3)左循環(huán)移位指令

功能:將累加器A的內(nèi)容向左循環(huán)移1位。不影響標(biāo)志位。助記符機(jī)器碼功能RLA00100011A7A0①累加器內(nèi)容循環(huán)左移

功能:將累加器A的內(nèi)容和進(jìn)位標(biāo)志一起向左循環(huán)移1位。不影響其它標(biāo)志位。助記符機(jī)器碼功能②累加器帶進(jìn)位循環(huán)左移RLCA00110011A7A0CY(4)右循環(huán)移位指令

功能:將累加器A的內(nèi)容向右循環(huán)移1位。不影響標(biāo)志位。助記符機(jī)器碼功能RRA00000011A7A0①累加器內(nèi)容循環(huán)右移

功能:將累加器A的內(nèi)容和進(jìn)位標(biāo)志一起向右循環(huán)移1位。不影響其它標(biāo)志位。助記符機(jī)器碼功能②累加器帶進(jìn)位循環(huán)右移RRCA00010011A7A0CY(5)累加器半字節(jié)交換指令功能:將累加器A的高半字節(jié)(ACC.7~ACC.4)低半字節(jié)(ACC.3~ACC.0)互換。不影響標(biāo)志位。助記符機(jī)器碼功能SWAPA11000100;(ACC.7~ACC.4)

(ACC.3~ACC.0)例:在40H,41H單元中分別存放著8位二進(jìn)制數(shù)。要求取出這兩個(gè)單元中的低半字節(jié)、合并成一個(gè)字節(jié)后,存至42H單元。START: MOV R1,#40H MOV A,@R1 ANL A,#0FH SWAP A INC R1 XCH A,@R1 ANL A,#0FH ORL A,@R1 INC R1 MOV @R1,A RET2.邏輯“與”指令功能:在指出的變量之間按位進(jìn)行邏輯“與”運(yùn)算。助記符機(jī)器碼功能

注意:用該指令修改輸出口Pi時(shí),其功能是“讀—修改(與)—寫”,且所讀內(nèi)容來自端口的鎖存器而不是端口的引腳。ANLA,Rn01011rrr;A(A)(Rn),n=0~7ANLA,@Ri0101011i;A(A)((Ri)),i=0,1ANLA,#data01010100;A(A)data立即數(shù)ANLA,direct01010101;A(A)(direct)直接地址ANLdirect,A01010010;direct(direct)(A)直接地址ANLdirect,#data01010011;direct(direct)data直接地址立即數(shù)3.邏輯“或”指令功能:在指出的變量之間按位進(jìn)行邏輯“或”運(yùn)算。助記符機(jī)器碼功能

注意:用該指令修改輸出口Pi時(shí),其功能是“讀—修改(或)—寫”,且所讀內(nèi)容來自端口的鎖存器而不是端口的引腳。ORLA,Rn01001rrr;A(A)(Rn),n=0~7ORLA,@Ri0100011i;A(A)((Ri)),i=0,1ORLA,#data01000100;A(A)data立即數(shù)ORLA,direct01000101;A(A)(direct)直接地址ORLdirect,A01000010;direct(direct)(A)直接地址ORLdirect,#data01000011;direct(direct)data直接地址立即數(shù)4.邏輯“異或”指令功能:在指出的變量之間按位進(jìn)行邏輯“異或”運(yùn)算。助記符機(jī)器碼功能

注意:用該指令修改輸出口Pi時(shí),其功能是“讀—修改(異或)—寫”,且所讀內(nèi)容來自端口的鎖存器而不是端口的引腳。XRLA,Rn01101rrr;A(A)(Rn),n=0~7XRLA,@Ri0110011i;A(A)((Ri)),i=0,1XRLA,#data01100100;A(A)data立即數(shù)XRLA,direct01100101;A(A)(direct)直接地址XRLdirect,A01100010;direct(direct)(A)直接地址XRLdirect,#data01100011;direct(direct)data直接地址立即數(shù)四、位操作類指令位操作類指令包含:數(shù)據(jù)位傳送指令位變量修改指令位變量邏輯“與”指令位變量邏輯“或”指令位變量條件轉(zhuǎn)移指令特點(diǎn):

MCS-51內(nèi)部有一個(gè)布爾處理機(jī)對(duì)位地址空間具有豐富的位操作指令。1.數(shù)據(jù)位傳送指令功能:把源操作數(shù)指出的布爾變量送到目標(biāo)操作數(shù)指定的位中去。說明:其中一個(gè)操作數(shù)必須為進(jìn)位標(biāo)志,另一個(gè)可以是任何直接尋址位。不影響其他寄存器和標(biāo)志。助記符機(jī)器碼功能MOVbit,C10010100;(位地址)CY位地址MOVC,bit10100010;CY(位地址)位地址2.位變量修改指令功能:該組指令將操作數(shù)指出的位清“0”,取反、置“1”。不影響其他標(biāo)志。助記符機(jī)器碼功能CLRbit11000010;(位地址)0位地址CLRC11000011;CY0CPLC10110011;CYCYCPLbit10110010;(位地址)(位地址)位地址SETBC11010011;CY1SETBbit11010010;(位地址)1位地址3.位變量邏輯“與”指令功能:若源操作數(shù)“位”的邏輯值是“0”,則進(jìn)位標(biāo)志清“0”,否則進(jìn)位標(biāo)志保持不變。說明:不影響源操作數(shù)位本身值不影響其他的標(biāo)志助記符機(jī)器碼功能ANLC,bit10000010;CY(CY)(位地址)位地址ANLC,/bit10110000;CY(CY)(位地址)位地址4.位變量邏輯“或”指令功能:若源操作數(shù)“位”的邏輯值是“1”,則進(jìn)位標(biāo)志置“1”,否則進(jìn)位標(biāo)志保持不變。說明:不影響源操作數(shù)“位”本身值不影響其他的標(biāo)志助記符機(jī)器碼功能ORLC,bit01110010;CY(CY)(位地址)位地址ORLC,/bit10100000;CY(CY)(位地址)位地址例:P1口為輸出口,試看執(zhí)行下列指令后,結(jié)果如何?MOV C,00H ;CY

(20H).0ORL C,01H ;CY

(CY)

(20H).1

ORL C,02H ;CY

(CY)

(20H).2

ORL C,03H ;CY

(CY)

(20H).3

ORL C,04H ;CY

(CY)

(20H).4

ORL C,05H ;CY

(CY)

(20H).5

ORL C,06H ;CY

(CY)

(20H).6

ORL C,07H ;CY

(CY)

(20H).7

MOV P1.0,C ;P1.0

CY結(jié)果:20H單元中只要有一位為1,則P1.0輸出就為1。5.位變量條件轉(zhuǎn)移指令功能:根據(jù)進(jìn)位標(biāo)志CY、直接尋址位的值,決定是否執(zhí)行跳轉(zhuǎn)。助記符機(jī)器碼轉(zhuǎn)移條件JCrel01000000;CY=1相對(duì)地址relJNCrel01010000;CY=0相對(duì)地址relJBbit,rel00100000;(bit)=1相對(duì)地址rel位地址JNBbit,rel00110000;(bit)=0相對(duì)地址rel位地址JBCbit,rel00010000;(bit)=1,

*然后將直接尋址的位清0相對(duì)地址rel位地址五、控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令包含:無(wú)條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令比較不相等轉(zhuǎn)移指令循環(huán)控制指令調(diào)用及返回指令1.無(wú)條件轉(zhuǎn)移指令(1)絕對(duì)轉(zhuǎn)移指令功能:這是一個(gè)2K字節(jié)范圍內(nèi)的無(wú)條件轉(zhuǎn)移指令。說明:目標(biāo)地址必須與AJMP后面一條指令的第一個(gè)字節(jié)在同一個(gè)2K區(qū)域的存儲(chǔ)器區(qū)內(nèi)。助記符機(jī)器碼AJMPaddr11a10a9a800001a7a6a5a4a3a2a1a0新的目標(biāo)地址:以當(dāng)前PC為基點(diǎn),形成新的地址。PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0PC例:KK:AJMPaddr11設(shè)KK的地址=1030H,addr11=B,執(zhí)行該指令后,新的目標(biāo)地址為:PC0001000100000000B=1100H(2)相對(duì)轉(zhuǎn)移指令功能:這是一條無(wú)條件轉(zhuǎn)移指令,新的PC=當(dāng)前PC+8位帶符號(hào)的偏移量。說明:目標(biāo)地址的范圍在-128~+127。助記符機(jī)器碼SJMPrel10000000偏移量新的目標(biāo)地址:當(dāng)前PC+偏移量PC例:KK:SJMPK0設(shè)KK的地址=0100H,標(biāo)號(hào)K0=00F0H,則偏移量為多少?rel=目標(biāo)地址-當(dāng)前地址=00F0H-0102H=-12H=EEH(補(bǔ)碼)(3)長(zhǎng)跳轉(zhuǎn)指令功能:這是一條無(wú)條件轉(zhuǎn)移指令。說明:目標(biāo)地址的范圍在64K程序存儲(chǔ)器地址空間的任何地方。助記符機(jī)器碼新的目標(biāo)地址:PCLJMPaddr1600000010a15…a8a7…a0a15…a8a7…a0(4)散轉(zhuǎn)指令功能:由累加器中8位無(wú)符號(hào)數(shù)與數(shù)據(jù)指針DPTR中的16位數(shù)據(jù)相加構(gòu)成目標(biāo)地址。說明:利用該指令可實(shí)現(xiàn)程序的散轉(zhuǎn)。不影響標(biāo)志位。助記符機(jī)器碼新的目標(biāo)地址:PCJMP@A+DPTR01110011(A)+(DPTR)例:如果累加器A中存入待處理命令編號(hào)(0~7),程序存儲(chǔ)器中存放著標(biāo)號(hào)為PMTB的轉(zhuǎn)移表首址,則執(zhí)行下面的程序,將根據(jù)A中命令編號(hào)轉(zhuǎn)向相應(yīng)的命令處理程序。PM: MOVR1,A

RL A

ADDA,R1;A

(A)*3 MOVDPTR,#PMTB

JMP@A+DPTRPMTB:LJMPPM0

LJMP PM1

LJMP PM2

LJMP PM3

LJMP PM4

LJMP PM5

LJMP PM6

LJMP PM702PM0HPM0L02PM1HPM1L02PM7HPM7LPMTB2.條件轉(zhuǎn)移指令功能:當(dāng)條件滿足時(shí),程序?qū)⑥D(zhuǎn)到新目標(biāo)地址(=當(dāng)前PC+相對(duì)偏移量)。說明:跳轉(zhuǎn)范圍是以當(dāng)前地址為中心的256個(gè)字節(jié)范圍(-128~+127)。不影響其他寄存器和標(biāo)志。助記符機(jī)器碼轉(zhuǎn)移條件

JNZrel01110000

;當(dāng)(A)

0時(shí),PC(當(dāng)前PC)+rel相對(duì)地址rel

JZrel01100000

;當(dāng)(A)=0時(shí),PC(當(dāng)前PC)+rel相對(duì)地址rel3.比較不相等轉(zhuǎn)移指令功能:比較指令中前面兩個(gè)操作數(shù)的大小,如果它們的值不等則轉(zhuǎn)移。程序?qū)⑥D(zhuǎn)到新目標(biāo)地址(=當(dāng)前PC+相對(duì)偏移量)。說明:如果第一個(gè)操作數(shù)小于第二個(gè)操作數(shù)則進(jìn)位標(biāo)志CY置位,否則CY清“0”。不影響任何一個(gè)操作數(shù)的內(nèi)容。助記符機(jī)器碼轉(zhuǎn)移條件CJNEA,#data,rel10110100;(A)data,轉(zhuǎn)相對(duì)地址rel立即數(shù)CJNERn,#data,rel10111rrr;(Rn)data,轉(zhuǎn)相對(duì)地址rel位地址CJNE@Ri,#data,rel1011011i;((Ri))data,轉(zhuǎn)相對(duì)地址rel立即數(shù)CJNEA,direct,rel10110101;(A)

(direct),轉(zhuǎn)相對(duì)地址rel直接地址條件滿足后,新的地址=當(dāng)前PC+rel4.減1不為0轉(zhuǎn)移指令功能:把操作數(shù)減1并送回,如果結(jié)果不為0則轉(zhuǎn)移,程序?qū)⑥D(zhuǎn)到新目標(biāo)地址(=當(dāng)前PC+相對(duì)偏移量)。說明:跳轉(zhuǎn)范圍是以當(dāng)前地址為中心的256個(gè)字節(jié)范圍(-128~+127)。不影響其他寄存器和標(biāo)志。助記符機(jī)器碼轉(zhuǎn)移條件DJNZRn,rel11011rrr

;當(dāng)(Rn)-1

0時(shí),PC(當(dāng)前PC)+rel相對(duì)地址relDJNZdirect,rel11010101

;當(dāng)(direct)-1

0時(shí),PC(當(dāng)前PC)+rel直接地址相對(duì)地址rel例:延時(shí)程序:START: SETB P1.1 ;P1.1”1”DL: MOV 30H,#03H ;置初值

DL0: MOV 31H,#0F0H;置初值

DL1: DJNZ 31H,DL1 ;

DJNZ 30H,DL0 ; CPL P1.1 ;P1.1求反

SJMP DL ;5.調(diào)用及返回指令(1)絕對(duì)調(diào)用指令功能:這是一個(gè)2K字節(jié)范圍內(nèi)的調(diào)用指令。返回地址入棧。說明:目標(biāo)地址必須與ACALL后面一條指令的第一個(gè)字節(jié)在同一個(gè)2K區(qū)域的存儲(chǔ)器區(qū)內(nèi)。助記符機(jī)器碼ACALLaddr11a10a9a810001a7a6a5a4a3a2a1a0新的目標(biāo)地址:以當(dāng)前PC為基點(diǎn),形成新的地址。PC15PC14PC13PC12PC11a10a9a8a7a6a5a4a3a2a1a0PC例:KK:ACALLSUB設(shè)KK的地址=0123H,SUB=0345H,(SP)=60H。執(zhí)行該指令后:結(jié)果:(PC)=0345H,(SP)=62H,堆棧區(qū)內(nèi)(61H)=25H,(62H)=01H(2)長(zhǎng)調(diào)用指令功能:這是一條無(wú)條件調(diào)用指令。把當(dāng)前PC入棧,然后轉(zhuǎn)到子程序入口地址。說明:目標(biāo)地址的范圍在64K程序存儲(chǔ)器地址空間的任何地方。不影響任何標(biāo)志。助記符機(jī)器碼新的目標(biāo)地址:PCLCALLaddr1600010010a15…a8a7…a0a15…a8a7…a0(3)返回指令①子程序返回指令功能:將棧頂相鄰兩個(gè)單元的內(nèi)容彈出送到PC。說明:該指令通常安排在子程序的末尾,使程序能從子程序返回到主程序。助記符機(jī)器碼RET00100010功能:其功能與RET指令相類似。說明:通常安排在中斷服務(wù)子程序的最后。②中斷返回指令助記符機(jī)器碼RETI00110010(4)空操作指令助記符機(jī)器碼NOP00000000§2.4偽指令一、ORG(起點(diǎn))

格式:ORG

nn二、DB(定義字節(jié))

格式:標(biāo)號(hào):DB字節(jié)常數(shù)或字符或表達(dá)式三、DW(定義一個(gè)字)

格式:標(biāo)號(hào):DW字或字串四、EQU(等值)

格式:標(biāo)號(hào):EQU操作數(shù)五、END(匯編結(jié)束)

格式:標(biāo)號(hào):END地址或標(biāo)號(hào)例2帶符號(hào)的加減運(yùn)算減法兩數(shù)符號(hào)相等?返回加法減數(shù)符號(hào)取反有進(jìn)位?數(shù)值相加Y有借位?數(shù)值相減N溢出Y結(jié)果符號(hào)為被加數(shù)符號(hào)N差

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論