單片機系統指令

MOV MOV MOV

mcs-51單微機處理指令

MCS-51共111條指令,
指令分類
1、按指令所占的位元組來分:
(1)單位元組指令(49條) 如MOV A,R2,(機器碼11101010)
(2)雙位元組指令(46條) 如MOV A,#0BH,(機器碼74H,
0BH)
(3)三位元組指令(16條) 如MOV 0BH, #0BH ,(機器碼75H,
0BH,0BH)
2、按指令的執行時間來分:(1個機器周期為12個時鐘周期)
(1) 1個機器周期(64條) ,如MOV A,R2 MOV A,#0BH,
(2) 2個機器周期(45條) ,如MOV 0BH, #0BH
(3) 4個機器周期(2條) ,乘、除指令。
指令格式
一、按操作碼和運算元分
1、操作碼:用來規定指令進行什麼操作
如MOV A,#0BH,(機器碼74H,0BH)
其中74H為操作碼,指明“將立即數送入ACC”這種操作;
2、運算元:則是指令操作的對象,有可能是數據,也可能是地址
如MOV A,#0BH,其中#0BH為運算元。
有單位元組指令、雙位元組指令、三位元組不同長度的指令,格式不同: (1)單位元組指令:操作碼、運算元同在一個位元組中。
(2)雙位元組指令:操作碼+運算元。
(3)三位元組指令:操作碼+運算元+運算元。
二、按助記符和運算元分
操作助記符[目的運算元,源運算元]
如MOV A,#0BH,(機器碼74H,0BH),其中:
(1)MOV為操作助記符, 指明“內部數據傳送”這種操作;
(2)A為目的運算元,指明“數據傳送的目的暫存器”是A;
(3) #0BH為源運算元。

指令系統的定址方式

訪問指令
一、運算元在暫存器中;
如MOV A,Rn ;(Rn)→A,n=0~7
1、4組工作暫存區,共32個工作暫存器。
2、部分特殊功能暫存器,例如A、B 及dptr等。
二、訪問片外數據存儲器
(1)用R0或R1作為間址暫存器,定址範圍為片外低256個位元組;
(2)用DPTR作為間址暫存器,定址範圍為片外64K。
a) MOVX A,@Ri ;i=0或1
若(Ri)=70H,把外部RAM中70H單元的內容送到A
b) MOVX A,@DPTR
若(DPTR)=2000H,把外部RAM中2000H單元的內容送到A
3、堆疊操作指令訪問堆疊區
堆疊專用操作指令PUSH(壓棧)和POP(出棧)使用堆疊
指針(SP)作間址暫存器
指令PUSH(壓棧)和POP(出棧),無前綴標誌“@”
四、立即(數)定址方式
運算元在指令中直接給出,需在運算元前面加前綴標誌“#”。
如MOV A,#40H,此時立即數在程式存儲單元中。
五、基址暫存器加變址暫存器間址定址方式
1、以DPTR或PC作基址暫存器,以累加器A作為變址暫存器;
2、基址暫存器+變址暫存器形成運算元地址;
3、本定址方式專門針對程式存儲器,定址範圍可達到64KB。
4、本定址方式的指令只有3條:
MOVC A,@A+DPTR
MOVC A,@A+PC
JMP @A+DPTR
前2條又稱查表指令,將程式存儲器單元內容給ACC;
後1條為散轉指令,屬於轉移類指令。
(注)
(1)本定址方式是專門針對程式存儲器的定址方式,定址範圍可達到64KB。
(2)本定址方式的指令只有3條:
MOVC A,@A+DPTR
MOVC A,@A+PC
JMP @A+DPTR
六、位定址方式
89C51有位處理功能,可以對數據位進行操作,
如MOV C,40H是把位40H的值送到進位位C。
定址範圍:
1、內部RAM中的位定址區(20H—2FH),有2種表示方法。
(1) 直接給出位地址,如MOV C,40H;
(2) 單元地址加位數,如MOV C,(28H).0,指的是28H單元中的最低位。
2、SFR中的可定址位(70H—FFH,共83位),有4種表示方法。
(1) 直接給出位地址,如MOV C,0D5H(PSW.5的位地址);
(2) 直接寫位名稱,如MOV C,F0;
(3) 單元地址加位數,如MOV C, (0D0H).5;
(4) SFR符號加位數,如MOV C, PSW.5。
七、相對定址方式
在相對定址的轉移指令中,給出了地址偏移量“rel”,即
把PC的當前值+ rel 就構成了程式轉移的目的地址。即
目的地址=轉移指令所在的地址+ 轉移指令的位元組數+ rel
偏移量rel是帶符號的8位二進制補碼數,範圍是:–128 ~ +127 ;
注意:PC的當前值是緊接在轉移指令後的下一條指令的PC值。

