




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
§3.1概述7種尋址方式,111條指令字節數運算速度單字節指令:49條雙字節指令:45條三字節指令:17條單周期指令:64條雙周期指令:45條四周期指令:2條第三章MCS-51指令系統
InstructionSet9/26/20241功能數據傳送類:29條算術運算類:24條邏輯運算類:24條控制轉移類:17條位操作類:17條9/26/20242常用符號Rn:工作寄存器中的寄存器Rn、R1…R7之一,Ri:工作寄存器中的寄存器R0或R1#data:8位立即數#data16:16位立即數direct:片內RAM或SFR的地址(8位)@間接尋址寄存器Bit:片內RAM或SFR的位地址addr11:11位目的地址addr16:16位目的地址9/26/20243rel:補碼形式的8位地址偏移量。偏移范圍為-128~127/:位操作指令中,該位求反后參與操作,不影響該位X:片內RAM的直接地址或寄存器(X):相應地址單元中的內容→:箭頭左邊的內容送入箭頭右邊的單元內9/26/20244§3.2尋址方式3.2.1立即尋址ImmediateAddressing操作數就包含在指令代碼中,在操作碼之后,稱為立即數,用“#”表示。
MCS-51如:MOVP1,#80HMOVR7,#0F5HMOVDPTR,#1245H操作數存在程序存儲器中9/26/202453.2.2直接尋址
DirectAddressing直接使用數所在單元的地址找到了操作數,所以稱這種方法為直接尋址。操作數在SFR、內部RAM、位地址空間。如:MOVA,00H
MOVC,60H
MOVA,0F0H9/26/202463.2.3寄存器尋址RegisterAddressing對選定的工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR中的數進行操作。
例:MOVA,R0;將R0工作寄存器中的數據送到累加器A中去。提一個問題:我們知道,工作寄存器就是內存單元的一部分,如果我們選擇工作寄存器組0,則R0就是RAM的00H單元,那么這樣一來,MOVA,00H和MOVA,R0不就沒什么區別了嗎?9/26/20247的確,這兩條指令執行的結果是完全相同的,都是將00H單元中的內容送到A中去,但是執行的過程不同,執行第一條指令需要2個機器周期,而第二條則只需要1個機器周期,第一條指令變成最終的目標碼要兩個字節(E5H00H),而第二條則只要一個字節(E8H)就可以了。9/26/202483.2.4寄存器間接尋址Register
IndirectAddressing把地址放在另外一個寄存器中,根據這個寄存器中的數值決定該到哪個單元中取數據。R0,R1----8位地址,片內低128字節或片外DPTR----16位,片外64KB
MCS-51如: MOVA,@R0 MOVXA,@R0 MOVXA,@DPTR操作數在片內RAM中操作數在片外RAM中操作數在片外RAM中9/26/20249以DPTR或PC為基址寄存器,累加器A為變址寄存器。把兩者內容相加,結果作為操作數的地址。常用于查表操作。
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操作數在程序存儲器中9/26/202410E0A程序存儲區2040H9320E0H472041H………DPH20DPL00ALU如:MOVCA,@A+DPTR設DPTR=2000H,A=E0H20E0H47指令代碼9/26/2024113.2.6相對尋址將PC中的當前內容與指令第二字節給出的數相加,結果作為跳轉指令的轉移地址(轉移目的地址)。PC中的當前內容稱為基地址(本指令后的字節地址)指令第二字節給出的數據稱為偏移量,1字節帶符號數.常用于跳轉指令。如:JC23H若C=0,不跳轉;C=1,跳轉.RelativeAddressing改變PC9/26/202412程序存儲區ALU如:JC231025H1000H401025H451001H
23……1024H471002H3023H1002H指令代碼當前PC9/26/202413
對片內RAM的位尋址區和某些可位尋址的特殊功能寄存器進行位操作時的尋址方式。如:SETB3DH;將27H.5位置1 CLRC;Cy位清03.2.7位尋址BitAddressing操作數在片內RAM位地址區或SFR某些位中9/26/202414尋址方式涉及的存儲器空間尋址方式尋址空間(操作數存放空間)立即尋址程序存儲器直接尋址片內RAM低128字節、SFR寄存器尋址工作寄存器R0~R7,A,B,DPTR寄存器間接尋址片內RAM:@R0,@R1,SP片外RAM:@R0,@R1,@DPTR變址尋址程序存儲器:@A+PC,@A+DPTR相對尋址程序存儲器256字節范圍內:PC+偏移量位尋址片內RAM的位尋址區(20H~2FH字節地址)某些可位尋址的SFR9/26/202415§3.3數據傳送類指令(29條)
DataTransferInstructionMCS-51助記符:助記符:MOV、MOVX、MOVC
XCH、XCHD、SWAP
PUSH、POP
源操作數尋址方式(5種):立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址。目的操作數尋址方式(3種):直接尋址、寄存器尋址、寄存器間接尋址
除了目的操作數為ACC的指令影響奇偶標志P外,一般不影響標志位。9/26/2024163.3.1十六位數的傳遞指令(1條) MOVDPTR,#data168051是一種8位機,這是唯一的一條16位立即數傳遞指令。功能:將一個16位的立即數送入DPTR中去。其中高8位送入DPH,低8位送入DPL。
例:MOVDPTR,#1234H執行完了之后DPH中的值為12H,DPL中的值為34H。如果我們分別向DPH,DPL送數,則結果也一樣。如下面兩條指令:MOVDPH,#35H MOVDPL,#12H。則就相當于執行了MOVDPTR,#3512H。9/26/2024173.3.2累加器A與片外RAM之間的數據傳遞類指令(4條)
MOVX
A,@Ri
MOVX
@Ri,A
MOVX
A,@DPTR
MOVX
@DPTR,A說明:1.在51中,與外部存儲器RAM打交道的只可以是A累加器。所有需要送入外部RAM的數據必需要通過A送去,而所有要讀入的外部RAM中的數據也必需通過A讀入。在此我們可以看出內外部RAM的區別了,內部RAM間可以直接進行數據的傳遞,而外部則不行。比如,要將外部RAM中某一單元(設為0100H單元的數據)送入另一個單元(設為0200H單元),也必須先將0100H單元中的內容讀入A,然后再送到0200H單元中去。9/26/2024182.要讀或寫外部的RAM,當然也必須要知道RAM的地址,在后兩條指令中,地址是被直接放在DPTR中的。而前兩條指令,由于Ri(即R0或R1)只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來提供。3.使用時應先將要讀或寫的地址送入DPTR或Ri中,然后再用讀寫命令。
例:將外部RAM中100H單元中的內容送入外部RAM中200H單元中。 MOVDPTR,#0100H MOVXA,@DPTR MOVDPTR,#0200H MOVX@DPTR,A9/26/2024193.3.3讀程序存儲器指令(2條)MOVCA,@A+DPTRMOVCA,@A+PC本組指令是將ROM中的數送入A中。本組指令也被稱為查表指令,常用此指令來查一個已做好在ROM中的表格說明:查找到的結果被放在A中,因此,本條指令執行前后,A中的值不一定相同。例:有一個數在R0中,要求用查表的方法確定它的平方值(此數的取值范圍是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中的內容送入堆棧中,第二條為彈出指令,就是將堆棧中的內容送回到direct中。例: MOVSP,#5FH MOVA,#100 MOVB,#20
PUSHACC PUSHB
則執行第一條PUSHACC指令是這樣的:將SP中的值加1,即變為60H,然后將A中的值送到60H單元中,因此執行完本條指令后,內存60H單元的值就是100,同樣,執行PUSHB時,是將SP+1,即變為61H,然后將B中的值送入到61H單元中,即執行完本條指令后,61H單元中的值變為20。9/26/2024211.給出每條指令執行后的結果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內部RAM9/26/202422§3.4算術運算類指令(24條)
ArithmeticOperations
主要對8位無符號數;也可用于帶符號數運算。包括:加、減、乘、除、加1、減1運算指令影響PSW有關位。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中的值與源操作數所指內容相加,最終結果存在A中。1.不帶進位位的加法指令(4條)9/26/2024242.帶進位位的加法指令(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中的值和其后面的值以及進位位C中的值相加,最終結果存在A,常用于多字節數運算中。說明:由于51單片機是一種8位機,所以只能做8位的數學運算,但8位運算的范圍只有0~255,這在實際工作中是不夠的,因此就要進行擴展,一般是將2個8位(兩字節)的數學運算合起來,成為一個16位的運算,這樣,可以表達的數的范圍就可以達到0~65535。9/26/202425例:先做67H+A0H=107H,而107H顯然超過了0FFH,因此最終保存在A中的是07H,而1則到了PSW中的CY位了。換言之,CY就相當于是100H。然后再做10H+30H+CY,結果是41H,所以最終的結果是4107H。1067H+30A0H0001000001100111001100001010000001000001000001111067H30A0H4107H9/26/202426設:1067H存在R1R0中,30A0H存在R3R2中,計算R1R0+R3R2,結果存在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,結果是40H,所以最終的結果是4087H。1067H+3020H0001000001100111001100000010000001000000100001111067H3020H4087H9/26/202428DAA在進行BCD碼加法運算時,跟在ADD和ADDC指令之后,用于對累加器A中剛進行的兩個BCD碼的加法的結果進行十進制調整。例:A=00010101BCD(代表十進制數15)ADDA,#83.十進制調整指令(1條);A=1DH,按二進制規律加;A=23H,按十進制規律加DAA9/26/202429
調整要完成的任務是:(1)當累加器A中的低4位數出現了非BCD碼(1010~1111)或低4位產生進位(AC=1),則應在低4位加6調整,以產生低4位正確的BCD結果。(2)當累加器A中的高4位數出現了非BCD碼(1010~1111)或高4位產生進位(CY=1),則應在高4位加6調整,以產生高4位正確的BCD結果。
十進制調整指令執行后,PSW中的CY表示結果的百位值。9/26/202430例若(A)=01010110B,表示的BCD碼為56,(R3)=01100111B,表示的BCD碼為67,(CY)=0。執行以下指令:ADDA,R2DAA由于(A)=00100011B,即,且(CY)=1,即結果為BCD數123。應該注意,DA指令不能對減法進行十進制調整。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中的值減去源操作數所指內容以及進位位C中的值,最終結果存在A中。如:
SUBBA,R2設:A=C9H,R2=55H,CY=1,執行指令之后,A中的值為73H。1.帶借位的減法指令(4條)9/26/202432說明:沒有不帶借位的減法指令,如果需要做不帶位的減法指令(在做第一次相減時),只要將CY清零即可。對帶符號數,要注意OV標志。OV=1,出錯。9/26/202433§3.5邏輯運算類指令(24條)主要用于對2個操作數按位進行邏輯操作,結果送到A或直接尋址單元。
主要操作與、或、異或、移位、取反、清零等。
對標志位的影響除了目的操作數為ACC的指令影響奇偶標志P外,一般不影響標志位。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標志例: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標志例: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標志00100111即27H后兩條指令,若直接地址為I/O端口,則為“讀-改寫”操作。
eXclusive-oR
LogicInstruction9/26/2024373.5.3清0與取反指令(2條)取反:CPLA;/A→A例:若A=5CH,執行CPLA結果:A=A3H清0:CLRA ;0→AComPlementLogicOperation9/26/2024383.5.4循環移位指令(4條)RLA
RRARLCARRCAA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后兩條指令,影響P標志和CY。
RotateLogicinstruction9/26/202439例:若A=5CH,CY=1,執行RLCA后,對RLC、RRC指令,在CY=0時
RLC相當于乘以2 RRC相當于除以2結果:A=B9H,CY=0,P=10101110011011100109/26/202440§3.6
控制轉移類指令(17條)
BranchingInstruction共有控制程序轉移類指令(不包括位操作類的轉移指令)。此類指令一般不影響PSW。包括以下類型:無條件轉移和條件轉移相對轉移和絕對轉移長轉移和短轉移調用與返回指令9/26/2024413.6.1
無條件轉移類指令(4條)短轉移類指令:AJMPaddr11
長轉移類指令:LJMPaddr16
相對轉移指令:SJMPrel
間接轉移指令:JMP@A+DPTR(1)上面的前三條指令,統統理解成:PC值改變,即跳轉到一個標號處。那么他們的區別何在呢?9/26/202442跳轉的范圍不同。短轉移類指令:AJMPaddr11
長轉移類指令:LJMPaddr16
相對轉移指令:SJMPrel轉移范圍:2KB64KB-128~+127指令構成不同。
AJMP、LJMP后跟的是絕對地址,而SJMP后跟的是相對地址。
指令長度不同原則上,所有用SJMP或AJMP的地方都可以用
LJMP來替代。9/26/202443間接轉移指令:JMP@A+DPTR這條指令的用途也是跳轉,轉到什么地方去呢?這可不能由標號簡單地決定了。轉移地址由A+DPTR形成,并直接送入PC。指令對A、DPTR和標志位均無影響。本指令可代替眾多的判別跳轉指令,又稱為散轉指令,多用于多分支程序結構中。(2)第四條指令與前三條指令相比有所不同9/26/202444例:MOVDPTR,#TAB;將TAB代表的地址送入DPTRJMP@A+DPTR;跳轉TAB:AJMPROUT0;跳轉ROUT0開始的程序段TAB+2:AJMPROUT1;跳轉ROUT1開始的程序段TAB+4:
AJMPROUT2;跳轉ROUT2開始的程序段TAB+6:
AJMPROUT3;跳轉ROUT3開始的程序段...ROUT0:...ROUT1:...ROUT2:...ROUT3:執行該段程序后,程序將根據A中的內容轉移到不同的程序段去執行----散轉。A=0,轉ROUT0A=2,轉ROUT1A=4,轉ROUT2A=6,轉ROUT39/26/2024453.6.2條件轉移指令(8條)條件轉移指令是指在滿足一定條件時進行相對轉移,否則程序繼續執行本指令的下一條指令。一、判A內容是否為0轉移指令(2條)
JZrel;如果A=0,則轉移,否則順序執行。JNZ
rel;如果A≠0,就轉移。轉移到相對于當前PC值的8位移量的地址去。即:
新的PC值=當前PC+偏移量rel我們在編寫匯編語言源程序時,可以直接寫成:JZ
標號 ;即轉移到標號處。9/26/202446例:MOVA,R0
JZL1MOVR1,#00HAJMPL2L1:MOVR1,#0FFH
L2:SJMPL2END在執行上面這段程序前:如果R0=0,結果R1=0FFH。而如果R0
0,則結果是R1=00H。把上面的那個例子中的JZ改成JNZ,看看程序執行的結果是什么?如果R0=0,結果R1=00H。如果R0
0,結果是R1中的值為0FFH。9/26/202447二、比較不等轉移指令(4條)CJNEA,#data,rel
CJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel此類指令的功能是將兩個操作數比較,如果兩者相等,就順序執行,如果不相等,就轉移。同樣地,使用時,我們可以將rel理解成標號,即: CJNEA,#data,標號 CJNEA,direct,標號 CJNERn,#data,標號 CJNE@Ri,#data,標號9/26/202448利用這些指令,可以判斷兩數是否相等。但有時還想得知兩數比較之后哪個大,哪個小,本條指令也具有這樣的功能:如果兩數不相等,則CPU還會用CY(進位位)來反映哪個數大,哪個數小。如果前面的數大,則CY=0,否則CY=1。因此在程序轉移后再次利用CY就可判斷出哪個數大,哪個數小了。9/26/202449舉例: MOVA,R0CJNEA,#10H,L1MOVR1,#0;如R0=10H,則不轉移R1=00H; AJMPL3L1:JCL2 ;如CY=1即R0<10H,則轉移 MOVR1,#0AAH;否則CY=0即R0>10H,則轉移 AJMPL3L2:MOVR1,#0FFHL3:SJMPL3因此最終結果是:本程序執行前,如果R0=10H,則R1=00H;如果R0>10H,則R1=0AAH;如果R0<10H,則R1=0FFH。9/26/202450三、減1不為0轉移指令(2條)DJNZRn,relDJNZdirect,relDJNZ指令的執行過程是這樣的:它將第一個參數中的值減1,然后看這個值是否等于0,如果等于0,就往下執行,如果不等于0,就轉移到第二個參數所指定的地方去。例:DJNZ10H,LOOP...LOOP:...9/26/202451例:MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$上述程序段的執行過程是:將23H單元中的數連續相加,存至A中,每加一次,23H單元中的數值減1,直至減到0,共加(23H)次。9/26/2024523.6.3調用與返回指令(4條)一、調用指令(2條)
LCALLaddr16
;長調用指令(3字節)
ACALLaddr11
;短調用指令(2字節)上面兩條指令都是在主程序中調用子程序,兩者的區別:對短調用指令,被調用子程序入口地址必須與調用指令的下一條指令的第一字節在相同的2KB存儲區之內。使用時可以用:
LCALL
標號;標號表示子程序首地址ACALL
標號
來調用子程序。9/26/202453指令的執行過程是:當前PC壓棧,子程序首地址送PC,實現轉移。二、返回指令
(2條)子程序執行完后必須回到主程序,如何返回呢?只要執行一條返回指令就可以了。RET ;子程序返回指令RETI ;中斷子程序返回指令兩者不能互換使用。9/26/2024543.6.4空操作指令(1條)
NOP空操作,就是什么事也不干,停一個周期,一般用作短時間的延時。RET指令的執行過程是:堆棧棧頂內容(2字節,調用時保存的當前PC值)彈出給PC,實現返回。RETI指令除了具有RET指令的功能實現程序返回外,還有對中斷優先級狀態觸發器的清零。9/26/202455§3.7位操作指令(17條)BooleanOperationsMCS-51單片機的硬件結構中,有一個位處理器(又稱布爾處理器),它有一套位變量處理的指令集,包括位變量傳送、邏輯運算、控制程序轉移等。在MCS-51中,有一部份RAM和一部份SFR是具有位尋址功能的。位操作區:內部RAM的20H-2FH這16個字節單元,即128個位單元(位地址空間位00~7FH);可以位尋址的特殊功能寄存器:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國網店裝修項目創業計劃書
- 中國紅薯種植項目創業計劃書
- 中國家庭理療設備項目創業計劃書
- 中國可信計算機項目創業計劃書
- 湖南飼料項目創業計劃書
- 安全教育測試題及答案
- 樂高面試題及答案
- 2025版權轉讓合同(稿酬版)
- 2025【合同范本】貸款擔保合同范本與訂立條件
- 2025企業租賃車輛合同模板
- 重慶市九龍坡區2023-2024學年九年級上學期期末質量監測化學試題(含答案解析)
- 演示文稿2(演示文稿)
- YMO青少年數學思維28屆二年級全國總決賽試卷
- 浙江省高等學校畢業生登記表
- 灌注樁后注漿施工記錄
- 論我國跨境賭破違法犯罪的危害及對策
- 喜之郎品牌策略
- 2023年智慧廣電網絡應用解決方案
- 新改版教科版三年級下冊科學全冊精編實驗總結(超全)
- 格力2匹柜機檢測報告KFR-50LW(50530)FNhAk-B1(性能)
- 工程質量保證措施
評論
0/150
提交評論