8051 系列单片机汇编语言指令速查表
编号
指令名称
指令助记符
指令说明
一般传送
数据传送类指令
MOV A, #data
MOV direct, #data
Mov Rn, #data
Mov @Ri, #data
将立即数#data 送累加器 A
将立即数#data 送片内 RAM direct 地址单元内
将立即数#data 送寄存器 Rn
寄存器 Ri 内为 RAM 地址,将立即数#data 送该地址
单元内
Mov direct2, direct1
将 direct1 地址单元的数据送 direct2 地址单元内
Mov direct, rn
Mov Rn, direct
Mov direct, @Ri
Mov @Ri, direct
Mov A, Rn
Mov Rn, A
Mov A, direct
Mov direct, A
Mov A, @Ri
Mov @Ri , A
将 Rn 的数据送 direct 地址单元内
将 direct 地址单元内的数据送 Rn 寄存器
寄存器 Ri 内为 RAM 地址,将该地址单元内的数据送
direct 地址单元内
寄存器 Ri 内为 RAM 地址,将 direct 地址单元内的数
据送该地址单元内
将寄存器 Rn 内的数据送累加器 A
将累加器 A 内的数据送寄存器 Rn
将 direct 地址单元内的数据送累加器 A
将累加器 A 内的数据送 direct 地址单元内
寄存器 Ri 内为 RAM 地址,将该地址单元内的数据送
累加器 A
寄存器 Ri 内为 RAM 地址,将累加器 A 的数据送该
地址单元内
目的地址传送
Mov DPTR, #data16
将 16 位立即数送数据指针 DPTR 寄存器
字节交换
与外部 RAM 传送
SWAP A
XCH A, Rn
XCH A, direct
XCH A, @Ri
XCHD A, @Ri
MOVX @DPTR, A
MOVX A , @DPTR
MOVX A, @Ri
累加器 A 高低 4 位数据交换
将累加器 A 数据和寄存器 Rn 内的数据交换
将累加器 A 数据和 direct 地址单元内的数据交换
寄存器 Ri 内为 RAM 地址,将该地址单元内的数据与
累加器 A 的数据交换
寄存器 Ri 内为 RAM 地址,将该地址单元内的数据低
4 位与的低 4 位交换
将累加器 A 的数据送数据指针 DPTR 寄存器所指外
部 RAM 地址单元内
将 DPTR 寄存器所指外部 RAM 地址单元内的数据送
累加器 A
寄存器 Ri 内为片外 RAM 地址,将该地址单元内的数
据送累加器 A
MOVX @Ri, A
寄存器 Ri 内为片外 RAM 地址,将该地址单元内的数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
据送累加器 A
与 ROM 传送
栈操作
MOVC A, @A+DPTR
MOVC A, @A+PC
PUSH direct
A+DPTR 构成 ROM 地址,将该地址内的数据送累加
器 A 内
A+PC 构成 ROM 地址,将该地址内的数据送累加器
A 内
堆栈指针 SP 自加 1 后,将 direct 地址单元的数据压
进堆栈,
POP direct
堆栈的数据送 direct 地址单元中,后堆栈指针减 1,
算术运算指令
ADD A, Rn
ADD A, direct
ADD A, @Ri
ADD A, #data
ADDC A, Rn
ADDC A, direct
ADDC A, @Ri
ADDC A, #data
SUBB A, Rn
SUBB A, direct
SUBB A, @Ri
SUBB A, #data
INC A
INC Rn
INC direct
INC @Ri
INC DPTR
DEC A
DEC Rn
DEC direct
将寄存器 Rn 与累加器 A 的数据相加后,结果保存到累
加器 A
将 direct 地址单元内的数据与累加器 A 的数据相加后
结果保存到累加器 A
寄存器 Ri 内位地址,将该地址单元内的数据与累加
器 A 的数据相加后结果保存到累加器 A
将立即数与累加器 A 的数据相加后结果保存到累加
器 A
将寄存器 Rn 与累加器 A 的数据相加,再加上进位标
志内的值后,结果保存到累加器 A
将 direct 地址单元内的数据与累加器 A 的数据相加,
再加上进位标志内的值后,结果保存到累加器 A
寄存器 Ri 内为 RAM 地址,将该地址单元内的数据与
累加器 A 的数据相加,再加上进位标志内的值后,结
果保存到累加器 A
将立即数与累加器 A 的数据相加,再加上进位标志内
的值后结果保存到累加器 A
将与累加器 A 的数据减去寄存器 Rn 的数据,再减去
进位标志内的值,结果保存到累加器 A
将与累加器 A 的数据减去 direct 地址单元内的数据,
再减去进位标志内的值,结果保存到累加器 A
寄存器 Ri 内为 RAM 地址,将累加器 A 的数据减去
该地址单元内的数据,再减去进位标志内的值后,结
果保存到累加器 A
将累加器 A 的数据减去立即数,再减去进位标志内的
值后,结果保存到累加器 A
累加器 A 的值自加 1
寄存器 Rn 的值自加 1
direct 地址单元内值自加 1
寄存器 Ri 内为 RAM 地址,该地址单元内的值自加 1
数据指针寄存器 DPTR 内的值自加 1
累加器 A 的值自减 1
寄存器 Rn 的值自减 1
direct 地址单元内的值自减 1
加法指令
带进位加法
带借位减法
加 1 指令
减 1 指令
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
乘法
除法
二-十进制调整
逻辑与
逻辑或
逻辑异或
DEC @Ri
MUL AB
DIV AB
DA A
ANL A, Rn
ANL A, direct
ANL A, @Ri
ANL A, #data
ANL direct, A
ANL direct, #data
ORL A, Rn
ORL A, direct
ORL A, @Ri
ORL A, #data
ORL direct, A
ORL direct, #data
XRL A, Rn
XRL A, direct
XRL A, @Ri
XRL A, #data
XRL direct, A
寄存器 Ri 内为 RAM 地址,该地址单元内的值自减 1
累加器 A 与寄存器 B 内的值相乘,乘积的高 8 位保
存在 B 寄存器,低 8 位保存在累加器 A 中
累加器 A 的值除以寄存器 B 的值,商保存在累加器 A
中,余数保存在 B 寄存器
对累加器 A 的结果进行十进制调整
逻辑运算指令
将累加器 A 的值和寄存器 Rn 的值进行与操作,结果
保存到累加器 A 中
将累加器 A 的值和 direct 地址单元内的值进行与操
作,结果保存到累加器 A 中
寄存器 Ri 内为 RAM 地址,将累加器 A 的值和该地址
单元内的值进行与操作,结果保存到累加器 A 中
将累加器 A 的值和立即数进行与操作,结果保存到累
加器 A 中
将累加器 A 的值和 direct 地址单元内的值进行与操
作,结果保存到 direct 地址单元内
将立即数和 direct 地址单元内的值进行与操作,结果
保存到 direct 地址单元内
将累加器 A 的值和寄存器 Rn 的值进行或操作,结果
保存到累加器 A 中
将累加器 A 的值和 direct 地址单元内的值进行或操
作,结果保存到累加器 A 中
寄存器 Ri 内为 RAM 地址,将累加器 A 的值和该地址
单元内的值进行或操作,结果保存到累加器 A 中
将累加器 A 的值和立即数进行或操作,结果保存到累
加器 A 中
将累加器 A 的值和 direct 地址单元内的值进行或操
作,结果保存到 direct 地址单元内
将立即数和 direct 地址单元内的值进行或操作,结果
保存到 direct 地址单元内
将累加器 A 的值和寄存器 Rn 的值进行异或操作,结
果保存到累加器 A 中
将累加器 A 的值和 direct 地址单元内的值进行异或操
作,结果保存到累加器 A 中
寄存器 Ri 内为 RAM 地址,将累加器 A 的值和该地址
单元内的值进行异或操作,结果保存到累加器 A 中
将累加器 A 的值和立即数进行异或操作,结果保存到
累加器 A 中
将累加器 A 的值和 direct 地址单元内的值进行异或操
作,结果保存到 direct 地址单元内
将立即数和 direct 地址单元内的值进行异或操作,结
果保存到 direct 地址单元内
累加器 A 的值按位取反
XRL direct, #data
按位取反
CPL A
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
累加器清零
逻辑右移
逻辑左移
带进位右移
带进位左移
CLR A
RR A
RL A
RRC A
RLC A
SJMP rel
累加器 A 清 0
累加器 A 的值循环右移 1 位
累加器 A 的值循环左移 1 位
累加器 A 的值带进位循环右移 1 位
累加器 A 的值带进位循环左移 1 位
控制转移指令
rel 为地址偏移量,PC 加 2 后的地址加上 rel 作为目
标地址,程序跳到目标地址继续运行
addr11 为 11 位地址,PC 加 2 后的地址高 5 位与指令
中的低 11 位地址构成目标地址,程序跳到目标地址
AJMP addr11(a10- a0)
无条件转移
继续运行
LJMP addr16
JMP @A+DPTR
JZ rel
JNZ rel
CJNE A, direct, rel
CJNE A, #data, rel
CJNE Rn, #data, rel
CJNE @Ri, #data, rel
DJNZ Rn, rel
DJNZ direct, rel
JC rel
JNC rel
JB bit, rel
JNB bit, rel
JBC bit, rel
条件转移
循环转移
布尔条件转移
调用指令
ACALL addr11
LCALL addr16
返回指令
RET
将 addr16 的 16 位地址送程序计数器 PC,使机器执行
下一条指令时无条件转移到 addr16 处执行程序
目标地址的基地址放在 DPTR 中,目标地址对基地址
的偏移量放在累加器 A 中,它们相加构成目标地址
If(累加器 A=0)则 PC 加 2 再加上 rel 作为目标地址
If(累加器 A!=0)则 PC 加 2 再加上 rel 作为目标地
址
If(累加器 A!= direct 地址单元的值)则 PC 加 2 再加
上 rel 作为目标地址
If(累加器 A!= 立即数)则 PC 加 2 再加上 rel 作为
目标地址
If(寄存器 Rn 的值!= 立即数)则 PC 加 2 再加上 rel
作为目标地址
寄存器 Ri 内为 RAM 地址,If(该地址单元的值!= 立
即数)则 PC 加 2 再加上 rel 作为目标地址
寄存器 Rn 的值减 1 后,If(寄存器 Rn 的值!=0)则
PC 加 2 再加上 rel 作为目标地址
Direct 地址单元的值减 1 后,If(该值!=0)则 PC 加
3 再加上 rel 作为目标地址
If(CY=1)则 PC 加 2 再加上 rel 作为目标地址
If(CY=0)则 PC 加 2 再加上 rel 作为目标地址
If(bit 位=1)则 PC 加 3 再加上 rel 作为目标地址
If(bit 位=0)则 PC 加 3 再加上 rel 作为目标地址
If(bit 位=1)则 PC 加 3 再加上 rel 作为目标地址,
且 bit 位清 0
addr11 为 11 位地址,PC 加 2 后的地址 PUSH 进堆栈,
再将 PC 的地址高 5 位与指令中的低 11 位地址构成目
标地址,程序跳到目标地址继续运行
PC 加 3 后的地址 PUSH 进堆栈,再将 16 位地址送
PC 作为目标地址,程序跳到目标地址继续运行
子程序返回指令,把堆栈中的地址恢复到 PC 中使程
序回到调用处
98
99
100
101
102
103
104
105
106
107
108
109
110
111
说明:
空操作
布尔传送
位清 0
位清 0
位置 1
位与
位或
位取反
RETI
NOP
MOV C, bit
MOV bit, C
CLR C
CLR bit
SETB C
SETB bit
ANL C, bit
ANL C, /bit
ORL C, bit
ORL C, /bit
CPL C
CPL bit
中断程序返回指令,把堆栈中的地址恢复到 PC 中使
程序回到调用处
空操作
位操作指令
将 bit 位地址中的值送 PSW 中的进位标志位 CY
将 PSW 中的进位标志位 CY 的值送 bit 位地址中
将进位标志位 CY 清 0
将 bit 位地址内清 0
将进位标志位 CY 置 1
将 bit 位地址内置 1
将 Cy 和 bit 位地址中的值进行与操作后,结果送 Cy
bit 位地址中的值取反后再与 Cy 进行与操作,结构送
Cy
将 Cy 和 bit 位地址中的值进行或操作后,结果送 Cy
bit 位地址中的值取反后再与 Cy 进行或操作,结构送
Cy
将 Cy 取反
将 bit 位地址的值取反
1)Ri, Rn 指当前工作寄存器,i,n = 0 – 7,当前工作寄存器由程序状态字寄存器 PSW 的 2 个位 RS1, RS0 决
定