指令系統分類介紹

指令中符號意義:
DPTR數據指針,可用作16位的數據地址暫存器。
bit內部RAM或特殊功能暫存器中的直接定址位。
C(或Cy)進位標誌位或位處理機中的累加器。
addr11 11位目的地址
addr16 16位目的地址
@ 間接定址暫存器前綴,如@Ri,@A+DPTR
(X)X中的內容。
((X))由X定址的單元中的內容。
→箭頭右邊的內容被箭頭左邊的內容所取代。
Rn 當前暫存器區的8個工作暫存器R0~R7(n=0~7)。
Ri 當前暫存器區中可作間接定址暫存器的2個暫存器R0、R1
(i=0,1)。
Direct直接地址,即8位的內部RAM或特殊功能暫存器的位元組
地址。
#data 包含在指令中的8位立即數。
#data16 包含在指令中的16位立即數。
rel相對轉移指令中的偏移量,為8位的帶符號補碼數。

數據傳送類指令

格式:MOV或MOVX或MOVC <目的運算元>,<源運算元>
將源運算元複製給目的運算元,源運算元不變,而不是“
搬家”。數據傳送類指令不影響標誌位Cy、Ac和OV,影響奇偶標誌位P。
一、以累加器為目的運算元的指令
MOV A, Rn ; (Rn)→A,n=0~7
MOV A, @Ri ; ((Ri))→A,i=0,1
MOV A, direct ;(direct)→A
MOV A, #data ; #data→A
二、以Rn為目的運算元的指令
MOV Rn, A ; (A)→Rn, n=0~7
MOV Rn, direct ;(direct)→Rn, n=0~7
MOV Rn, #data ; #data→Rn, n=0~7
三、以直接地址direct為目的運算元的指令
MOV direct, A ; (A)→direct
MOV direct, Rn ;(Rn)→direct, n=0~7
MOV direct1, direct2;
MOV direct, @Ri ;((Ri))→direct
MOV direct, #data ; #data→direct
注意:暫存器之間不可相互傳送數據;
直接地址之間可相互傳送數據。
直接定址方式(直接給出運算元的單元地址)
定址範圍:
1、內部RAM的128個單元(00-7FH)
2、特殊功能暫存器(80-FFH) ,注意SFR區單元除了以單元地址的形式外,還可用暫存器符號的形式給出,如:
MOV A,80H 與 MOV A,P0是等價的。
直接定址方式是訪問特殊功能暫存器的唯一定址方式
四、以暫存器間接地址為目的運算元的指令
MOV @Ri, A ;(A)→((Ri)),i=0,1
MOV @Ri, direct ;(direct)→((Ri))
MOV @Ri, #data ; #data→((Ri))
五、16位數傳送指令
MOV DPTR, #data16 ; #data16→DPTR
唯一的16位數據的傳送指令,
立即數的高8位送入DPH
立即數的低8位送入DPL
六、堆疊操作指令
內部RAM中可以設定一個後進先出(LIFO-Last In First Out)的區域稱作堆疊,堆疊指針SP始終指向堆疊的
棧頂位置。
1、進棧指令 PUSH direct
先將棧指針SP加1,然後把direct中的內容送到SP指示的內部RAM單元中
2、出棧指令 POP direct
SP指示的棧頂(內部RAM單元)內容送入direct位元組單元
中,棧指針SP減1
七、累加器A與外部數據存儲器傳送指令
MOVX A, @DPTR ;((DPTR))→A,讀外部RAM/IO
MOVX A, @Ri ;((Ri))→A,讀外部RAM/IO
MOVX@DPTR, A ;(A)→((DPTR)),寫外部RAM/IO
MOVX@Ri, A ;(A)→((Ri)),寫外部RAM/IO
功能:A與外部RAM存儲器傳送數據,RD*(P3.7)或WR*(P3.6)信號有效。
1、採用DPTR間接定址時,高8位地址(DPH)由P2口輸出,低8位地址(DPL)由P0口輸出。
2、採用Ri(i=0,1)間接定址時,可定址片外256個單元的數據存儲器。Ri內容(地址)由P0口輸出。
3、數據均由P0口輸出。
八、查表指令
用於讀程式存儲器(內外)中的表格數據的指令,僅兩條
,均採用基址暫存器加變址暫存器間接定址方式。
1、MOVC A,@A+PC
(1) 以PC作為基址暫存器,A為變址暫存器;
(2) 兩暫存器的內容相加,得到一個16位的地址;
(3) 取出此地址中的數據,傳送給ACC。
注意:PC中的內容為下一條指令的起始地址,PSEN信號有效(作用同RD*、WR*)。
2、MOVC A,@A+DPTR
(1) 以DPTR 作為基址暫存器,A為變址暫存器;
(2) 兩暫存器的內容相加,得到一個16位的地址;
(3) 取出此地址中的數據,傳送給ACC。
如 (DPTR)=8100H (A)=40H 執行指令
MOVC A, @A+DPTR
執行結果將程式存儲器中8140H的內容送入A。
本指令的執行結果只和指針DPTR及累加器A的內容有關,
與該指令存放的地址及常數表格存放的地址無關,因此表格的
大小和位置可以在64K程式存儲器中任意安排,一個表格可以
為各個程式塊公用。

