51汇编语言指令集
助记符
|
指令说明
|
字节数
|
周期数
| |
(数据传递类指令)
| ||||
MOV
|
A,Rn
|
寄存器传送到累加器
|
1
|
1
|
MOV
|
A,direct
|
直接地址传送到累加器
|
2
|
1
|
MOV
|
A,@Ri
|
累加器传送到外部RAM(8 地址)
|
1
|
1
|
MOV
|
A,#data
|
立即数传送到累加器
|
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
|
立即数传送到直接地址
|
3
|
2
|
MOV
|
@Ri,A
|
直接地址传送到直接地址
|
1
|
2
|
MOV
|
@Ri,direct
|
直接地址传送到间接RAM
|
2
|
1
|
MOV
|
@Ri,#data
|
立即数传送到间接RAM
|
2
|
2
|
MOV
|
DPTR,#data16
|
16 位常数加载到数据指针
|
3
|
1
|
MOVC
|
A,@A+DPTR
|
代码字节传送到累加器
|
1
|
2
|
MOVC
|
A,@A+PC
|
代码字节传送到累加器
|
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 位字节
|
1
|
1
|
(算术运算类指令)
| ||||
INC
|
A
|
累加器加1
|
1
|
1
|
INC
|
Rn
|
寄存器加1
|
1
|
1
|
INC
|
direct
|
直接地址加1
|
2
|
1
|
INC
|
@Ri
|
间接RAM 加1
|
1
|
1
|
INC
|
DPTR
|
数据指针加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
|
累加器十进制调整
|
1
|
1
|
ADD
|
A,Rn
|
寄存器与累加器求和
|
1
|
1
|
ADD
|
A,direct
|
直接地址与累加器求和
|
2
|
1
|
ADD
|
A,@Ri
|
间接RAM 与累加器求和
|
1
|
1
|
ADD
|
A,#data
|
立即数与累加器求和
|
2
|
1
|
ADDC
|
A,Rn
|
寄存器与累加器求和(带进位)
|
1
|
1
|
ADDC
|
A,direct
|
直接地址与累加器求和(带进位)
|
2
|
1
|
ADDC
|
A,@Ri
|
间接RAM 与累加器求和(带进位)
|
1
|
1
|
ADDC
|
A,#data
|
立即数与累加器求和(带进位)
|
2
|
1
|
SUBB
|
A,Rn
|
累加器减去寄存器(带借位)
|
1
|
1
|
SUBB
|
A,direct
|
累加器减去直接地址(带借位)
|
2
|
1
|
SUBB
|
A,@Ri
|
累加器减去间接RAM(带借位)
|
1
|
1
|
SUBB
|
A,#data
|
累加器减去立即数(带借位)
|
2
|
1
|
(逻辑运算类指令)
| ||||
ANL
|
A,Rn
|
寄存器“与”到累加器
|
1
|
1
|
ANL
|
A,direct
|
直接地址“与”到累加器
|
2
|
1
|
ANL
|
A,@Ri
|
间接RAM“与”到累加器
|
1
|
1
|
ANL
|
A,#data
|
立即数“与”到累加器
|
2
|
1
|
ANL
|
direct,A
|
累加器“与”到直接地址
|
2
|
1
|
ANL
|
direct, #data
|
立即数“与”到直接地址
|
3
|
2
|
ORL
|
A,Rn
|
寄存器“或”到累加器
|
1
|
2
|
ORL
|
A,direct
|
直接地址“或”到累加器
|
2
|
1
|
ORL
|
A,@Ri
|
间接RAM“或”到累加器
|
1
|
1
|
ORL
|
A,#data
|
立即数“或”到累加器
|
2
|
1
|
ORL
|
direct,A
|
累加器“或”到直接地址
|
2
|
1
|
ORL
|
direct, #data
|
立即数“或”到直接地址
|
3
|
1
|
XRL
|
A,Rn
|
寄存器“异或”到累加器
|
1
|
2
|
XRL
|
A,direct
|
直接地址“异或”到累加器
|
2
|
1
|
XRL
|
A,@Ri
|
间接RAM“异或”到累加器
|
1
|
1
|
XRL
|
A,#data
|
立即数“异或”到累加器
|
2
|
1
|
XRL
|
direct,A
|
累加器“异或”到直接地址
|
2
|
1
|
XRL
|
direct, #data
|
立即数“异或”到直接地址
|
3
|
1
|
CLR
|
A
|
累加器清零
|
1
|
2
|
CPL
|
A
|
累加器求反
|
1
|
1
|
RL
|
A
|
累加器循环左移
|
1
|
1
|
RLC
|
A
|
带进位累加器循环左移
|
1
|
1
|
RR
|
A
|
累加器循环右移
|
1
|
1
|
RRC
|
A
|
带进位累加器循环右移
|
1
|
1
|
SWAP
|
A
|
累加器高、低4 位交换
|
1
|
1
|
(控制转移类指令)
| ||||
JMP
|
@A+DPTR
|
相对DPTR 的无条件间接转移
|
1
|
2
|
JZ
|
rel
|
累加器为0 则转移
|
2
|
2
|
JNZ
|
rel
|
累加器为1 则转移
|
2
|
2
|
CJNE
|
A,direct,rel
|
比较直接地址和累加器,不相等转移
|
3
|
2
|
CJNE
|
A,#data,rel
|
比较立即数和累加器,不相等转移
|
3
|
2
|
CJNE
|
Rn,#data,rel
|
比较寄存器和立即数,不相等转移
|
2
|
2
|
CJNE
|
@Ri,#data,rel
|
比较立即数和间接RAM,不相等转移
|
3
|
2
|
DJNZ
|
Rn,rel
|
寄存器减1,不为0 则转移
|
3
|
2
|
DJNZ
|
direct,rel
|
直接地址减1,不为0 则转移
|
3
|
2
|
NOP
|
空操作,用于短暂延时
|
1
|
1
| |
ACALL
|
add11
|
绝对调用子程序
|
2
|
2
|
LCALL
|
add16
|
长调用子程序
|
3
|
2
|
RET
|
从子程序返回
|
1
|
2
| |
RETI
|
从中断服务子程序返回
|
1
|
2
| |
AJMP
|
add11
|
无条件绝对转移
|
2
|
2
|
LJMP
|
add16
|
无条件长转移
|
3
|
2
|
SJMP
|
rel
|
无条件相对转移
|
2
|
2
|
(布尔指令)
| ||||
CLR
|
C
|
清进位位
|
1
|
1
|
CLR
|
bit
|
清直接寻址位
|
2
|
1
|
SETB
|
C
|
置位进位位
|
1
|
1
|
SETB
|
bit
|
置位直接寻址位
|
2
|
1
|
CPL
|
C
|
取反进位位
|
1
|
1
|
CPL
|
bit
|
取反直接寻址位
|
2
|
1
|
ANL
|
C,bit
|
直接寻址位“与”到进位位
|
2
|
2
|
ANL
|
C,/bit
|
直接寻址位的反码“与”到进位位
|
2
|
2
|
ORL
|
C,bit
|
直接寻址位“或”到进位位
|
2
|
2
|
ORL
|
C,/bit
|
直接寻址位的反码“或”到进位位
|
2
|
2
|
MOV
|
C,bit
|
直接寻址位传送到进位位
|
2
|
1
|
MOV
|
bit, C
|
进位位位传送到直接寻址
|
2
|
2
|
JC
|
rel
|
如果进位位为1 则转移
|
2
|
2
|
JNC
|
rel
|
如果进位位为0 则转移
|
2
|
2
|
JB
|
bit,rel
|
如果直接寻址位为1 则转移
|
3
|
2
|
JNB
|
bit,rel
|
如果直接寻址位为0 则转移
|
3
|
2
|
JBC
|
bit,rel
|
直接寻址位为1 则转移并清除该位
|
2
|
2
|
(伪指令)
| ||
ORG
|
指明程序的开始位置
| |
DB
|
定义数据表
| |
DW
|
定义16 位的地址表
| |
EQU
|
给一个表达式或一个字符串起名
|
DATA
|
给一个8 位的内部RAM 起名
| |
XDATA
|
给一个8 位的外部RAM 起名
| |
BIT
|
给一个可位寻址的位单元起名
| |
END
|
指出源程序到此为止
|
(指令中的符号标识)
| |
Rn
|
工作寄存器R0-R7
|
Ri
|
工作寄存器R0 和R1
|
@Ri
|
间接寻址的8 位RAM 单元地址(00H-FFH)
|
#data8
|
8 位常数
|
#data16
|
16 位常数
|
addr16
|
16 位目标地址,能转移或调用到64KROM 的任何地方
|
addr11
|
11 位目标地址,在下条指令的2K 范围内转移或调用
|
Rel
|
8 位偏移量,用于SJMP 和所有条件转移指令,范围-128~+127
|
Bit
|
片内RAM 中的可寻址位和SFR 的可寻址位
|
Direct
|
直接地址,范围片内RAM 单元(00H-7FH)和80H-FFH
|
$
|
指本条指令的起始位置
|
符号定义表
符号 含义
Rn R0~R7寄存器n=0~7
Direct 直接地址,内部数据区的地址RAM(00H~7FH)
SFR(80H~FFH) B,ACC,PSW,IP,P3,IE,P2,SCON,P1,TCON,P0
@Ri 间接地址Ri=R0或R1 8051/31RAM地址(00H~7FH) 8052/32RAM地址(00H~FFH)
#da
#da
Addr16 16位的目标地址
Addr11 11位的目标地址
Rel 相关地址
bit 内部数据RAM(20H~2FH),特殊功能寄存器的直接地址的位
指令介绍
指令 字节 周期 动作说明
算数运算指令
1.ADD A,Rn 1 1 将累加器与寄存器的内容相加,结果存回累加器
2.ADD A,direct 2 1 将累加器与直接地址的内容相加,结果存回累加器
3.ADD A,@Ri 1 1 将累加器与间接地址的内容相加,结果存回累加器
4.ADD A,#da
5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相加,结果存回累加器
6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C相加,结果存回累加器
7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C相加,结果存回累加器
8.ADDC A,#da
9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借位C,结果存回累加器
10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借位C,结果存回累加器
11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借位C,结果存回累加器
12.SUBB A,#da
13.INC A 1 1 将累加器的值加1
14.INC Rn 1 1 将寄存器的值加l
15.INC direct 2 1 将直接地址的内容加1
16.INC @Ri 1 1 将间接地址的内容加1
17.INC DPTR 1 1 数据指针寄存器值加1
说明:将16位的DPTR加1,当DPTR的低字节(DPL)从FFH溢出至00H时,会使高字节(DPH)加1,不影响任何标志位
18.DEC A 1 1 将累加器的值减1
19.DEC Rn 1 1 将寄存器的值减1
20.DEC direct 2 1 将直接地址的内容减1
21.DEC @Ri 1 1 将间接地址的内容减1
22.MUL AB 1 4 将累加器的值与B寄存器的值相乘,乘积的低位字节存回累加器,高位字节存回B寄存器
说明:将累加器A和寄存器B内的无符号整数相乘,产生16位的积,低位字节存入A,高位字节存入B寄存器。如果积大于FFH,则溢出标志位(OV)被设定为1,而进位标志位为0
23.DIV AB 1 4 将累加器的值除以B寄存器的值,结果的商存回累加器,余数存回B寄存器
说明:无符号的除法运算,将累加器A除以B寄存器的值,商存入A,余数存入B。执行本指令后,进位位(C)及溢出位(OV)被清除为0
24.DA A 1 1 将累加器A作十进制调整,
若(A) 3-0>9或(AC)=1,则(A) 3-0←(A)3-0+6
若(A) 7-4>9或 (C)=1,则(A) 7-4←(A)7-4+6
逻辑运算指令
25.ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻辑判断,结果存回累加器
26.ANL A,direct 2 1 将累加器的值与直接地址的内容做AND的逻辑判断,结果存回累加器
27.ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND的逻辑判断,结果存回累加器
28.ANL A,#da
29.ANL direct,A 2 1 将直接地址的内容与累加器的值做AND的逻辑判断,结果存回该直接地址
30.ANL direct,#da
31.ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻辑判断,结果存回累加器
32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR的逻辑判断,结果存回累加器
33.ORL A,@Ri 1 1 将累加器的值与间接地址的内容做OR的逻辑判断,结果存回累加器
34.ORL A,#da
35.ORL direct,A 2 1 将直接地址的内容与累加器的值做OR的逻辑判断,结果存回该直接地址
36.ORL direct,#da
37.XRL A,Rn 1 1 将累加器的值与寄存器的值做XOR的逻辑判断,结果存回累加器
38.XRL A,direct 2 1 将累加器的值与直接地址的内容做XOR的逻辑判断,结果存回累加器
39.XRL A,@Ri 1 1 将累加器的值与间接地扯的内容做XOR的逻辑判断,结果存回累加器
40.XRL A,#da
41.XRL direct,A 2 1 将直接地址的内容与累加器的值做XOR的逻辑判断,结果存回该直接地址
42.XRL direct,#da
43.CLR A 1 1 清除累加器的值为0
44.CPL A 1 1 将累加器的值反相
45.RL A 1 1 将累加器的值左移一位
46.RLC A 1 1 将累加器含进位C左移一位
47.RR A 1 1 将累加器的值右移一位
48.RRC A 1 1 将累加器含进位C右移一位
49.SWAP A 1 1 将累加器的高4位与低4位的内容交换。(A)3-0←(A)7-4
数据转移指令
50.MOV A,Rn 1 1 将寄存器的内容载入累加器
51.MOV A,direct 2 1 将直接地址的内容载入累加器
52.MOV A,@Ri 1 1 将间接地址的内容载入累加器
53.MOV A,#da
54.MOV Rn,A 1 1 将累加器的内容载入寄存器
55.MOV Rn,direct 2 2 将直接地址的内容载入寄存器
56.MOV Rn,gdata 2 1 将常数载入寄存器
57.MOV direct,A 2 1 将累加器的内容存入直接地址
58.MOV direct,Rn 2 2 将寄存器的内容存入直接地址
59.MOV direct1, direct2 3 2 将直接地址2的内容存入直接地址1
60.MOV direct,@Ri 2 2 将间接地址的内容存入直接地址
61.MOV direct,#da
62.MOV @Ri,A 1 1 将累加器的内容存入某间接地址
63.MOV @Ri,direct 2 2 将直接地址的内容存入某间接地址
64.MOV @Ri,#da
65.MOV DPTR,#da
66.MOVC A,@A+DPTR 1 2 (A) ←((A)+(DPTR))
累加器的值再加数据指针寄存器的值为其所指定地址,将该地址的内容读入累加器
67.MOVC A,@A+PC 1 2 (PC)←(PC)+1;(A)←((A)+(PC))累加器的值加程序计数器的值作为其所指定地址,将该地址的内容读入累加器
68.MOVX A,@Ri 1 2 将间接地址所指定外部存储器的内容读入累加器(8位地址)
69.MOVX A,@DPTR 1 2 将数据指针所指定外部存储器的内容读入累加器(16位地址)
70.MOVX @Ri,A 1 2 将累加器的内容写入间接地址所指定的外部存储器(8位地址)
71.MOVX @DPTR,A 1 2 将累加器的内容写入数据指针所指定的外部存储器(16位地址)
72.PUSH direct 2 2 将直接地址的内容压入堆栈区
73.POP direct 2 2 从堆栈弹出该直接地址的内容
74.XCH A,Rn 1 1 将累加器的内容与寄存器的内容互换
75.XCH A,direct 2 1 将累加器的值与直接地址的内容互换
76.XCH A,@Ri 1 1 将累加器的值与间接地址的内容互换
77.XCHD A,@Ri 1 1 将累加器的低4位与间接地址的低4位互换
布尔代数运算
78.CLR C 1 1 清除进位C为0
79.CLR bit 2 1 清除直接地址的某位为0
80.SETB C 1 1 设定进位C为1
81.SETB bit 2 1 设定直接地址的某位为1
82.CPL C 1 1 将进位C的值反相
83.CPL bit 2 1 将直接地址的某位值反相
84.ANL C,bit 2 2 将进位C与直接地址的某位做AND的逻辑判断,结果存回进位C
85.ANL C,/bit 2 2 将进位C与直接地址的某位的反相值做AND的逻辑判断,结果存回进位C
86.ORL C,bit 2 2 将进位C与直接地址的某位做OR的逻辑判断,结果存回进位C
87.ORL C,/bit 2 2 将进位C与直接地址的某位的反相值做OR的逻辑判断,结果存回进位C
88.MOV C,bit 2 1 将直接地址的某位值存入进位C
89.MOV bit,C 2 2 将进位C的值存入直接地址的某位
90.JC rel 2 2 若进位C=1则跳至rel的相关地址
91.JNC rel 2 2 若进位C=0则跳至rel的相关地址
92.JB bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址
93.JNB bit,rel 3 2 若直接地址的某位为0,则跳至rel的相关地址
94.JBC bit,rel 3 2 若直接地址的某位为1,则跳至rel的相关地址,并将该位值清除为0
程序跳跃
95.ACALL addr11 2 2 调用2K程序存储器范围内的子程序
96.LCALL addr16 3 2 调用64K程序存储器范围内的子程序
97.RET 1 2 从子程序返回
98.RETI 1 2 从中断子程序返回
99.AJMP addr11 2 2 绝对跳跃(2K内)
100.LJMP addr16 3 2 长跳跃(64K内)
101.SJMP rel 2 2 短跳跃(2K内)-128~+127字节
102.JMP @A+DPTR 1 2 跳至累加器的内容加数据指针所指的相关地址
103.JZ rel 2 2 累加器的内容为0,则跳至rel所指相关地址
104.JNZ rel 2 2 累加器的内容不为0,则跳至rel所指相关地址
105.CJNE A,direct,rel 3 2 将累加器的内容与直接地址的内容比较,不相等则跳至rel所指的相关地址
106.CJNE A,#da
107.CJNE @Rn,#da
108.CJNE @Ri,#da
109.DJNZ Rn,rel 2 2 将寄存器的内容减1,不等于0则跳至rel所指的相关地址
110.DJNZ direct,rel 3 2 将直接地址的内容减1,不等于0则跳至rel所指的相关地址
111.NOP 1 1 无动作
注: cjne a,#da
当a<#da
CJNE A,direct,rel ;if(direct)<(A),PC←(PC)+3+rel,and CY←0 ;CJNE compare instruction
; ;if(direct)>(A),PC←(PC)+3+rel,and CY←1
; ;if(direct)=(A),PC←(PC)+3,and CY←0
; CJNE A,#data,rel ;ifdata<(A),PC←(PC)+3+rel,and CY←0
; ;ifdata>(A),PC←(PC)+3+rel,and CY←1
; ;ifdata=(A),PC←(PC)+3,and CY←0
; CJNE Rn,#data,rel ;ifdata<(Rn),PC←(PC)+3+rel,and CY←0
; ;ifdata>(Rn),PC←(PC)+3+rel,and CY←1
; ;ifdata=(Rn),PC←(PC)+3,and CY←0
; CJNE @Ri,#data,rel ;ifdata<((Ri)),PC←(PC)+3+rel,and CY←0
; ;ifdata>((Ri)),PC←(PC)+3+rel,and CY←1
; ;ifdata=((Ri)),PC←(PC)+3,and CY←0
CJNE是比较转移指令,该指令通过比较前面两个操作数的大小,如果它们的值不相等则转移,相等则继续执行。指令执行后要影响进位位CY,若操作数1小于操作数2,则CY=1;若操作数1大于操作数2,则CY=0
8种常用伪指令
1.ORG 16位地址 ;此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。
2.[标号:] DB 字节数据项表 ;将项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG: DB 88H,100,“7”,“C”
3.[标号:]DW 双字节数据项表 ;定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。例如:TAB: DW 1234H,7BH
4.名字 EQU 表达式 或名字=表达式 ;用与给一个表达式赋值或给字符串起名字。之后名字可用做程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数字串。 例如:COUNT=10 或 SPACE EQU 10H
5.名字 DATA 直接字节地址 ;给8位内部RAM单元起个名字,名字必须是一字母开头的字母数字串。同一单元可起多个名字。 例如:ERROR DATA 80H
6.名字 XDATA 直接字节地址 ;给8位外部RAM起个名字,名字规定同DATA 伪指令。例如:IO_PORT XDATA 0CF04H
7.名字 BIT 位指令 ;给一可位寻址的位单元起个名字,规定同DATA伪指令。例如:SWT BIT 30H
8.[标号:] END ;指出源程序到此结束,汇编对其后的程序语句不予理睬.源程序只在主程序最后使用一个END
MCS51汇编指令
指令格式(助记符) |
指令功能说明 |
字节 |
周期 |
MOV A,direct |
(direct)→(A) 直接单元地址中的数据→累加器A |
1 |
1 |
MOV A,#data |
#data→(A) 8位立即数→累加器A |
2 |
1 |
MOV A,Rn |
(Rn )→(A) Rn寄存器中的数据→累加器A |
1 |
1 |
MOV A,@Ri |
((Ri))→(A) Ri中的数据指向的地址单元中的数据 →累加器A |
1 |
1 |
MOV Rn,direct |
(direct)→(Rn) 直接寻址单元中的数据 —> 寄存器Rn |
2 |
2 |
MOV Rn,#data |
#data→(Rn) 8位立即数 —> 寄存器Rn |
2 |
1 |
MOV Rn,A |
(A)→(Rn) 累加器A中的数据 —> 寄存器Rn |
1 |
1 |
MOV direct,direct |
(direct)→(direct) 直接地址单元中的数据→直接地址单元direct |
3 |
2 |
MOV direct,#data |
#data→(direct) 立即数→直接地址单元direct |
3 |
2 |
MOV direct,A |
(A)→(direct) 累加器A中的数据→直接地址单元direct |
2 |
2 |
MOV direct,Rn |
(Rn)→(direct) 寄存器Rn中的数据→直接地址单元direct |
2 |
2 |
MOV direct,@Ri |
((Ri))→(direct) 寄存器Ri中的数据指定的地址单元中数据→直接地址单元direct |
2 |
2 |
MOV @Ri,direct |
(direct)→((Ri)) 直接地址单元中的数据→以Ri中的内容为地址的RAM单元 |
2 |
2 |
MOV @Ri,#data |
#data→((Ri)) 立即数→以Ri中的内容为地址的RAM单元 |
2 |
1 |
MOV @Ri,A |
(A)→((Ri)) 累加器A中的数据→以Ri中的内容为地址的RAM单元 |
1 |
1 |
MOVC A,@A+DPTR |
((A))+(DPTR)→(A) 表格地址单元中的数据→累加器A |
3 |
2 |
MOVC A,@A+PC |
((PC))+1→(A),((A))+(PC)→(A) 表格地址单元中的数据→累加器A |
1 |
2 |
MOVX @DPTR,A |
(A)→((DPTR)) 累加器中的数据→数据指针指向片外RAM地址中 |
3 |
2 |
MOVX A, @DPTR |
(A)→((DPTR)) 累加器中的数据 → 数据指针指向片外RAM地址中 |
3 |
2 |
MOVX A, @Ri |
((Ri))→(A) 寄存器Ri指向片外RAM地址中的数据→累加器A中 |
1 |
2 |
MOVX @Ri,A |
(A)→((Ri)) 累加器中的数据→寄存器Ri指向片外RAM地址中 |
1 |
2 |
PUSH direct |
(SP)+1→(SP),(direct)→(SP) 堆栈指针首先加1,直接寻址单元中的数据送到堆栈指针SP所指的单元中 |
2 |
2 |
PUSH A |
将累加器A中的数据→堆栈顶端 |
2 |
2 |
POP direct |
(SP)→(direct)(SP)-1→(SP), 堆栈指针SP所指的单元数据送到直接寻址单元中,堆栈指针SP再进行减1操作 |
2 |
2 |
POP A |
将堆栈顶端的数据→累加器A |
2 |
2 |
XCH A,Rn |
(A)←→(Rn)累加器与工作寄存器Rn中的数据互换 |
1 |
1 |
XCH A,@Ri |
(A)←→((Ri))累加器与工作寄存器Ri所指的存储单元中的数据互换 |
1 |
1 |
XCH A, direct |
(A)←→(direct)累加器与直接地址单元中的内容互换 |
2 |
2 |
XCHD A,@Ri |
(A3-0)←→((Ri)3-0)累加器与工作寄存器Ri所指的存储单元中的数据低半字节互换 |
1 |
1 |
SWAP A |
(A3-0)←→(A7-4)累加器中的内容高低半字节互换 |
1 |
1 |
MOV DPTR,#data16 |
#dataH→(DPH),#dataL→(DPL)16位常数的高8位送到DPH,低8位送到DPL |
3 |
2 |
ADD A,#data |
A)+#data→(A) 累加器A中的数据与立即数#data相加,结果存在A中 |
2 |
1 |
ADD A,direct |
A)+(direct)→(A) 累加器A中的数据与直接地址单元中的数据相加,结果存在A中 |
2 |
1 |
指令格式(助记符) |
指令功能说明 |
字节 |
周期 |
ADD A,Rn |
(A)+(Rn)→(A) 累加器A中的数据与工作寄存器Rn中的数据相加,结果存在A中 |
1 |
1 |
ADD A,@Ri |
(A)+((Ri))→(A) 累加器A中的数据与工作寄存器Ri所指向地址单元中的数据相加,结果存在A中 |
1 |
1 |
ADDC A,direct |
(A)+(direct)+(C)→(A) 累加器A中的数据与直接地址单元的数据连同进位位相加,结果存在A中 |
2 |
1 |
ADDC A,#data |
(A)+#data +(C)→(A) 累加器A中的数据与立即数连同进位位相加,结果存在A中 |
2 |
1 |
ADDC A,Rn |
A)+Rn+(C)→(A) 累加器A中的数据与工作寄存器Rn中的数据、连同进位位相加,结果存在A中 |
1 |
1 |
ADDC A,@Ri |
(A)+((Ri))+(C)→(A) 累加器A中的数据与工作寄存器Ri指向地址单元中的数据、连同进位位相加,结果存在A中 |
1 |
1 |
SUBB A,direct |
(A)-(direct)-(C)→(A) 累加器A中的数据与直接地址单元中的数据、连同借位位相减,结果存在A中 |
2 |
1 |
SUBB A,#data |
(A)-(Rn)-(C)→(A) 累加器A中的数据与工作寄存器中的数据、连同借位位相减,结果存在A中 |
2 |
1 |
SUBB A,Rn |
(A)-(Rn)-(C)→(A) 累加器A中的数据与工作寄存器中的数据、连同借位位相减,结果存在A中 |
1 |
1 |
SUBB A,@Ri |
(A)-((Ri))-(C)→(A) 累加器A中的数据与工作寄存器Ri指向的地址单元中的数据、连同借位位相减,结果存在A中 |
1 |
1 |
MUL AB |
(A)×(B)→(A)和(B) 累加器A中的数据乘以寄存器B中的数据,结果高字节存入寄存器B,底字节存入累加器A |
1 |
4 |
DIV AB |
(A)÷(B)→(A)和(B) 累加器A中的数据除以寄存器B中的数据,结果的商存入累加器A,余数存入寄存器B中 |
1 |
4 |
INC A |
+1?ú(A) 累加器A中的数据加1,结果存在A中 |
1 |
1 |
INC direct |
(direct)+1→(direct) 直接地址单元中的数据加1,结果送回原地址单元中,如果直接地址是I/O,其功能是先读入I/O锁存器的内容,然后在CPU进行加1操作,再输出到I/O上,这就是“读—修改—写”操作 |
2 |
1 |
INC @Ri |
((Ri))+1→((Ri)) 寄存器的数据指向的地址单元中的数据加1,结果送回原地址单元中 |
1 |
1 |
NC Rn |
Rn)+1→(Rn)寄存器Rn的数据加1,结果送回原地址单元 |
1 |
1 |
INC DPTR |
(DPTR)+1→(DPTR)数据指针的数据加1,结果送回数据指针中 |
1 |
2 |
DEC A |
(A)-1→(A)累加器A中的数据减1,结果送回累加器A |
1 |
1 |
DEC direct |
(direct)-1→(direct)直接地址单元中的数据减1,结果送回直接地址单元中 |
2 |
1 |
DEC @Ri |
((Ri))-1→((Ri))寄存器Ri指向的地址单元中的数据减1,结果送回原地址单元中 |
1 |
1 |
DEC Rn |
(Rn)-1→(Rn)寄存器Rn中的数据减1,结果送回寄存器Rn中 |
1 |
1 |
DA A |
累加器A中的数据做BCD调整 |
1 |
1 |
RL A |
累加器A中的数据左移一位,bit7?úbit0 |
1 |
1 |
RR A |
累加器A中的数据右移一位,bit7?úbit7 |
1 |
1 |
RLC A |
累加器A中的数据连同进位标志位CY左移一位,bit7?úCY,CY?úbit0 |
1 |
1 |
RRC A |
累加器A中的数据连同进位CY位CY右移一位,bi0?úCY,CY?úbit7 |
1 |
1 |
SWAP A |
累加器中的数据高低半字节互换 |
1 |
1 |
CPL A |
累加器中的数据按位取反,即0?ú1,1?ú0 |
1 |
1 |
CLR A |
0?ú(A),累加器中的数据清0H |
1 |
1 |
ANL A,direct |
累加器A中的数据和直接地址单元中的数据执行与操作。结果存在寄存器A中 |
2 |
1 |
ANL direct,#data |
直接地址单元中的数据和立即数执行与操作。结果存在直接地址单元中 |
3 |
2 |
指令格式(助记符) |
指令功能说明 |
字节 |
周期 |
NL A,#data |
累加器A的数据和立即数执行与操作。结果存在累加器A中 |
2 |
1 |
NL A,Rn |
累加器A的数据和寄存器Rn中的数据执行与操作。结果存在累加器A中 |
1 |
1 |
ANL direct,A |
直接地址单元中的数据和累加器A的数据执行与操作。结果存在直接地址单元中 |
2 |
1 |
ANL A,@Ri |
累加器A的数据和工作寄存器Ri指向的地址单元中的数据执行与操作。结果存在累加器A中 |
1 |
1 |
ORL A,direct |
累加器A中的数据和直接地址单元中的数据执行逻辑或操作。结果存在寄存器A中 |
2 |
1 |
ORL direct,#data |
累加器A中的数据和直接地址单元中的数据执行逻辑或操作。结果存在寄存器A中 |
3 |
2 |
ORL A,#data |
累加器A的数据和立即数执行逻辑或操作。结果存在累加器 |
2 |
1 |
ORL A,Rn |
累加器A的数据和寄存器Rn中的数据执行逻辑或操作。结果存在累加器A中 |
1 |
1 |
ORL direct,A |
直接地址单元中的数据和累加器A的数据执行逻辑或操作。结果存在直接地址单元中 |
2 |
1 |
ORL A,@Ri |
累加器A的数据和工作寄存器Ri指向的地址单元中的数据执行逻辑或操作。结果存在累加器A中 |
1 |
1 |
XRL A,direct |
累加器A中的数据和直接地址单元中的数据执行逻辑异或操作。结果存在寄存器A中 |
2 |
1 |
XRL direct,#data |
直接地址单元中的数据和立即数执行逻辑异或操作。结果存在直接地址单元中 |
3 |
2 |
XRL A,#data |
累加器A的数据和立即数执行逻辑异或操作。结果存在累加器A中 |
2 |
1 |
XRL A,Rn |
累加器A的数据和寄存器Rn中的数据执行逻辑异或操作。结果存在累加器A中 |
1 |
1 |
XRL data,A |
直接地址单元中的数据和累加器A的数据执行逻辑异或操作。结果存在直接地址单元中 |
2 |
1 |
XRL A,@Ri |
累加器A的数据和工作寄存器Ri指向的地址单元中的数据执行逻辑异或操作。结果存在累加器A中 |
1 |
1 |
CLR C |
清除进位标志CY为0 |
1 |
1 |
CLR bit |
清除bit为0 |
2 |
1 |
SETB C |
设定进位标志CY为1 |
1 |
1 |
SETB bit |
设定bit为1 |
2 |
1 |
CPL C |
将进位标志CY反相 |
1 |
1 |
CPL bit |
将bit反相 |
2 |
1 |
ANL C,bit |
将进位标志CY AND bit值?ú进位标志位CY |
2 |
2 |
ANL C,/bit |
将进位标志CY AND bit反相值?ú进位标志位CY |
2 |
2 |
ANL A,#data |
将累加器A的各位与立即数的相对位置做AND?úA累加器 |
2 |
2 |
ORL C,bit |
将进位标志CY OR bit值?ú进位标志位CY |
2 |
2 |
ORL C,/bit |
将进位标志CY OR bit反相值?ú进位标志位CY |
2 |
2 |
ORL A,#data |
将累加器A的各位与立即数的相对位置做OR?úA累加器 |
2 |
2 |
MOV C,bit |
将bit值?ú进位标志位CY |
2 |
1 |
MOV bit,C |
将进位标志位CY?úbit值 |
2 |
2 |
JC rel |
当进位标志位CY=1就跳至rel,否则执行下一条指令 |
2 |
2 |
JNC rel |
当进位标志位CY=0就跳至rel,否则执行下一条指令 |
2 |
2 |
JB bit rel |
当进bit=1就跳至rel,否则执行下一条指令 |
3 |
3 |
JNB bit rel |
当进bit=0就跳至rel,否则执行下一条指令 |
3 |
3 |
JBC bit rel |
当进bit=1跳至rel,并且清除此bit为0,否则执行下一条指令 |
3 |
3 |
ACALL addr11 |
2K范围内子程序调用 |
2 |
2 |
LCALL addr16 |
64K范围内子程序调用 |
3 |
3 |
RET |
子程序返回 |
1 |
2 |
RET1 |
中断服务程序结束返回 |
1 |
2 |
指令格式(助记符) |
指令功能说明 |
字节 |
周期 |
AJMP addr11 |
2K范围内无条件跳转 |
2 |
2 |
LJMP addr16 |
64K范围内无条件跳转 |
2 |
2 |
SJMP rel |
在此指令的前128或后128范围内无条件跳转 |
2 |
2 |
JMP @A+DPTR |
跳至@A+DPTR所指定的地址 |
1 |
2 |
JZ rel |
如A的内容为0,则短跳转,负责执行下一条指令 |
2 |
2 |
JNZ rel |
如A的内容不为0,则短跳转,负责执行下一条指令 |
2 |
2 |
CJNE A,direct,rel |
如A的内容与直接地址内的数据不同,则短跳转 |
3 |
2 |
CJNE A,#data,rel |
如A的内容与立即数不同,则短跳转 |
3 |
2 |
CJNE Rn,#data,rel |
如Rn寄存器中的数据与立即数不同,则短跳转 |
3 |
2 |
CJNE @Ri,#data,rel |
如间接地址的数据与立即数不同,则短跳转 |
3 |
2 |
DJNZ Rn,rel |
Rn寄存器中的数据减1,若不为0,则短跳转,否则执行下条指令 |
2 |
2 |
DJNZ direct,rel |
直接地址中的数据减1,若不为0,则短跳转,负责执行下条指令 |
3 |
2 |
NOP |
CPU仅仅作取指令,不动作 |
1 |
1 |