MCS-51单片机指令系统
(转载)
(一) 指令系统简介
1. 指令分类统计
指令总数:111条 操作码:255个 助记符:48个
单字节指令:49条 单周期指令:64条
双字节指令:48条 双周期指令:45条
三字节指令:17条 四周期指令:2条
表3-1 MCS-51指令分类
数据传送指令(29) 数据处理指令(48) 位操作指令(12) 程序控制指令(22)
1) 内部传送(16)
2) 外部传送(4)
3) 查表 (2)
4) 交换 (5)
5) 栈操作 (2) 1) 算术运算(24)
2) 逻辑运算(24) 1) 位传送(2)
2) 位置值(4)
3) 位逻辑(6) 1) 调用及返回(4)
2) 无条件转移(4)
3) 条件转移 (11)
4) 循环 (2)
5) 空操作 (1)
2. 符号约定
Rn 表示当前工作寄存器中的R0R7
Direct 表示对内部单元直接寻址的8位地址
Ri 表示8位地址指针R0或R1,地址在R0或R1中。
DPTR 表示16位地址指针,地址在DPTR中。
#data 表示8位立即数。
#data16 表示16位立即数。
A+基地址 表示以A为变址寄存器。
addr11 表示短转移的11位地址。
addr16 表示长转移的16位地址。
rel 表示相对转移的地址偏移量。
bit 表示位地址。
(xx) 表示XX单元的内容,如(A)表示寄存器A的内容。
((xx)) 表示以(xx)为指针,所指单元的内容。例如,
((DPTR))表示数据指针DPTR所指单元的内容。
3. 寻址方式
表 F1-1 MCS-51指令系统的寻址方式
寻 址
方 式
寻 址 范 围
操作数形式
举 例
寄存器
寻址 R0-R7 ,DPTR
Acc,B,C(Cy 位)
寄存器名 MOV R3,A
INC DPTR
直接
寻址 内部RAM 00H-7FH
特殊功能寄存器 80H-FFH 8位地址
SFR名 MOV 79H,SP
PUSH P1
直接
位寻址 内部RAM位寻址区 (20H-2FH):
位地址00H-7FH
可寻址的特殊功能寄存器:
位地址 80H-F7H 8位地址
位名
SFR名.位序 MOV C,78H
CLR TR0
ANL C,P0.1
寄存器
间接
寻址 以数据指针表示操作数。
内部RAM 00H-7FH @R0
@R1 MOV A, @R0
ADD A, @R1
外部RAM或I/O端口
00H-FFH / 0000H-FFFFH @R0 ,@R1@DPTR MOVX A, @R0
MOVX @DPTR,A
立即
寻址 8位(二进制)立即数, # data MOV A,# 1
16位(二进制)立即数 # data16 MOV DPTR,#2000H
基址
加
变址
寻址 以变址方式读程序存贮器
实际地址=基址+变址偏移量
8位无符号变址偏移量由A提供
基址由PC或DPTR提供 @A+DPTR
@A+PC MOVC A,@A+DPTR
MOVC A,@A+PC
转 移 地 址 的 寻 址 方 式
相对
寻址 转移地址= 基址+相对偏移量rel
基址为取指令后的PC 值
8位有符号数rel在指令中给出 rel SJMP 0EBH
标号 SJMP LOOP 标号
直接
寻址 短转移,指令直接给出11位地址 Addr11或标号 AJMP NEW 标号
长转移,指令直接给出16位地址 Addr16或标号 LJMP 2010H
(二) 数据传送指令
表 3-2 数据传送指令
操作码 目标操作数 可选择的源操作数 说 明
MOV A
Rn
direct
@Ri
DPTR Rn;direct;@Ri;# data
A;direct;# data
A;Rn;direct;@Ri;# data
A;direct;# data
# data16 内部传送
内部传送
内部传送
内部传送
数据指针赋值
PUSH
POP 隐含(SP)
direct direct
隐含(SP) 压栈,只能用直接寻址
退栈,只能用直接寻址
XCH A Rn; direct; @Ri 内部交换
XCHD
SWAP A
1. 指令分类统计
指令总数:111条 操作码:255个 助记符:48个
单字节指令:49条 单周期指令:64条
双字节指令:48条 双周期指令:45条
三字节指令:17条 四周期指令:2条
表3-1 MCS-51指令分类
数据传送指令(29) 数据处理指令(48) 位操作指令(12) 程序控制指令(22)
1) 内部传送(16)
2) 外部传送(4)
3) 查表 (2)
4) 交换 (5)
5) 栈操作 (2) 1) 算术运算(24)
2) 逻辑运算(24) 1) 位传送(2)
2) 位置值(4)
3) 位逻辑(6) 1) 调用及返回(4)
2) 无条件转移(4)
3) 条件转移 (11)
4) 循环 (2)
5) 空操作 (1)
2. 符号约定
Rn 表示当前工作寄存器中的R0R7
Direct 表示对内部单元直接寻址的8位地址
Ri 表示8位地址指针R0或R1,地址在R0或R1中。
DPTR 表示16位地址指针,地址在DPTR中。
#data 表示8位立即数。
#data16 表示16位立即数。
A+基地址 表示以A为变址寄存器。
addr11 表示短转移的11位地址。
addr16 表示长转移的16位地址。
rel 表示相对转移的地址偏移量。
bit 表示位地址。
(xx) 表示XX单元的内容,如(A)表示寄存器A的内容。
((xx)) 表示以(xx)为指针,所指单元的内容。例如,
((DPTR))表示数据指针DPTR所指单元的内容。
3. 寻址方式
表 F1-1 MCS-51指令系统的寻址方式
寻 址
方 式
寻 址 范 围
操作数形式
举 例
寄存器
寻址 R0-R7 ,DPTR
Acc,B,C(Cy 位)
寄存器名 MOV R3,A
INC DPTR
直接
寻址 内部RAM 00H-7FH
特殊功能寄存器 80H-FFH 8位地址
SFR名 MOV 79H,SP
PUSH P1
直接
位寻址 内部RAM位寻址区 (20H-2FH):
位地址00H-7FH
可寻址的特殊功能寄存器:
位地址 80H-F7H 8位地址
位名
SFR名.位序 MOV C,78H
CLR TR0
ANL C,P0.1
寄存器
间接
寻址 以数据指针表示操作数。
内部RAM 00H-7FH @R0
@R1 MOV A, @R0
ADD A, @R1
外部RAM或I/O端口
00H-FFH / 0000H-FFFFH @R0 ,@R1@DPTR MOVX A, @R0
MOVX @DPTR,A
立即
寻址 8位(二进制)立即数, # data MOV A,# 1
16位(二进制)立即数 # data16 MOV DPTR,#2000H
基址
加
变址
寻址 以变址方式读程序存贮器
实际地址=基址+变址偏移量
8位无符号变址偏移量由A提供
基址由PC或DPTR提供 @A+DPTR
@A+PC MOVC A,@A+DPTR
MOVC A,@A+PC
转 移 地 址 的 寻 址 方 式
相对
寻址 转移地址= 基址+相对偏移量rel
基址为取指令后的PC 值
8位有符号数rel在指令中给出 rel SJMP 0EBH
标号 SJMP LOOP 标号
直接
寻址 短转移,指令直接给出11位地址 Addr11或标号 AJMP NEW 标号
长转移,指令直接给出16位地址 Addr16或标号 LJMP 2010H
(二) 数据传送指令
表 3-2 数据传送指令
操作码 目标操作数 可选择的源操作数 说 明
MOV A
Rn
direct
@Ri
DPTR Rn;direct;@Ri;# data
A;direct;# data
A;Rn;direct;@Ri;# data
A;direct;# data
# data16 内部传送
内部传送
内部传送
内部传送
数据指针赋值
PUSH
POP 隐含(SP)
direct direct
隐含(SP) 压栈,只能用直接寻址
退栈,只能用直接寻址
XCH A Rn; direct; @Ri 内部交换
XCHD
SWAP A