功能指令

一、位元組交換指令
XCH A, Rn
若(A)=80H,(R7)=08H,執行後(A)=08H,(R7)=80H
XCH A, direct
若(A)=80H,(40H)=F0H,執行後(A)=F0H ,(40H)= 80H
XCH A, @Ri
若(A)=80H , (R0)=6AH, (6AH)=0FH ,
執行後(A)=0FH,(6AH)=80H
二、半位元組交換指令
XCHD A, @Ri 累加器的低4位與內部RAM低4位交換
三、累加器半位元組交換指令
SWAP A
將累加器A的高半位元組和低半位元組互換。
四、算術運算指令
加、減、乘、除指令,都是針對8位二進制無符號數。執行
的結果對Cy、Ac、OV等標誌位有影響,但增1和減1指令不影
響上述標誌。
1、加法指令,目的運算元均為ACC。
ADD A, Rn ;(A)+(Rn)→A,n=0~7
ADD A, direct ;(A)+(direct)→A
ADD A, @Ri ;(A)+((Ri))→A,i=0,1
ADD A, #data ;(A)+#data→A
注意運算結果對各個標誌位的影響:
(1)、如果位7有進位,則進位標誌Cy置“1”,否則清0;
(2)、如果位3有進位,則輔助進位標誌Ac置“1”,否則清0;
(3)、溢出標誌位OV:
如果位6有進位,而位7沒有進位;或者位7有進位,而位6 沒有,則溢出標誌位OV置“1”,否則清0。
OV狀態,只有在帶符號數加法運算時才有意義。
當兩個帶符號數相加時,OV=1,表示加法運算超出了累加器A所能表示的帶符號數的有效範圍。
2、帶進位加法指令
標誌位Cy參加運算,因此是三個數相加。共4條:
ADDC A, Rn ;(A)+(Rn)+C→A,n=0~7 ADDC A, direct ;(A)+(direct)+C→A
ADDC A, @Ri ;(A)+(Ri)+C→A,i=0,1
ADDC A, #data ;(A)+#data+C→A
3、增1(加1)指令(C語言的++ )
INC A
INC Rn ;n=0~7
INC direct
INC @Ri ;i=0,1
INC DPTR (除立即數以外)
(1)、不影響PSW中的任何標誌(除了INC A 外)。
(2)、INC DPTR
該指令是16位數增1指令。指令首先對低8位指針DPL的內容執行加1的操作,當產生溢出時,就對DPH的內容進行加1操作,不影響標誌Cy的狀態。
4、DA A,十進制調整指令
用於對BCD碼加法運算結果的修正。
兩個BCD碼按二進制相加之後,必須經本指令的調整才能
得到正確的壓縮BCD碼的和數。
調整方法:十進制調整修正,即結果加6調整。具體為:
a) 累加器低4位大於9或輔助進位位Ac=1,則進行低4位加6修正;
b) 累加器高4位大於9或進位位Cy=1,則進行高4位加6修正;
c) 累加器高4位大於9, 低4位大於9, 則高4位和低4位分別加6修正;是否加6是通過執行指令 DA A 來自動實現的。
5、帶借位的減法指令(注意:減法只有帶借位的)
SUBB A, Rn ;(A)-(Rn)- Cy→A,n=0~7
SUBB A, direct ; (A)-(direct)- Cy→A
SUBB A, @Ri ;(A)-((Ri))- Cy→A, i=0,1
SUBB A, #data ;(A)-#data - Cy→A
A的內容減去源運算元和進位標誌Cy的值,結果存在A中。
1、如果位7需借位,則Cy置1,否則清0;
2、如果位3需借位,則Ac置1 ,否則清0;
3、如果位6需借位而位7不需要借位,或者位7需借位,位6
不需借位,則溢出標誌位OV置1,否則清0。
6、減1指令(C語言的--)
DEC A ;(A)-1→A
DEC Rn ;(Rn)-1→Rn,n=0~7
DEC direct ;(direct)-1→direct
DEC @Ri ;((Ri))-1→(Ri),i=0,1
1、減1指令不影響標誌位。
2、增1/加1指令有INC DPTR,減1無DEC DPTR指令。
7、乘法指令
MUL AB ;A×B→BA
1、積的高位元組在B中,低位元組在A中;
2、如果積大於255,則置“1”溢出標誌位OV
8、除法指令
DIV AB ;A/B→A(商),餘數→B
如果B的內容為“0”(即除數為“0”),則存放結果的A、B中的內容不定,並置“1”溢出標誌位OV。
五、左環移指令RL A
累加器A的內容向左環移一位,Acc.7移入Acc.0 ,不影響標誌。
六、帶進位左環移指令RLC A
累加器A的內容和進位標誌位Cy一起向左環移一位,Acc.7移入進位位Cy,Cy移入Acc.0,不影響其它標誌。
七、右環移指令RR A
累加器A的內容向右環移一位,Acc.0移入Acc.7,不影響標誌。
八、帶進位環移指令RRC A
累加器A的內容和進位標誌Cy一起向右環移一位,Acc.0移入Cy,Cy移入Acc.7。不影響其它標誌。
九、邏輯與指令
ANL A, Rn ; (A)∧(Rn)→A,n=0~7
ANL A, direct ; (A)∧(direct)→A
ANL A, #data ; (A)∧#data→A
ANL A, @Ri ; (A)∧((Ri))→A,i=0~1
ANL direct, A ; (direct)∧(A)→direct
ANL direct, #data ; (direct)∧#data→direct
十、邏輯或指令
ORL A, Rn ;(A) ∨(Rn)→A ,n=0~7
ORL A, direct ;(A) ∨(direct)→A
ORL A, #data ;(A) ∨data→A
ORL A, @Ri ;(A) ∨((Ri))→A,i=0,1
ORL direct, A ;(direct) ∨(A)→direct
ORL direct, #data ;(direct) ∨#data→direct
十一、邏輯異或指令
XRL A, Rn ;(A) ♁(Rn)→A
XRL A, direct ;(A) ♁(direct)→A
XRL A, @Ri ;(A) ♁((Ri))→A ,i=0,1
XRL A, #data ;(A) ♁#data→A
XRL direct, A ;(direct) ♁(A)→direct
XRL direct, #data ;(direct) ♁#data →direct
與1相與取反,與0相與不變。

