版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
§3.1概述7種尋址方式,111條指令字節(jié)數(shù)運(yùn)算速度單字節(jié)指令:49條雙字節(jié)指令:45條三字節(jié)指令:17條單周期指令:64條雙周期指令:45條四周期指令:2條第三章MCS-51指令系統(tǒng)
InstructionSet9/26/20241功能數(shù)據(jù)傳送類:29條算術(shù)運(yùn)算類:24條邏輯運(yùn)算類:24條控制轉(zhuǎn)移類:17條位操作類:17條9/26/20242常用符號Rn:工作寄存器中的寄存器Rn、R1…R7之一,Ri:工作寄存器中的寄存器R0或R1#data:8位立即數(shù)#data16:16位立即數(shù)direct:片內(nèi)RAM或SFR的地址(8位)@間接尋址寄存器Bit:片內(nèi)RAM或SFR的位地址addr11:11位目的地址addr16:16位目的地址9/26/20243rel:補(bǔ)碼形式的8位地址偏移量。偏移范圍為-128~127/:位操作指令中,該位求反后參與操作,不影響該位X:片內(nèi)RAM的直接地址或寄存器(X):相應(yīng)地址單元中的內(nèi)容→:箭頭左邊的內(nèi)容送入箭頭右邊的單元內(nèi)9/26/20244§3.2尋址方式3.2.1立即尋址ImmediateAddressing操作數(shù)就包含在指令代碼中,在操作碼之后,稱為立即數(shù),用“?!北硎尽?/p>
MCS-51如:MOVP1,#80HMOVR7,#0F5HMOVDPTR,#1245H操作數(shù)存在程序存儲器中9/26/202453.2.2直接尋址
DirectAddressing直接使用數(shù)所在單元的地址找到了操作數(shù),所以稱這種方法為直接尋址。操作數(shù)在SFR、內(nèi)部RAM、位地址空間。如:MOVA,00H
MOVC,60H
MOVA,0F0H9/26/202463.2.3寄存器尋址RegisterAddressing對選定的工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR中的數(shù)進(jìn)行操作。
例:MOVA,R0;將R0工作寄存器中的數(shù)據(jù)送到累加器A中去。提一個(gè)問題:我們知道,工作寄存器就是內(nèi)存單元的一部分,如果我們選擇工作寄存器組0,則R0就是RAM的00H單元,那么這樣一來,MOVA,00H和MOVA,R0不就沒什么區(qū)別了嗎?9/26/20247的確,這兩條指令執(zhí)行的結(jié)果是完全相同的,都是將00H單元中的內(nèi)容送到A中去,但是執(zhí)行的過程不同,執(zhí)行第一條指令需要2個(gè)機(jī)器周期,而第二條則只需要1個(gè)機(jī)器周期,第一條指令變成最終的目標(biāo)碼要兩個(gè)字節(jié)(E5H00H),而第二條則只要一個(gè)字節(jié)(E8H)就可以了。9/26/202483.2.4寄存器間接尋址Register
IndirectAddressing把地址放在另外一個(gè)寄存器中,根據(jù)這個(gè)寄存器中的數(shù)值決定該到哪個(gè)單元中取數(shù)據(jù)。R0,R1----8位地址,片內(nèi)低128字節(jié)或片外DPTR----16位,片外64KB
MCS-51如: MOVA,@R0 MOVXA,@R0 MOVXA,@DPTR操作數(shù)在片內(nèi)RAM中操作數(shù)在片外RAM中操作數(shù)在片外RAM中9/26/20249以DPTR或PC為基址寄存器,累加器A為變址寄存器。把兩者內(nèi)容相加,結(jié)果作為操作數(shù)的地址。常用于查表操作。
MCS-51
MOVCA,@A+DPTR
;(A+DPTR)→A
MOVCA,@A+PC
;PC+1→PC,(A+PC)→A3.2.5變址尋址(基址+變址)Base-Register-plus-Index-Register-IndirectAddressing操作數(shù)在程序存儲器中9/26/202410E0A程序存儲區(qū)2040H9320E0H472041H………DPH20DPL00ALU如:MOVCA,@A+DPTR設(shè)DPTR=2000H,A=E0H20E0H47指令代碼9/26/2024113.2.6相對尋址將PC中的當(dāng)前內(nèi)容與指令第二字節(jié)給出的數(shù)相加,結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址(轉(zhuǎn)移目的地址)。PC中的當(dāng)前內(nèi)容稱為基地址(本指令后的字節(jié)地址)指令第二字節(jié)給出的數(shù)據(jù)稱為偏移量,1字節(jié)帶符號數(shù).常用于跳轉(zhuǎn)指令。如:JC23H若C=0,不跳轉(zhuǎn);C=1,跳轉(zhuǎn).RelativeAddressing改變PC9/26/202412程序存儲區(qū)ALU如:JC231025H1000H401025H451001H
23……1024H471002H3023H1002H指令代碼當(dāng)前PC9/26/202413
對片內(nèi)RAM的位尋址區(qū)和某些可位尋址的特殊功能寄存器進(jìn)行位操作時(shí)的尋址方式。如:SETB3DH;將27H.5位置1 CLRC;Cy位清03.2.7位尋址BitAddressing操作數(shù)在片內(nèi)RAM位地址區(qū)或SFR某些位中9/26/202414尋址方式涉及的存儲器空間尋址方式尋址空間(操作數(shù)存放空間)立即尋址程序存儲器直接尋址片內(nèi)RAM低128字節(jié)、SFR寄存器尋址工作寄存器R0~R7,A,B,DPTR寄存器間接尋址片內(nèi)RAM:@R0,@R1,SP片外RAM:@R0,@R1,@DPTR變址尋址程序存儲器:@A+PC,@A+DPTR相對尋址程序存儲器256字節(jié)范圍內(nèi):PC+偏移量位尋址片內(nèi)RAM的位尋址區(qū)(20H~2FH字節(jié)地址)某些可位尋址的SFR9/26/202415§3.3數(shù)據(jù)傳送類指令(29條)
DataTransferInstructionMCS-51助記符:助記符:MOV、MOVX、MOVC
XCH、XCHD、SWAP
PUSH、POP
源操作數(shù)尋址方式(5種):立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址。目的操作數(shù)尋址方式(3種):直接尋址、寄存器尋址、寄存器間接尋址
除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。9/26/2024163.3.1十六位數(shù)的傳遞指令(1條) MOVDPTR,#data168051是一種8位機(jī),這是唯一的一條16位立即數(shù)傳遞指令。功能:將一個(gè)16位的立即數(shù)送入DPTR中去。其中高8位送入DPH,低8位送入DPL。
例:MOVDPTR,#1234H執(zhí)行完了之后DPH中的值為12H,DPL中的值為34H。如果我們分別向DPH,DPL送數(shù),則結(jié)果也一樣。如下面兩條指令:MOVDPH,#35H MOVDPL,#12H。則就相當(dāng)于執(zhí)行了MOVDPTR,#3512H。9/26/2024173.3.2累加器A與片外RAM之間的數(shù)據(jù)傳遞類指令(4條)
MOVX
A,@Ri
MOVX
@Ri,A
MOVX
A,@DPTR
MOVX
@DPTR,A說明:1.在51中,與外部存儲器RAM打交道的只可以是A累加器。所有需要送入外部RAM的數(shù)據(jù)必需要通過A送去,而所有要讀入的外部RAM中的數(shù)據(jù)也必需通過A讀入。在此我們可以看出內(nèi)外部RAM的區(qū)別了,內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)的傳遞,而外部則不行。比如,要將外部RAM中某一單元(設(shè)為0100H單元的數(shù)據(jù))送入另一個(gè)單元(設(shè)為0200H單元),也必須先將0100H單元中的內(nèi)容讀入A,然后再送到0200H單元中去。9/26/2024182.要讀或?qū)懲獠康腞AM,當(dāng)然也必須要知道RAM的地址,在后兩條指令中,地址是被直接放在DPTR中的。而前兩條指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來提供。3.使用時(shí)應(yīng)先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀寫命令。
例:將外部RAM中100H單元中的內(nèi)容送入外部RAM中200H單元中。 MOVDPTR,#0100H MOVXA,@DPTR MOVDPTR,#0200H MOVX@DPTR,A9/26/2024193.3.3讀程序存儲器指令(2條)MOVCA,@A+DPTRMOVCA,@A+PC本組指令是將ROM中的數(shù)送入A中。本組指令也被稱為查表指令,常用此指令來查一個(gè)已做好在ROM中的表格說明:查找到的結(jié)果被放在A中,因此,本條指令執(zhí)行前后,A中的值不一定相同。例:有一個(gè)數(shù)在R0中,要求用查表的方法確定它的平方值(此數(shù)的取值范圍是0-5) MOVDPTR,#100H MOVA,R0 MOVCA,@A+DPTR .…
ORG0100H DB0,1,4,9,16,25如果R0中的值為2,則最終地址為100H+2為102H,到102H單元中找到的是4。9/26/2024203.3.4堆棧操作(2條)
PUSHdirect;SP
SP+1,(SP)(direct)
POPdirect;(direct)(SP),SP
SP-1第一條為壓入指令,就是將direct中的內(nèi)容送入堆棧中,第二條為彈出指令,就是將堆棧中的內(nèi)容送回到direct中。例: MOVSP,#5FH MOVA,#100 MOVB,#20
PUSHACC PUSHB
則執(zhí)行第一條PUSHACC指令是這樣的:將SP中的值加1,即變?yōu)?0H,然后將A中的值送到60H單元中,因此執(zhí)行完本條指令后,內(nèi)存60H單元的值就是100,同樣,執(zhí)行PUSHB時(shí),是將SP+1,即變?yōu)?1H,然后將B中的值送入到61H單元中,即執(zhí)行完本條指令后,61H單元中的值變?yōu)?0。9/26/2024211.給出每條指令執(zhí)行后的結(jié)果MOV23H,#30HMOV12H,#34HMOVR0,#23HMOVR7,12HMOVR1,#12HMOVA,@R0MOV34H,@R1MOV45H,34HMOVDPTR,#6712HMOV12H,DPHMOVR0,DPLMOVA,@R0;(23H)=30H;(12H)=34H;R0=23HXXXXXXXXXXXXXXXXXXDPHDPL45H34H23H12HR7R1R0XXXXXXXX3034XXXX23XXXXXXXX3034341223671234343034341223671234343067341212;R7=34H;R1=12H;A=30H;(34H)=34H;(45H)=34H;DPTR=6712H;(12H)=67H;R0=12H;A=67H內(nèi)部RAM9/26/202422§3.4算術(shù)運(yùn)算類指令(24條)
ArithmeticOperations
主要對8位無符號數(shù);也可用于帶符號數(shù)運(yùn)算。包括:加、減、乘、除、加1、減1運(yùn)算指令影響PSW有關(guān)位。9/26/2024233.4.1
加法指令
ADDA,#data ;A+data→A
ADDA,direct ;A+(direct)→A
ADDA,Rn ;A+Rn→A
ADDA,@Ri ;A+(Ri)→A用途:將A中的值與源操作數(shù)所指內(nèi)容相加,最終結(jié)果存在A中。1.不帶進(jìn)位位的加法指令(4條)9/26/2024242.帶進(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)算中。說明:由于51單片機(jī)是一種8位機(jī),所以只能做8位的數(shù)學(xué)運(yùn)算,但8位運(yùn)算的范圍只有0~255,這在實(shí)際工作中是不夠的,因此就要進(jìn)行擴(kuò)展,一般是將2個(gè)8位(兩字節(jié))的數(shù)學(xué)運(yùn)算合起來,成為一個(gè)16位的運(yùn)算,這樣,可以表達(dá)的數(shù)的范圍就可以達(dá)到0~65535。9/26/202425例:先做67H+A0H=107H,而107H顯然超過了0FFH,因此最終保存在A中的是07H,而1則到了PSW中的CY位了。換言之,CY就相當(dāng)于是100H。然后再做10H+30H+CY,結(jié)果是41H,所以最終的結(jié)果是4107H。1067H+30A0H0001000001100111001100001010000001000001000001111067H30A0H4107H9/26/202426設(shè):1067H存在R1R0中,30A0H存在R3R2中,計(jì)算R1R0+R3R2,結(jié)果存在R5R4中。MOVA,R0ADDA,R2;R0+R2→A和CYMOVR4,AMOVA,R1ADDCA,R3;R1+R3+CY→A和CYMOVR5,A9/26/202427又例:先做67H+20H=87H,沒有超過0FFH,因此最終保存在A中的是87H,而PSW中的CY=0。然后再做10H+30H+CY,結(jié)果是40H,所以最終的結(jié)果是4087H。1067H+3020H0001000001100111001100000010000001000000100001111067H3020H4087H9/26/202428DAA在進(jìn)行BCD碼加法運(yùn)算時(shí),跟在ADD和ADDC指令之后,用于對累加器A中剛進(jìn)行的兩個(gè)BCD碼的加法的結(jié)果進(jìn)行十進(jìn)制調(diào)整。例:A=00010101BCD(代表十進(jìn)制數(shù)15)ADDA,#83.十進(jìn)制調(diào)整指令(1條);A=1DH,按二進(jìn)制規(guī)律加;A=23H,按十進(jìn)制規(guī)律加DAA9/26/202429
調(diào)整要完成的任務(wù)是:(1)當(dāng)累加器A中的低4位數(shù)出現(xiàn)了非BCD碼(1010~1111)或低4位產(chǎn)生進(jìn)位(AC=1),則應(yīng)在低4位加6調(diào)整,以產(chǎn)生低4位正確的BCD結(jié)果。(2)當(dāng)累加器A中的高4位數(shù)出現(xiàn)了非BCD碼(1010~1111)或高4位產(chǎn)生進(jìn)位(CY=1),則應(yīng)在高4位加6調(diào)整,以產(chǎn)生高4位正確的BCD結(jié)果。
十進(jìn)制調(diào)整指令執(zhí)行后,PSW中的CY表示結(jié)果的百位值。9/26/202430例若(A)=01010110B,表示的BCD碼為56,(R3)=01100111B,表示的BCD碼為67,(CY)=0。執(zhí)行以下指令:ADDA,R2DAA由于(A)=00100011B,即,且(CY)=1,即結(jié)果為BCD數(shù)123。應(yīng)該注意,DA指令不能對減法進(jìn)行十進(jìn)制調(diào)整。9/26/2024313.4.2減法指令(8條)SUBBA,Rn ;A-Rn-CY→ASUBBA,direct;A-(direct)-CY→ASUBBA,@Ri ;A-(Ri)-CY→ASUBBA,#data ;A-data-CY→A將A中的值減去源操作數(shù)所指內(nèi)容以及進(jìn)位位C中的值,最終結(jié)果存在A中。如:
SUBBA,R2設(shè):A=C9H,R2=55H,CY=1,執(zhí)行指令之后,A中的值為73H。1.帶借位的減法指令(4條)9/26/202432說明:沒有不帶借位的減法指令,如果需要做不帶位的減法指令(在做第一次相減時(shí)),只要將CY清零即可。對帶符號數(shù),要注意OV標(biāo)志。OV=1,出錯。9/26/202433§3.5邏輯運(yùn)算類指令(24條)主要用于對2個(gè)操作數(shù)按位進(jìn)行邏輯操作,結(jié)果送到A或直接尋址單元。
主要操作與、或、異或、移位、取反、清零等。
對標(biāo)志位的影響除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。LogicOperations9/26/2024343.5.1邏輯或指令(6條)ORLA,Rn ;A∨Rn→AORLA,direct ;A∨(direct)→AORLA,@Ri ;A∨(Ri)→AORLA,#data ;A∨data→AORLdirect,A ;(direct)∨A→(direct)ORLdirect,#data;(direct)∨data→(direct)影響P標(biāo)志例:71H和56H相或:
01110001(71H) ∨)01010110(56H)01110111即77H后兩條指令,若直接地址為I/O端口,則為“讀-改寫”操作。
OR
LogicInstruction9/26/2024353.5.2邏輯與指令(6條)ANLA,Rn ;A∧Rn→AANLA,direct ;A∧(direct)→AANLA,@Ri ;A∧(Ri)→AANLA,#data;A∧data→AANLdirect,A ;(direct)∧A→(direct)ANLdirect,#data;(direct)∧data→(direct)影響P標(biāo)志例:71H和56H相與: 01110001(71H) ∧)01010110(56H)01010000即50H后兩條指令,若直接地址為I/O端口,則為“讀-改寫”操作。
ANdLogicInstruction9/26/202436例:71H和56H相異或: 01110001(71H)
⊕)01010110(56H)
3.5.2邏輯異或指令(6條)XRLA,Rn ;A⊕Rn→AXRLA,direct ;A⊕(direct)→AXRLA,@Ri ;A⊕(Ri)→AXRLA,#data ;A⊕data→AXRLdirect,A ;(direct)⊕A→(direct)XRLdirect,#data;(direct)⊕data→(direct)影響P標(biāo)志00100111即27H后兩條指令,若直接地址為I/O端口,則為“讀-改寫”操作。
eXclusive-oR
LogicInstruction9/26/2024373.5.3清0與取反指令(2條)取反:CPLA;/A→A例:若A=5CH,執(zhí)行CPLA結(jié)果:A=A3H清0:CLRA ;0→AComPlementLogicOperation9/26/2024383.5.4循環(huán)移位指令(4條)RLA
RRARLCARRCAA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后兩條指令,影響P標(biāo)志和CY。
RotateLogicinstruction9/26/202439例:若A=5CH,CY=1,執(zhí)行RLCA后,對RLC、RRC指令,在CY=0時(shí)
RLC相當(dāng)于乘以2 RRC相當(dāng)于除以2結(jié)果:A=B9H,CY=0,P=10101110011011100109/26/202440§3.6
控制轉(zhuǎn)移類指令(17條)
BranchingInstruction共有控制程序轉(zhuǎn)移類指令(不包括位操作類的轉(zhuǎn)移指令)。此類指令一般不影響PSW。包括以下類型:無條件轉(zhuǎn)移和條件轉(zhuǎn)移相對轉(zhuǎn)移和絕對轉(zhuǎn)移長轉(zhuǎn)移和短轉(zhuǎn)移調(diào)用與返回指令9/26/2024413.6.1
無條件轉(zhuǎn)移類指令(4條)短轉(zhuǎn)移類指令:AJMPaddr11
長轉(zhuǎn)移類指令:LJMPaddr16
相對轉(zhuǎn)移指令:SJMPrel
間接轉(zhuǎn)移指令:JMP@A+DPTR(1)上面的前三條指令,統(tǒng)統(tǒng)理解成:PC值改變,即跳轉(zhuǎn)到一個(gè)標(biāo)號處。那么他們的區(qū)別何在呢?9/26/202442跳轉(zhuǎn)的范圍不同。短轉(zhuǎn)移類指令:AJMPaddr11
長轉(zhuǎn)移類指令:LJMPaddr16
相對轉(zhuǎn)移指令:SJMPrel轉(zhuǎn)移范圍:2KB64KB-128~+127指令構(gòu)成不同。
AJMP、LJMP后跟的是絕對地址,而SJMP后跟的是相對地址。
指令長度不同原則上,所有用SJMP或AJMP的地方都可以用
LJMP來替代。9/26/202443間接轉(zhuǎn)移指令:JMP@A+DPTR這條指令的用途也是跳轉(zhuǎn),轉(zhuǎn)到什么地方去呢?這可不能由標(biāo)號簡單地決定了。轉(zhuǎn)移地址由A+DPTR形成,并直接送入PC。指令對A、DPTR和標(biāo)志位均無影響。本指令可代替眾多的判別跳轉(zhuǎn)指令,又稱為散轉(zhuǎn)指令,多用于多分支程序結(jié)構(gòu)中。(2)第四條指令與前三條指令相比有所不同9/26/202444例:MOVDPTR,#TAB;將TAB代表的地址送入DPTRJMP@A+DPTR;跳轉(zhuǎn)TAB:AJMPROUT0;跳轉(zhuǎn)ROUT0開始的程序段TAB+2:AJMPROUT1;跳轉(zhuǎn)ROUT1開始的程序段TAB+4:
AJMPROUT2;跳轉(zhuǎn)ROUT2開始的程序段TAB+6:
AJMPROUT3;跳轉(zhuǎn)ROUT3開始的程序段...ROUT0:...ROUT1:...ROUT2:...ROUT3:執(zhí)行該段程序后,程序?qū)⒏鶕?jù)A中的內(nèi)容轉(zhuǎn)移到不同的程序段去執(zhí)行----散轉(zhuǎn)。A=0,轉(zhuǎn)ROUT0A=2,轉(zhuǎn)ROUT1A=4,轉(zhuǎn)ROUT2A=6,轉(zhuǎn)ROUT39/26/2024453.6.2條件轉(zhuǎn)移指令(8條)條件轉(zhuǎn)移指令是指在滿足一定條件時(shí)進(jìn)行相對轉(zhuǎn)移,否則程序繼續(xù)執(zhí)行本指令的下一條指令。一、判A內(nèi)容是否為0轉(zhuǎn)移指令(2條)
JZrel;如果A=0,則轉(zhuǎn)移,否則順序執(zhí)行。JNZ
rel;如果A≠0,就轉(zhuǎn)移。轉(zhuǎn)移到相對于當(dāng)前PC值的8位移量的地址去。即:
新的PC值=當(dāng)前PC+偏移量rel我們在編寫匯編語言源程序時(shí),可以直接寫成:JZ
標(biāo)號 ;即轉(zhuǎn)移到標(biāo)號處。9/26/202446例:MOVA,R0
JZL1MOVR1,#00HAJMPL2L1:MOVR1,#0FFH
L2:SJMPL2END在執(zhí)行上面這段程序前:如果R0=0,結(jié)果R1=0FFH。而如果R0
0,則結(jié)果是R1=00H。把上面的那個(gè)例子中的JZ改成JNZ,看看程序執(zhí)行的結(jié)果是什么?如果R0=0,結(jié)果R1=00H。如果R0
0,結(jié)果是R1中的值為0FFH。9/26/202447二、比較不等轉(zhuǎn)移指令(4條)CJNEA,#data,rel
CJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel此類指令的功能是將兩個(gè)操作數(shù)比較,如果兩者相等,就順序執(zhí)行,如果不相等,就轉(zhuǎn)移。同樣地,使用時(shí),我們可以將rel理解成標(biāo)號,即: CJNEA,#data,標(biāo)號 CJNEA,direct,標(biāo)號 CJNERn,#data,標(biāo)號 CJNE@Ri,#data,標(biāo)號9/26/202448利用這些指令,可以判斷兩數(shù)是否相等。但有時(shí)還想得知兩數(shù)比較之后哪個(gè)大,哪個(gè)小,本條指令也具有這樣的功能:如果兩數(shù)不相等,則CPU還會用CY(進(jìn)位位)來反映哪個(gè)數(shù)大,哪個(gè)數(shù)小。如果前面的數(shù)大,則CY=0,否則CY=1。因此在程序轉(zhuǎn)移后再次利用CY就可判斷出哪個(gè)數(shù)大,哪個(gè)數(shù)小了。9/26/202449舉例: MOVA,R0CJNEA,#10H,L1MOVR1,#0;如R0=10H,則不轉(zhuǎn)移R1=00H; AJMPL3L1:JCL2 ;如CY=1即R0<10H,則轉(zhuǎn)移 MOVR1,#0AAH;否則CY=0即R0>10H,則轉(zhuǎn)移 AJMPL3L2:MOVR1,#0FFHL3:SJMPL3因此最終結(jié)果是:本程序執(zhí)行前,如果R0=10H,則R1=00H;如果R0>10H,則R1=0AAH;如果R0<10H,則R1=0FFH。9/26/202450三、減1不為0轉(zhuǎn)移指令(2條)DJNZRn,relDJNZdirect,relDJNZ指令的執(zhí)行過程是這樣的:它將第一個(gè)參數(shù)中的值減1,然后看這個(gè)值是否等于0,如果等于0,就往下執(zhí)行,如果不等于0,就轉(zhuǎn)移到第二個(gè)參數(shù)所指定的地方去。例:DJNZ10H,LOOP...LOOP:...9/26/202451例:MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$上述程序段的執(zhí)行過程是:將23H單元中的數(shù)連續(xù)相加,存至A中,每加一次,23H單元中的數(shù)值減1,直至減到0,共加(23H)次。9/26/2024523.6.3調(diào)用與返回指令(4條)一、調(diào)用指令(2條)
LCALLaddr16
;長調(diào)用指令(3字節(jié))
ACALLaddr11
;短調(diào)用指令(2字節(jié))上面兩條指令都是在主程序中調(diào)用子程序,兩者的區(qū)別:對短調(diào)用指令,被調(diào)用子程序入口地址必須與調(diào)用指令的下一條指令的第一字節(jié)在相同的2KB存儲區(qū)之內(nèi)。使用時(shí)可以用:
LCALL
標(biāo)號;標(biāo)號表示子程序首地址ACALL
標(biāo)號
來調(diào)用子程序。9/26/202453指令的執(zhí)行過程是:當(dāng)前PC壓棧,子程序首地址送PC,實(shí)現(xiàn)轉(zhuǎn)移。二、返回指令
(2條)子程序執(zhí)行完后必須回到主程序,如何返回呢?只要執(zhí)行一條返回指令就可以了。RET ;子程序返回指令RETI ;中斷子程序返回指令兩者不能互換使用。9/26/2024543.6.4空操作指令(1條)
NOP空操作,就是什么事也不干,停一個(gè)周期,一般用作短時(shí)間的延時(shí)。RET指令的執(zhí)行過程是:堆棧棧頂內(nèi)容(2字節(jié),調(diào)用時(shí)保存的當(dāng)前PC值)彈出給PC,實(shí)現(xiàn)返回。RETI指令除了具有RET指令的功能實(shí)現(xiàn)程序返回外,還有對中斷優(yōu)先級狀態(tài)觸發(fā)器的清零。9/26/202455§3.7位操作指令(17條)BooleanOperationsMCS-51單片機(jī)的硬件結(jié)構(gòu)中,有一個(gè)位處理器(又稱布爾處理器),它有一套位變量處理的指令集,包括位變量傳送、邏輯運(yùn)算、控制程序轉(zhuǎn)移等。在MCS-51中,有一部份RAM和一部份SFR是具有位尋址功能的。位操作區(qū):內(nèi)部RAM的20H-2FH這16個(gè)字節(jié)單元,即128個(gè)位單元(位地址空間位00~7FH);可以位尋址的特殊功能寄存器:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年新教材高中生物第6章細(xì)胞的生命歷程第2節(jié)細(xì)胞的分化課后提升訓(xùn)練含解析新人教版必修第一冊
- 2023年足球腳內(nèi)側(cè)傳球技術(shù)教案
- 上?,F(xiàn)代化工職業(yè)學(xué)院《機(jī)械裝備失效診斷技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海戲劇學(xué)院《測量學(xué)C》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025書畫銷售合同范本
- 2025產(chǎn)品購銷合同書文本
- 2025餐飲聯(lián)營合同范本
- 2025勞動合同(實(shí)習(xí)模版)
- 課題申報(bào)書:分類管理背景下民辦高校組織合法性挑戰(zhàn)與制度創(chuàng)新研究
- 上海閔行職業(yè)技術(shù)學(xué)院《工業(yè)通風(fēng)與潔凈技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 量具使用方法的培訓(xùn)
- 泰坦尼克號英文ppt
- 探尋中國茶一片樹葉的傳奇之旅2023章節(jié)測試答案-探尋中國茶一片樹葉的傳奇之旅超星爾雅答案
- 部編版初中語文七至九年級語文教材各冊人文主題與語文要素匯總一覽表合集單元目標(biāo)能力點(diǎn)
- 社會保險(xiǎn)業(yè)務(wù)申報(bào)表(填表說明)
- 02S701磚砌化糞池標(biāo)準(zhǔn)圖集
- 陜西西安未央?yún)^(qū)2021-2022學(xué)年度第一學(xué)期期末質(zhì)量檢測五年級英語試卷(人教PEP版含答案)
- 大疆開 FCC BOOST 教程指南
- C++面向?qū)ο蟪绦蛟O(shè)計(jì)(第二版)課件整套電子教案
- YY/T 0506.3-2005病人、醫(yī)護(hù)人員和器械用手術(shù)單、手術(shù)衣和潔凈服 第3部分:試驗(yàn)方法
- 醫(yī)院行風(fēng)建設(shè)及行風(fēng)示范窗口建設(shè)工作計(jì)劃
評論
0/150
提交評論