單片機教程3-MCS-51指令系統(tǒng)課件_第1頁
單片機教程3-MCS-51指令系統(tǒng)課件_第2頁
單片機教程3-MCS-51指令系統(tǒng)課件_第3頁
單片機教程3-MCS-51指令系統(tǒng)課件_第4頁
單片機教程3-MCS-51指令系統(tǒng)課件_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

§3.1概述7種尋址方式,111條指令字節(jié)數(shù)運算速度單字節(jié)指令:49條雙字節(jié)指令:45條三字節(jié)指令:17條單周期指令:64條雙周期指令:45條四周期指令:2條第三章MCS-51指令系統(tǒng)10/18/20221§3.1概述7種尋址方式,111條指令字節(jié)數(shù)運算速度單字功能數(shù)據(jù)傳送類:29條算術(shù)運算類:24條邏輯運算類:24條控制轉(zhuǎn)移類:17條位操作類:17條10/18/20222功能數(shù)據(jù)傳送類:29條10/15/20222常用符號Rn:工作寄存器中的寄存器R0、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位目的地址10/18/20223常用符號Rn:工作寄存器中的寄存器R0、R1…R7之一,Rirel:補碼形式的8位地址偏移量。偏移范圍為-128~127/:位操作指令中,該位求反后參與操作,不影響該位X:片內(nèi)RAM的直接地址或寄存器(X):相應(yīng)地址單元中的內(nèi)容→:箭頭左邊的內(nèi)容送入箭頭右邊的單元內(nèi)10/18/20224rel:補碼形式的8位地址偏移量。10/15/20224§3.2尋址方式3.2.1立即尋址ImmediateAddressing操作數(shù)就包含在指令代碼中,在操作碼之后,稱為立即數(shù),用“?!北硎?。

MCS-51如:MOVP1,#80HMOVR7,#0F5HMOVDPTR,#1245H操作數(shù)存在程序存儲器中10/18/20225§3.2尋址方式3.2.1立即尋址操作數(shù)3.2.2直接尋址

DirectAddressing直接使用數(shù)所在單元的地址找到了操作數(shù),所以稱這種方法為直接尋址。操作數(shù)在SFR、內(nèi)部RAM、位地址空間。如:MOVA,00H

MOVC,60H

MOVA,0F0H10/18/202263.2.2直接尋址10/15/203.2.3寄存器尋址RegisterAddressing對選定的工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR中的數(shù)進(jìn)行操作。

例:MOVA,R0;將R0工作寄存器中的數(shù)據(jù)送到累加器A中去。提一個問題:我們知道,工作寄存器就是內(nèi)存單元的一部分,如果我們選擇工作寄存器組0,則R0就是RAM的00H單元,那么這樣一來,MOVA,00H和MOVA,R0不就沒什么區(qū)別了嗎?10/18/202273.2.3寄存器尋址對選定的工作寄存器R0~R7、累的確,這兩條指令執(zhí)行的結(jié)果是完全相同的,都是將00H單元中的內(nèi)容送到A中去,但是執(zhí)行的過程不同,執(zhí)行第一條指令需要2個機器周期,而第二條則只需要1個機器周期,第一條指令變成最終的目標(biāo)碼要兩個字節(jié)(E5H00H),而第二條則只要一個字節(jié)(E8H)就可以了。10/18/20228的確,這兩條指令執(zhí)行的結(jié)果是完全相同的,都是將00H3.2.4寄存器間接尋址Register

IndirectAddressing把地址放在另外一個寄存器中,根據(jù)這個寄存器中的數(shù)值決定該到哪個單元中取數(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中10/18/202293.2.4寄存器間接尋址把地址放在另外一個寄存器中,以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ù)在程序存儲器中10/18/202210以DPTR或PC為基址寄存器,累加器A為變址寄存器。把兩者內(nèi)E0A程序存儲區(qū)2040H9320E0H472041H………DPH20DPL00ALU如:MOVCA,@A+DPTR設(shè)DPTR=2000H,A=E0H20E0H47指令代碼10/18/202211E0A程序存儲區(qū)2040H9320E0H3.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改變PC10/18/2022123.2.6相對尋址將PC中的當(dāng)前內(nèi)容與指令第二字節(jié)給程序存儲區(qū)ALU如:JC231025H1000H401025H451001H

23……1024H471002H3023H1002H指令代碼當(dāng)前PC10/18/202213程序存儲區(qū)ALU如:JC231025H1000H