控制轉移指令

一、無條件轉移指令 AJMP addrll (2位元組指令)
2K(地址211)位元組範圍內的無條件跳轉指令。
64K程式存儲器空間分為32個區,每區2K位元組,轉移的目標地址必須與AJMP下一條指令的地址高5位地址碼A15-A11相同。
指令執行時,先PC加2,然後把addrll送入PC.10~PC.0,
PC.15~PC.11保持不變,程式轉移到目標地址。
注意:轉移目標首地址必須在AJMP指令下一條指令地址(PC+2)的2KB範圍內。
二、長跳轉指令 LJMP addr16 (3位元組指令)
64K位元組範圍內的無條件跳轉指令。
指令執行時,把指令的第二和第三位元組分別裝入PC的高位和低位位元組中,無條件地轉向addr16指出的目標地址。
目標地址可以在64K程式存儲器地址空間的任何位置。
注意:短跳轉、長跳轉指令中addrll、addr16直接寫上要轉向的目標地址標號(即符號地址)就可以。
三、相對轉移指令 SJMP rel (雙位元組)
rel為8位帶符號二進制補碼數(-128~+127),實現程式的雙向轉移。
在編寫程式時,直接寫上要轉向的目標地址標號就可以。
四、間接跳轉(散轉)指令JMP @A+DPTR (三位元組)
由A中8位無符號數與DPTR的16位數內容之和來確定。以DPTR內容作為基址,A的內容作變址。
五、條件轉移指令 (雙位元組)
JZ rel ; 如果累加器為“0”,則轉移
jnz rel; 如果累加器非“0”,則轉移
六、比較不相等轉移指令(3位元組指令)
CJNE A, direct, rel
CJNE A, #data, rel
CJNE Rn, #data, rel
CJNE @Ri, #data, rel
1、比較前面兩個運算元(無符號整數)的大小,如果不相等則
轉移,若相等則順序執行下一條指令。
2、如果第一運算元小於第二運算元, 則Cy標誌位置1, 否則清0。
如常把CJNE 第一運算元, 第二運算元, $+3
和JNC rel或JC rel 寫在一塊來判別2個數的大小。
$:本條指令在程式存儲單元的首地址;
$+3:CJNE指令的下一條指令,即JNC rel或JC rel
七、減1不為0轉移指令
djnz Rn, rel ;n=0~7
DJNZ direct, rel
將源運算元內容減1,結果回送到Rn暫存器或direct中去。如果源運算元內容不為0則轉移,為0則順序執行下一條指令。
主要用於控制程式循環。
1、把暫存器Rn或內部RAM的direct單元用作程式循環計數器
2、以減1後是否為“0”作為轉移條件,實現按次數控制循環
八、子程式調用、返回指令
1、短調用指令 ACALL addr11 (雙位元組)
2K範圍內的子程式調用。
2、長調用指令 LCALL addr16 (三位元組)
64K範圍內的子程式調用。
執行本指令時:
(1)斷點地址(調用指令的下一條指令的首地址PC+2或PC+3)
保護
(SP)+1→SP,然後PCL →(SP)
(SP)+1→SP,然後PCH →(SP)
(2)將子程式首地址送入PC,執行子程式
3、子程式返回指令 RET
斷點地址恢復
(SP) →PCH,(SP) - 1→SP
(SP) →PCL ,(SP) - 1→SP
功能:從堆疊中退出PC的高8位和低8位位元組,把棧指針減2,從PC值開始繼續執行程式。不影響標誌位。
4、中斷返回指令 RETI
RET指令相似,不同之處在於斷點地址恢復,清除中斷回響時被置“1”的51內部中斷優先權暫存器的優先權狀態。
子程式是編程時就已確定的固定位置調用,而中斷服務子程式是由中斷系統控制在特定條件下隨機調用的。
九、空操作指令 NOP,消耗1個機器周期的時間

