第三章 8051單晶片程式指令
8051單晶片程式指令依其功能,可分為以下5類:
1. 算術指令
2. 邏輯指令
3. 資料轉移指令
4. 布林(Boolean)運算指令
5. 程式跳躍指令
以下就上列指令;分別說明每個指令動作、佔用的位元數及執行時間週期:
指令符號定義
|
符號 |
說明 |
|
Rn |
所選擇暫存器庫中之R0~R7,n=0~7。 |
|
direct |
直接定址位址。 |
|
@Ri |
間接定址位址,i=0或1。 |
|
#data |
8位元資料常數。 |
|
#data16 |
16位元資料常數。 |
|
addr11 |
11位元位址常數,使用於ACALL及AJMP指令。 |
|
addr16 |
16位元位址常數,使用於LCALL及LJMP指令。 |
|
rel |
8位元偏移位址常數,使用於SJMP及相對跳躍指令中。 |
|
bit |
位元定址位址。 |
|
← |
以右方資料取代左方資料。 |
|
(X) |
將X內容取出。 |
|
((X)) |
以X內容為位址,以間接定址方式取出資料。 |
|
rrr |
n之2進制值。如n=6,rrr=110。 |
符號定義
算數運算指令
|
指令 |
說明 |
位元組 |
機械週期 |
|
ADD A,Rn |
將暫存器內容加入A累加器 |
1 |
1 |
|
ADD A,direct |
將直接位址內容加入A累加器 |
2 |
1 |
|
ADD A,@Ri |
將間接位址內容加入A累加器 |
1 |
1 |
|
ADD A,#data |
將8位元常數資料加入A累加器 |
2 |
1 |
|
ADDC A,Rn |
將暫存器與進位CF加入A累加器 |
1 |
1 |
|
ADDC A,direct |
直接位址內容與進位CF加入累加器 |
2 |
1 |
|
ADDC A,@Ri |
間接位址內容與進位CF加入累加器 |
1 |
1 |
|
ADDC A,#data |
將8位元常數資料與進位加入累加器 |
2 |
1 |
|
SUBB A,Rn |
A累加器內容減暫存器與借位CF |
1 |
1 |
|
SUBB A,direct |
A累加器內容減直接位址內容與借位 |
2 |
1 |
|
SUBB A,@Ri |
A累加器內容減間接位址內容與借位 |
1 |
1 |
|
SUBB A,#data |
累加器內容減8位元常數資料與借位 |
2 |
1 |
|
INC A |
A累加器內容加1 |
1 |
1 |
|
INC Rn |
暫存器內容加1 |
1 |
1 |
|
INC direct |
直接位址內容加1 |
2 |
1 |
|
INC @Ri |
間接位址內容加1 |
1 |
1 |
|
INC DPTR |
資料指標DPTR內容加1 |
1 |
2 |
|
DEC A |
A累加器內容減1 |
1 |
1 |
|
DEC Rn |
暫存器內容減1 |
1 |
1 |
|
DEC direct |
直接位址內容減1 |
2 |
1 |
|
DEC @Ri |
間接位址內容減1 |
1 |
1 |
|
MUL AB |
A累加器乘以暫存器B,相乘結果之高8位元存入B,低8位元存入A |
1 |
4 |
|
DIV AB |
A累加器除以暫存器B,相除結果之商存入A,餘數存入B |
1 |
4 |
|
DA A |
A累加器內容調整成10進制BCD數 |
1 |
1 |
算數運算指令
邏輯運算指令
|
指令 |
說明 |
位元組 |
機械週期 |
|
ANL A,Rn |
暫存器AND至A累加器內 |
1 |
1 |
|
ANL A,direct |
直接位址內容AND至A累加器內 |
2 |
1 |
|
ANL A,@Ri |
間接位址內容AND至A累加器內 |
1 |
1 |
|
ANL A,#data |
8位元資料AND至A累加器內 |
2 |
1 |
|
ANL direct,A |
A累加器內容AND至直接位址內 |
2 |
1 |
|
ANL direct,#data |
8位元資料AND至直接位址內 |
3 |
2 |
|
ORL A,Rn |
暫存器OR至A累加器內 |
1 |
1 |
|
ORL A,direct |
直接位址內容OR至A累加器內 |
2 |
1 |
|
ORL A,@Ri |
間接位址內容OR至A累加器內 |
1 |
1 |
|
ORL A,#data |
8位元資料OR至A累加器內 |
2 |
1 |
|
ORL direct,A |
A累加器內容OR至直接位址內 |
2 |
1 |
|
ORL direct,#data |
8位元資料OR至直接位址內 |
3 |
2 |
|
XRL A,Rn |
暫存器XOR至A累加器內 |
1 |
1 |
|
XRL A,direct |
直接位址內容XOR至A累加器內 |
2 |
1 |
|
XRL A,@Ri |
間接位址內容XOR至A累加器內 |
1 |
1 |
|
XRL A,#data |
8位元資料XOR至A累加器內 |
2 |
1 |
|
XRL direct,A |
A累加器內容XOR至直接位址內 |
2 |
1 |
|
XRL direct,#data |
8位元資料XOR至直接位址內 |
3 |
2 |
|
CLR A |
清除A累加器 |
1 |
1 |
|
CPL A |
A累加器內容取補數 |
1 |
1 |
|
RL A |
A累加器內容向左旋轉1位元 |
1 |
1 |
|
RLC A |
A累加器與進位CF一起左旋1位元 |
1 |
1 |
|
RR A |
A累加器內容向右旋轉1位元 |
1 |
1 |
|
RRC A |
A累加器與進位CF一起右旋1位元 |
1 |
1 |
|
SWAP A |
A累加器的高低4位元互相交換 |
1 |
1 |
邏輯運算指令
資料轉移指令
|
指令 |
說明 |
位元組 |
機械週期 |
|
MOV A,Rn |
將暫存器內容移入A累加器 |
1 |
1 |
|
MOV A,direct |
將直接位址內容移入A累加器 |
2 |
1 |
|
MOV A,@Ri |
暫存器間接位址內容移入A累加器 |
1 |
1 |
|
MOV A,#data |
將8位元常數資料移入A累加器 |
2 |
1 |
|
MOV Rn,A |
將A累加器內容移入暫存器 |
1 |
1 |
|
MOV Rn,direct |
將直接位址內容移入暫存器 |
2 |
2 |
|
MOV Rn,#data |
將8位元常數資料移入暫存器 |
2 |