對片內(nèi)RAM的位尋址區(qū)和某些可位尋址的特殊功能寄存器進(jìn)行位操作時的尋址方式。如:SETB3DH;將27H.5位置1 CLRC;Cy位清03.2.7位尋址BitAddressing操作數(shù)在片內(nèi)RAM位地址區(qū)或SFR某些位中10/18/202214對片內(nèi)RAM的位尋址區(qū)和某些可位尋址的特殊功能寄存器尋址方式涉及的存儲器空間尋址方式尋址空間(操作數(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é)地址)某些可位尋址的SFR10/18/202215尋址方式涉及的存儲器空間尋址方式尋址空間(操作數(shù)存放空間)立§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)志位。10/18/202216§3.3數(shù)據(jù)傳送類指令(29條)MCS-513.3.1十六位數(shù)的傳遞指令(1條) MOVDPTR,#data168051是一種8位機,這是唯一的一條16位立即數(shù)傳遞指令。功能:將一個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。10/18/2022173.3.1十六位數(shù)的傳遞指令(1條) MOVDPTR3.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ù))送入另一個單元(設(shè)為0200H單元),也必須先將0100H單元中的內(nèi)容讀入A,然后再送到0200H單元中去。10/18/2022183.3.2累加器A與片外RAM之間的數(shù)據(jù)傳遞類指令(4條)2.要讀或?qū)懲獠康腞AM,當(dāng)然也必須要知道RAM的地址,在后兩條指令中,地址是被直接放在DPTR中的。而前兩條指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來提供。3.使用時應(yīng)先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀寫命令。

例:將外部RAM中100H單元中的內(nèi)容送入外部RAM中200H單元中。 MOVDPTR,#0100H MOVXA,@DPTR MOVDPTR,#0200H MOVX@DPTR,A10/18/2022192.要讀或?qū)懲獠康腞AM,當(dāng)然也必須要知道RAM的地址,3.3.3讀程序存儲器指令(2條)MOVCA,@A+DPTRMOVCA,@A+PC本組指令是將ROM中的數(shù)送入A中。本組指令也被稱為查表指令,常用此指令來查一個已做好在ROM中的表格說明:查找到的結(jié)果被放在A中,因此,本條指令執(zhí)行前后,A中的值不一定相同。例:有一個數(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。10/18/2022203.3.3讀程序存儲器指令(2條)MOVC3.3.4堆棧操作(2條)

PUSHdirect;SPSP+1,(SP)(direct)

POPdirect;(direct)(SP),SPSP-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時,是將SP+1,即變?yōu)?1H,然后將B中的值送入到61H單元中,即執(zhí)行完本條指令后,61H單元中的值變?yōu)?0。10/18/2022213.3.4堆棧操作(2條) PUSHdirect;S1.給出每條指令執(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)部RAM10/18/2022221.給出每條指令執(zhí)行后的結(jié)果MOV23H,#30H;(2§3.4算術(shù)運算類指令(24條)

ArithmeticOperations

主要對8位無符號數(shù);也可用于帶符號數(shù)運算。包括:加、減、乘、除、加1、減1運算指令影響PSW有關(guān)位。10/18/202223§3.4算術(shù)運算類指令(24條)主要對8位無符號數(shù);也3.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條)10/18/2022243.4.1加法指令 ADDA,#data ;A+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ù)運算中。說明:由于51單片機是一種8位機,所以只能做8位的數(shù)學(xué)運算,但8位運算的范圍只有0~255,這在實際工作中是不夠的,因此就要進(jìn)行擴展,一般是將2個8位(兩字節(jié))的數(shù)學(xué)運算合起來,成為一個16位的運算,這樣,可以表達(dá)的數(shù)的范圍就可以達(dá)到0~65535。10/18/2022252.帶進(jìn)位位的加法指令(4條) ADDCA,Rn ;A例:先做67H+A0H=107H,而107H顯然超過了0FFH,因此最終保存在A中的是07H,而1則到了PSW中的CY位了。換言之,CY就相當(dāng)于是100H。然后再做10H+30H+CY,結(jié)果是41H,所以最終的結(jié)果是4107H。1067H+30A0H0001000001100111001100001010000001000001000001111067H30A0H4107H10/18/202226例:先做67H+A0H=107H,而107H顯設(shè):1067H存在R1R0中,30A0H存在R3R2中,計算R1R0+R3R2,結(jié)果存在R5R4中。MOVA,R0ADDA,R2;R0+R2→A和CYMOVR4,AMOVA,R1ADDCA,R3;R1+R3+CY→A和CYMOVR5,A10/18/202227設(shè):1067H存在R1R0中,30A0H存在R3R2中,計又例:先做67H+20H=87H,沒有超過0FFH,因此最終保存在A中的是87H,而PSW中的CY=0。然后再做10H+30H+CY,結(jié)果是40H,所以最終的結(jié)果是4087H。1067H+3020H0001000001100111001100000010000001000000100001111067H3020H4087H10/18/202228又例:先做67H+20H=87H,沒有超過0FDAA在進(jìn)行BCD碼加法運算時,跟在ADD和ADDC指令之后,用于對累加器A中剛進(jìn)行的兩個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ī)律加DAA10/18/202229DAA3.十進(jìn)制調(diào)整指令(1條);A=1DH,按二進(jìn)

