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