51单片机指令表
助记符
指令说明
字节数
周期数
(数据传递类指令)
MOV
A,Rn
寄存器传送到累加器
MOV
A,direct
直接地址传送到累加器
MOV
A,@Ri
累加器传送到外部 RAM(8 地址 )
MOV
A,#data
立即数传送到累加器
MOV
Rn, A
累加器传送到寄存器
MOV
Rn, direct
直接地址传送到寄存器
MOV
Rn, #data
累加器传送到直接地址
MOV
direct , Rn
寄存器传送到直接地址
MOV
direct , direct 直接地址传送到直接地址
MOV
direct , A
累加器传送到直接地址
MOV
direct , @Ri
间接 RAM 传送到直接地址
MOV
direct , #data 立即数传送到直接地址
MOV @Ri, A
直接地址传送到直接地址
MOV @Ri, direct
直接地址传送到间接 RAM
MOV @Ri, #data
立即数传送到间接 RAM
MOV
DPTR, #data16
16 位常数加载到数据指针
MOVC A,@A+DPTR
代码字节传送到累加器
MOVC A,@A+PC
代码字节传送到累加器
MOVX A,@Ri
外部 RAM(8 地址 ) 传送到累加器
MOVX A,@DPTR
外部 RAM(16 地址 ) 传送到累加器
MOVX @Ri, A
累加器传送到外部 RAM(8 地址 )
MOVX @DPTR, A
累加器传送到外部 RAM(16 地址 )
PUSH
direct
直接地址压入堆栈
POP
direct
直接地址弹出堆栈
1
2
1
2
1
2
2
2
3
2
2
3
1
2
2
3
1
1
1
1
1
1
2
2
1
1
1
1
1
2
1
1
2
1
2
2
2
1
2
1
2
2
2
2
2
2
2
2
XCH
A,Rn
寄存器和累加器交换
XCH
A, direct
直接地址和累加器交换
XCH
A, @Ri
间接 RAM 和累加器交换
XCHD
A, @Ri
间接 RAM 和累加器交换低 4 位字节
( 算术运算类指令 )
INC
A
INC
Rn
累加器加 1
寄存器加 1
INC
direct
直接地址加 1
INC
@Ri
间接 RAM 加 1
INC
DPTR
数据指针加 1
DEC
A
DEC
Rn
累加器减 1
寄存器减 1
DEC
direct
直接地址减 1
DEC
@Ri
间接 RAM 减 1
MUL
AB
累加器和 B 寄存器相乘
DIV
AB
累加器除以 B 寄存器
DA
A
累加器十进制调整
ADD
A,Rn
寄存器与累加器求和
ADD
A,direct
直接地址与累加器求和
ADD
A,@Ri
间接 RAM 与累加器求和
ADD
A,#data
立即数与累加器求和
ADDC
A,Rn
寄存器与累加器求和 ( 带进位 )
ADDC
A,direct
直接地址与累加器求和 ( 带进位 )
ADDC
A,@Ri
间接 RAM 与累加器求和 ( 带进位 )
ADDC
A,#data
立即数与累加器求和 ( 带进位 )
SUBB
A,Rn
累加器减去寄存器 ( 带借位 )
SUBB
A,direct
累加器减去直接地址 ( 带借位 )
SUBB
A,@Ri
累加器减去间接 RAM(带借位 )
SUBB
A,#data
累加器减去立即数 ( 带借位 )
1
2
1
1
1
1
2
1
1
1
1
2
1
1
1
1
1
2
1
2
1
2
1
2
1
2
1
2
1
1
1
1
1
1
1
1
2
1
1
2
1
4
4
1
1
1
1
1
1
1
1
1
1
1
1
1
( 逻辑运算类指令 )
ANL
A,Rn
寄存器“与”到累加器
ANL
A,direct
直接地址“与”到累加器
ANL
A,@Ri
间接 RAM“与”到累加器
ANL
A,#data
立即数“与”到累加器
ANL
direct,A
累加器“与”到直接地址
ANL
direct, #data
立即数“与”到直接地址
ORL
A,Rn
寄存器“或”到累加器
ORL
A,direct
直接地址“或”到累加器
ORL
A,@Ri
间接 RAM“或”到累加器
ORL
A,#data
立即数“或”到累加器
ORL
direct,A
累加器“或”到直接地址
ORL
direct, #data
立即数“或”到直接地址
XRL
A,Rn
寄存器“异或”到累加器
XRL
A,direct
直接地址“异或”到累加器
XRL
A,@Ri
间接 RAM“异或”到累加器
XRL
A,#data
立即数“异或”到累加器
XRL
direct,A
累加器“异或”到直接地址
XRL
direct, #data
立即数“异或”到直接地址
CLR
CPL
RL
RLC
RR
RRC
SWAP
A
A
A
A
A
A
A
累加器清零
累加器求反
累加器循环左移
带进位累加器循环左移
累加器循环右移
带进位累加器循环右移
累加器高、低 4 位交换
( 控制转移类指令 )
JMP
@A+DPTR
相对 DPTR 的无条件间接转移
JZ
rel
累加器为 0 则转移
1
2
1
2
2
3
1
2
1
2
2
3
1
2
1
2
2
3
1
1
1
1
1
1
1
1
2
1
1
1
1
1
2
2
1
1
1
1
1
2
1
1
1
1
1
2
1
1
1
1
1
1
2
2
JNZ
rel
累加器为 1 则转移
CJNE
A,direct,rel
比较直接地址和累加器 , 不相等转移
CJNE
A,#data,rel
比较立即数和累加器 , 不相等转移
CJNE
Rn,#data,rel
比较寄存器和立即数 , 不相等转移
CJNE
@Ri,#data,rel
比较立即数和间接 RAM,不相等转移
DJNZ
Rn,rel
寄存器减 1, 不为 0 则转移
DJNZ
direct,rel
直接地址减 1, 不为 0 则转移
NOP
空操作 , 用于短暂延时
ACALL
add11
绝对调用子程序
LCALL
add16
长调用子程序
RET
RETI
从子程序返回
从中断服务子程序返回
AJMP
add11
无条件绝对转移
LJMP
add16
无条件长转移
SJMP
rel
无条件相对转移
( 布尔指令 )
CLR
CLR
C
bit
SETB
C
SETB
bit
CPL
CPL
C
bit
清进位位
清直接寻址位
置位进位位
置位直接寻址位
取反进位位
取反直接寻址位
ANL
C,bit
直接寻址位“与”到进位位
ANL
C,/bit
直接寻址位的反码“与”到进位位
ORL
C,bit
直接寻址位“或”到进位位
ORL
C,/bit
直接寻址位的反码“或”到进位位
MOV
C,bit
直接寻址位传送到进位位
MOV
bit, C
进位位位传送到直接寻址
JC
rel
如果进位位为 1 则转移
2
3
3
2
3
3
3
1
2
3
1
1
2
3
2
1
2
1
2
1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
1
2
2
2
2
2
2
2
1
1
1
1
1
1
2
2
2
2
1
2
2
JNC
rel
如果进位位为 0 则转移
JB
bit , rel
如果直接寻址位为 1 则转移
JNB
bit , rel
如果直接寻址位为 0 则转移
JBC
bit , rel
直接寻址位为 1 则转移并清除该位
2
3
3
2
2
2
2
2
ORG
DB
DW
EQU
DATA
XDATA
BIT
END
Rn
Ri
@Ri
#data8
#data16
addr16
addr11
Rel
Bit
Direct
$
(伪指令)
指明程序的开始位置
定义数据表
定义 16 位的地址表
给一个表达式或一个字符串起名
给一个 8 位的内部 RAM 起名
给一个 8 位的外部 RAM 起名
给一个可位寻址的位单元起名
指出源程序到此为止
(指令中的符号标识)
工作寄存器 R0-R7
工作寄存器 R0 和 R1
间接寻址的 8 位 RAM 单元地址( 00H-FFH)
8 位常数
16 位常数
16 位目标地址,能转移或调用到 64KROM 的任何地方
11 位目标地址,在下条指令的 2K 范围内转移或调用
8 位偏移量,用于 SJMP 和所有条件转移指令,范围 -128 ~ +127
片内 RAM 中的可寻址位和 SFR 的可寻址位
直接地址,范围片内 RAM 单元( 00H-7FH)和 80H-FFH
指本条指令的起始位置