調(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é)果的百位值。10/18/202230調(diào)整要完成的任務(wù)是:(1)當(dāng)累加器A中的低4位數(shù)出現(xiàn)了非例若(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)整。10/18/202231例若(A)=01010110B,表示的BCD碼為563.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條)10/18/2022323.4.2減法指令(8條)SUBBA,Rn ;說明:沒有不帶借位的減法指令,如果需要做不帶位的減法指令(在做第一次相減時),只要將CY清零即可。對帶符號數(shù),要注意OV標(biāo)志。OV=1,出錯。10/18/202233說明:沒有不帶借位的減法指令,如果需要做不帶位的減法指令(在§3.5邏輯運算類指令(24條)主要用于對2個操作數(shù)按位進(jìn)行邏輯操作,結(jié)果送到A或直接尋址單元。

主要操作與、或、異或、移位、取反、清零等。

對標(biāo)志位的影響除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。LogicOperations10/18/202234§3.5邏輯運算類指令(24條)主要用于對2個操作數(shù)按位3.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

LogicInstruction10/18/2022353.5.1邏輯或指令(6條)ORLA,Rn ;A∨3.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端口,則為“讀-改寫”操作。

ANdLogicInstruction10/18/2022363.5.2邏輯與指令(6條)ANLA,Rn 例: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

LogicInstruction10/18/202237例:71H和56H相異或:3.5.2邏輯異或指令(63.5.3清0與取反指令(2條)取反:CPLA;/A→A例:若A=5CH,執(zhí)行CPLA結(jié)果:A=A3H清0:CLRA ;0→AComPlementLogicOperation10/18/2022383.5.3清0與取反指令(2條)取反:CPLA;/3.5.4循環(huán)移位指令(4條)RLA

RRARLCARRCAA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后兩條指令,影響P標(biāo)志和CY。

RotateLogicinstruction10/18/2022393.5.4循環(huán)移位指令(4條)RLA A.7 例:若A=5CH,CY=1,執(zhí)行RLCA后,對RLC、RRC指令,在CY=0時 RLC相當(dāng)于乘以2 RRC相當(dāng)于除以2結(jié)果:A=B9H,CY=0,P=101011100110111001010/18/202240例:若A=5CH,CY=1,執(zhí)行RLCA后,結(jié)果:A=B9§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)用與返回指令10/18/202241§3.6控制轉(zhuǎn)移類指令(17條)

Branc3.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)到一個標(biāo)號處。那么他們的區(qū)別何在呢?10/18/2022423.6.1無條件轉(zhuǎn)移類指令(4條)短轉(zhuǎn)移類指令:AJMP跳轉(zhuǎn)的范圍不同。短轉(zhuǎn)移類指令:AJMPaddr11長轉(zhuǎn)移類指令:LJMPaddr16相對轉(zhuǎn)移指令:SJMPrel轉(zhuǎn)移范圍:2KB64KB-128~+127指令構(gòu)成不同。

AJMP、LJMP后跟的是絕對地址,而SJMP后跟的是相對地址。

指令長度不同原則上,所有用SJMP或AJMP的地方都可以用

LJMP來替代。10/18/202243短轉(zhuǎn)移類指令:AJMPaddr11轉(zhuǎn)移范圍:10/1間接轉(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)第四條指令與前三條指令相比有所不同10/18/202244間接轉(zhuǎn)移指令:JMP@A+DPTR這條指令的用途也例: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)ROUT310/18/202245例:MOVDPTR,#TAB;將TAB代表的地址送入D3.6.2條件轉(zhuǎn)移指令(8條)條件轉(zhuǎn)移指令是指在滿足一定條件時進(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我們在編寫匯編語言源程序時,可以直接寫成:JZ

標(biāo)號 ;即轉(zhuǎn)移到標(biāo)號處。10/18/2022463.6.2條件轉(zhuǎn)移指令(8條)條件轉(zhuǎn)移指令是指在滿足一例:MOVA,R0