位操作指令

一、數據位傳送指令
MOV C,bit
MOV bit,C
如MOV C,06H ;(20H).6→Cy
06H是內部RAM 20H位元組位6的位地址。
MOV P1.0,C ;Cy→P1.0
可定址位的具體定義:從20H單元的第一位開始一直到2FH單元的最後一位分別為00H~7FH以及特殊功能暫存器中80H~F7H。
二、位變數修改指令
CLR C ;清“0”Cy
CLR bit ;清“0”bit位
CPL C ;Cy求反
CPL bit ;bit位求反
SETB C ;置“1” Cy
SETB bit ;置“1”bit位
三、位變數邏輯與指令
ANL C,bit ;bit ∧Cy →Cy
ANL C,/bit; ;/ bit ∧Cy →Cy
四、位變數邏輯或指令
ORL C,bit ;bit ∨ Cy →Cy
ORL C,/bit ;/ bit ∨ Cy →Cy
五、條件轉移類指令
JC rel ;如果進位位Cy=1,則轉移
JNC rel ;如果進位位Cy=0,則轉移
JB bit,rel ;如果直接定址位=1,則轉移
JNB bit,rel ;如果直接定址位=0,則轉移
JBC bit,rel ;如果直接定址位=1,則轉移,並對bit位清0

熱門詞條

聯絡我們