51單片機(jī)指令表 —— 30 附錄 51單片機(jī)指令表大全
此表主要是為了方便大家查閱每條指令的作用,寫法以及字節(jié)數(shù)和周期數(shù),建議大家保存為書簽。
助記符 | 指令說明 | 字節(jié)數(shù) | 周期數(shù) | |
(數(shù)據(jù)傳遞類指令) | ||||
MOV | A,Rn | 寄存器傳送到累加器 | 1 | 1 |
MOV | A,direct | 直接地址傳送到累加器 | 2 | 1 |
MOV | A,@Ri | 累加器傳送到外部RAM(8 地址) | 1 | 1 |
MOV | A,#data | 立即數(shù)傳送到累加器 | 2 | 1 |
MOV | Rn,A | 累加器傳送到寄存器 | 1 | 1 |
MOV | Rn,direct | 直接地址傳送到寄存器 | 2 | 2 |
MOV | Rn,#data | 累加器傳送到直接地址 | 2 | 1 |
MOV | direct,Rn | 寄存器傳送到直接地址 | 2 | 1 |
MOV | direct,direct | 直接地址傳送到直接地址 | 3 | 2 |
MOV | direct,A | 累加器傳送到直接地址 | 2 | 1 |
MOV | direct,@Ri | 間接RAM 傳送到直接地址 | 2 | 2 |
MOV | direct,#data | 立即數(shù)傳送到直接地址 | 3 | 2 |
MOV | @Ri,A | 直接地址傳送到直接地址 | 1 | 2 |
MOV | @Ri,direct | 直接地址傳送到間接RAM | 2 | 1 |
MOV | @Ri,#data | 立即數(shù)傳送到間接RAM | 2 | 2 |
MOV | DPTR,#data16 | 16 位常數(shù)加載到數(shù)據(jù)指針 | 3 | 1 |
MOVC | A,@A+DPTR | 代碼字節(jié)傳送到累加器 | 1 | 2 |
MOVC | A,@A+PC | 代碼字節(jié)傳送到累加器 | 1 | 2 |
MOVX | A,@Ri | 外部RAM(8 地址)傳送到累加器 | 1 | 2 |
MOVX | A,@DPTR | 外部RAM(16 地址)傳送到累加器 | 1 | 2 |
MOVX | @Ri,A | 累加器傳送到外部RAM(8 地址) | 1 | 2 |
MOVX | @DPTR,A | 累加器傳送到外部RAM(16 地址) | 1 | 2 |
PUSH | direct | 直接地址壓入堆棧 | 2 | 2 |
POP | direct | 直接地址彈出堆棧 | 2 | 2 |
XCH | A,Rn | 寄存器和累加器交換 | 1 | 1 |
XCH | A, direct | 直接地址和累加器交換 | 2 | 1 |
XCH | A, @Ri | 間接RAM 和累加器交換 | 1 | 1 |
XCHD | A, @Ri | 間接RAM 和累加器交換低4 位字節(jié) | 1 | 1 |
(算術(shù)運(yùn)算類指令) | ||||
INC | A | 累加器加1 | 1 | 1 |
INC | Rn | 寄存器加1 | 1 | 1 |
INC | direct | 直接地址加1 | 2 | 1 |
INC | @Ri | 間接RAM 加1 | 1 | 1 |
INC | DPTR | 數(shù)據(jù)指針加1 | 1 | 2 |
DEC | A | 累加器減1 | 1 | 1 |
DEC | Rn | 寄存器減1 | 1 | 1 |
DEC | direct | 直接地址減1 | 2 | 2 |
DEC | @Ri | 間接RAM 減1 | 1 | 1 |
MUL | AB | 累加器和B 寄存器相乘 | 1 | 4 |
DIV | AB | 累加器除以B 寄存器 | 1 | 4 |
DA | A | 累加器十進(jìn)制調(diào)整 | 1 | 1 |
ADD | A,Rn | 寄存器與累加器求和 | 1 | 1 |
ADD | A,direct | 直接地址與累加器求和 | 2 | 1 |
ADD | A,@Ri | 間接RAM 與累加器求和 | 1 | 1 |
ADD | A,#data | 立即數(shù)與累加器求和 | 2 | 1 |
ADDC | A,Rn | 寄存器與累加器求和(帶進(jìn)位) | 1 | 1 |
ADDC | A,direct | 直接地址與累加器求和(帶進(jìn)位) | 2 | 1 |
ADDC | A,@Ri | 間接RAM 與累加器求和(帶進(jìn)位) | 1 | 1 |
ADDC | A,#data | 立即數(shù)與累加器求和(帶進(jìn)位) | 2 | 1 |
SUBB | A,Rn | 累加器減去寄存器(帶借位) | 1 | 1 |
SUBB | A,direct | 累加器減去直接地址(帶借位) | 2 | 1 |
SUBB | A,@Ri | 累加器減去間接RAM(帶借位) | 1 | 1 |
SUBB | A,#data | 累加器減去立即數(shù)(帶借位) | 2 | 1 |
(邏輯運(yùn)算類指令) | ||||
ANL | A,Rn | 寄存器“與”到累加器 | 1 | 1 |
ANL | A,direct | 直接地址“與”到累加器 | 2 | 1 |
ANL | A,@Ri | 間接RAM“與”到累加器 | 1 | 1 |
ANL | A,#data | 立即數(shù)“與”到累加器 | 2 | 1 |
ANL | direct,A | 累加器“與”到直接地址 | 2 | 1 |
ANL | direct, #data | 立即數(shù)“與”到直接地址 | 3 | 2 |
ORL | A,Rn | 寄存器“或”到累加器 | 1 | 2 |
ORL | A,direct | 直接地址“或”到累加器 | 2 | 1 |
ORL | A,@Ri | 間接RAM“或”到累加器 | 1 | 1 |
ORL | A,#data | 立即數(shù)“或”到累加器 | 2 | 1 |
ORL | direct,A | 累加器“或”到直接地址 | 2 | 1 |
ORL | direct, #data | 立即數(shù)“或”到直接地址 | 3 | 1 |
XRL | A,Rn | 寄存器“異或”到累加器 | 1 | 2 |
XRL | A,direct | 直接地址“異或”到累加器 | 2 | 1 |
XRL | A,@Ri | 間接RAM“異或”到累加器 | 1 | 1 |
XRL | A,#data | 立即數(shù)“異或”到累加器 | 2 | 1 |
XRL | direct,A | 累加器“異或”到直接地址 | 2 | 1 |
XRL | direct, #data | 立即數(shù)“異或”到直接地址 | 3 | 1 |
CLR | A | 累加器清零 | 1 | 2 |
CPL | A | 累加器求反 | 1 | 1 |
RL | A | 累加器循環(huán)左移 | 1 | 1 |
RLC | A | 帶進(jìn)位累加器循環(huán)左移 | 1 | 1 |
RR | A | 累加器循環(huán)右移 | 1 | 1 |
RRC | A | 帶進(jìn)位累加器循環(huán)右移 | 1 | 1 |
SWAP | A | 累加器高、低4 位交換 | 1 | 1 |
(控制轉(zhuǎn)移類指令) | ||||
JMP | @A+DPTR | 相對DPTR 的無條件間接轉(zhuǎn)移 | 1 | 2 |
JZ | rel | 累加器為0 則轉(zhuǎn)移 | 2 | 2 |
JNZ | rel | 累加器為1 則轉(zhuǎn)移 | 2 | 2 |
CJNE | A,direct,rel | 比較直接地址和累加器,不相等轉(zhuǎn)移 | 3 | 2 |
CJNE | A,#data,rel | 比較立即數(shù)和累加器,不相等轉(zhuǎn)移 | 3 | 2 |
CJNE | Rn,#data,rel | 比較寄存器和立即數(shù),不相等轉(zhuǎn)移 | 2 | 2 |
CJNE | @Ri,#data,rel | 比較立即數(shù)和間接RAM,不相等轉(zhuǎn)移 | 3 | 2 |
DJNZ | Rn,rel | 寄存器減1,不為0 則轉(zhuǎn)移 | 3 | 2 |
DJNZ | direct,rel | 直接地址減1,不為0 則轉(zhuǎn)移 | 3 | 2 |
NOP | 空操作,用于短暫延時(shí) | 1 | 1 | |
ACALL | add11 | 絕對調(diào)用子程序 | 2 | 2 |
LCALL | add16 | 長調(diào)用子程序 | 3 | 2 |
RET | 從子程序返回 | 1 | 2 | |
RETI | 從中斷服務(wù)子程序返回 | 1 | 2 | |
AJMP | add11 | 無條件絕對轉(zhuǎn)移 | 2 | 2 |
LJMP | add16 | 無條件長轉(zhuǎn)移 | 3 | 2 |
SJMP | rel | 無條件相對轉(zhuǎn)移 | 2 | 2 |
(布爾指令) | ||||
CLR | C | 清進(jìn)位位 | 1 | 1 |
CLR | bit | 清直接尋址位 | 2 | 1 |
SETB | C | 置位進(jìn)位位 | 1 | 1 |
SETB | bit | 置位直接尋址位 | 2 | 1 |
CPL | C | 取反進(jìn)位位 | 1 | 1 |
CPL | bit | 取反直接尋址位 | 2 | 1 |
ANL | C,bit | 直接尋址位“與”到進(jìn)位位 | 2 | 2 |
ANL | C,/bit | 直接尋址位的反碼“與”到進(jìn)位位 | 2 | 2 |
ORL | C,bit | 直接尋址位“或”到進(jìn)位位 | 2 | 2 |
ORL | C,/bit | 直接尋址位的反碼“或”到進(jìn)位位 | 2 | 2 |
MOV | C,bit | 直接尋址位傳送到進(jìn)位位 | 2 | 1 |
MOV | bit, C | 進(jìn)位位位傳送到直接尋址 | 2 | 2 |
JC | rel | 如果進(jìn)位位為1 則轉(zhuǎn)移 | 2 | 2 |
JNC | rel | 如果進(jìn)位位為0 則轉(zhuǎn)移 | 2 | 2 |
JB | bit,rel | 如果直接尋址位為1 則轉(zhuǎn)移 | 3 | 2 |
JNB | bit,rel | 如果直接尋址位為0 則轉(zhuǎn)移 | 3 | 2 |
JBC | bit,rel | 直接尋址位為1 則轉(zhuǎn)移并清除該位 | 2 | 2 |
(偽指令) | ||
ORG | 指明程序的開始位置 | |
DB | 定義數(shù)據(jù)表 | |
DW | 定義16 位的地址表 | |
EQU | 給一個(gè)表達(dá)式或一個(gè)字符串起名 |
DATA | 給一個(gè)8 位的內(nèi)部RAM 起名 | |
XDATA | 給一個(gè)8 位的外部RAM 起名 | |
BIT | 給一個(gè)可位尋址的位單元起名 | |
END | 指出源程序到此為止 |
(指令中的符號(hào)標(biāo)識(shí)) | |
Rn | 工作寄存器R0-R7 |
Ri | 工作寄存器R0 和R1 |
@Ri | 間接尋址的8 位RAM 單元地址(00H-FFH) |
#data8 | 8 位常數(shù) |
#data16 | 16 位常數(shù) |
addr16 | 16 位目標(biāo)地址,能轉(zhuǎn)移或調(diào)用到64KROM 的任何地方 |
addr11 | 11 位目標(biāo)地址,在下條指令的2K 范圍內(nèi)轉(zhuǎn)移或調(diào)用 |
Rel | 8 位偏移量,用于SJMP 和所有條件轉(zhuǎn)移指令,范圍-128~+127 |
Bit | 片內(nèi)RAM 中的可尋址位和SFR 的可尋址位 |
Direct | 直接地址,范圍片內(nèi)RAM 單元(00H-7FH)和80H-FFH |
$ | 指本條指令的起始位置 |
評(píng)論