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