JZL1MOVR1,#00HAJMPL2L1:MOVR1,#0FFH

L2:SJMPL2END在執(zhí)行上面這段程序前:如果R0=0,結(jié)果R1=0FFH。而如果R00,則結(jié)果是R1=00H。把上面的那個例子中的JZ改成JNZ,看看程序執(zhí)行的結(jié)果是什么?如果R0=0,結(jié)果R1=00H。如果R00,結(jié)果是R1中的值為0FFH。10/18/202247例:MOVA,R0如果R0=0,二、比較不等轉(zhuǎn)移指令(4條)CJNEA,#data,rel

CJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel此類指令的功能是將兩個操作數(shù)比較,如果兩者相等,就順序執(zhí)行,如果不相等,就轉(zhuǎn)移。同樣地,使用時,我們可以將rel理解成標(biāo)號,即: CJNEA,#data,標(biāo)號 CJNEA,direct,標(biāo)號 CJNERn,#data,標(biāo)號 CJNE@Ri,#data,標(biāo)號10/18/202248二、比較不等轉(zhuǎn)移指令(4條)CJNEA,#data,rel利用這些指令,可以判斷兩數(shù)是否相等。但有時還想得知兩數(shù)比較之后哪個大,哪個小,本條指令也具有這樣的功能:如果兩數(shù)不相等,則CPU還會用CY(進(jìn)位位)來反映哪個數(shù)大,哪個數(shù)小。如果前面的數(shù)大,則CY=0,否則CY=1。因此在程序轉(zhuǎn)移后再次利用CY就可判斷出哪個數(shù)大,哪個數(shù)小了。10/18/202249利用這些指令,可以判斷兩數(shù)是否相等。10/15/202249舉例: 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。10/18/202250舉例: MOVA,R010/15/202250三、減1不為0轉(zhuǎn)移指令(2條)DJNZRn,relDJNZdirect,relDJNZ指令的執(zhí)行過程是這樣的:它將第一個參數(shù)中的值減1,然后看這個值是否等于0,如果等于0,就往下執(zhí)行,如果不等于0,就轉(zhuǎn)移到第二個參數(shù)所指定的地方去。例:DJNZ10H,LOOP...LOOP:...10/18/202251三、減1不為0轉(zhuǎn)移指令(2條)DJNZRn,rel10/1例:MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$上述程序段的執(zhí)行過程是:將23H單元中的數(shù)連續(xù)相加,存至A中,每加一次,23H單元中的數(shù)值減1,直至減到0,共加(23H)次。10/18/202252例:10/15/2022523.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)。使用時可以用:

LCALL

標(biāo)號;標(biāo)號表示子程序首地址ACALL

標(biāo)號

來調(diào)用子程序。10/18/2022533.6.3調(diào)用與返回指令(4條)一、調(diào)用指令(2條)指令的執(zhí)行過程是:當(dāng)前PC壓棧,子程序首地址送PC,實現(xiàn)轉(zhuǎn)移。二、返回指令

(2條)子程序執(zhí)行完后必須回到主程序,如何返回呢?只要執(zhí)行一條返回指令就可以了。RET ;子程序返回指令RETI ;中斷子程序返回指令兩者不能互換使用。10/18/202254指令的執(zhí)行過程是:當(dāng)前PC壓棧,子程序首地址送PC,實現(xiàn)轉(zhuǎn)3.6.4空操作指令(1條)

NOP空操作,就是什么事也不干,停一個周期,一般用作短時間的延時。RET指令的執(zhí)行過程是:堆棧棧頂內(nèi)容(2字節(jié),調(diào)用時保存的當(dāng)前PC值)彈出給PC,實現(xiàn)返回。RETI指令除了具有RET指令的功能實現(xiàn)程序返回外,還有對中斷優(yōu)先級狀態(tài)觸發(fā)器的清零。10/18/2022553.6.4空操作指令(1條)NOPRET指令的執(zhí)行過程§3.7位操作指令(17條)BooleanOperationsMCS-51單片機的硬件結(jié)構(gòu)中,有一個位處理器(又稱布爾處理器),它有一套位變量處理的指令集,包括位變量傳送、邏輯運算、控制程序轉(zhuǎn)移等。在MCS-51中,有一部份RAM和一部份SFR是具有位尋址功能的。位操作區(qū):內(nèi)部RAM的20H-2FH這16個字節(jié)單元,即128個位單元(位地址空間位00~7FH);可以位尋址的特殊功能寄存器:8031中有一10/18/202256§3.7位操作指令(17條)Boolea

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論