8051指令系统 李艳生整理
8051指令系统
1、 寻址方式
寻址方式
操作数地址(PA)
指令格式举例
1立即寻址
操作数在指令中直接给出
MOV A,#69H; (A)←69
2寄存器寻址
操作数在寄存器中
MOV A,R0 ; (A)←(R0)
3直接寻址
操作数的有效地址由指令直接给出
MOV A,4FH; (A)←(4F)
4寄存器间接寻址
指令中给出的寄存器的
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
为操作数的地址
MOV A,@R1; (A)←[R1]
5变址寻址
指定的变址寄存器的内容与指令中给出的偏移量相加,所得的结果作为操作数地址
MOVC A,@A+DPTR;
(A)←[(DPTR)+(A)]
6相对寻址
由程序计数器PC提供的基地址与指令中提供的偏移量OFFSET相加,得到操作数的地址
SJMP OFFSET;
(PC)←((PC)+OFFSET)
7位 寻 址
操作数是二进制数的某一位,其位地址出现在指令中
SETB bit;
2、 指 令 表
1.按字母顺序排列的指令表
助记符
功能说明
字节
振荡周期
ACALL addr11
绝对短调用子程序
2
24
ADD A,#data8
8位立即数加到累加器
2
12
ADD A,@Ri
间接RAM内容加到累加器
1
12
ADD A,direct
直接地址单元加到累加器
2
12
ADD A,Rn
寄存器内容加到累加器
1
12
ADDC A,#data8
8位立即数带进位加到累加器
2
12
ADDC A,@Ri
间接RAM内容带进位加到累加器
1
12
ADDC A,dirct
直接地址单元带进位加到累加器
2
12
ADDC A,Rn
寄存器内容带进位加到累加器
1
12
AJMP addr11
绝对短转移
2
24
ANL A,#data8
累加器与8位立即数相“与”
2
12
ANL A,@Ri
累加器与间接RAM内容相“与”
1
12
ANL A,direct
累加器与直接地址单元相“与”
2
12
ANL A,Rn
累加器与寄存器相“与”
1
12
ANL C,bit
进位位和直接地址位相“与”
2
24
ANL C,bit
进位位和直接地址位的反码相“与”
2
24
ANL direct,#data8
直接地址单元与8位立即数相“与”
3
24
ANL direct,A
直接地址单元与累加器相“与”
2
12
CJNE @Ri,#data8,rel
间接RAM单元,不等则转移
3
24
CJNE A,#data8,rel
累加器与8位立即数比较,不等则转移
3
24
CJNE A,direct,rel
累加器与直接地址单元比较,不等则转移
3
24
CJNE Rn,#data8,rel
寄存器与8位立即数比较,不等则转移
3
24
CLR A
累加器清0
1
12
CLR bit
清直接地址位
2
12
CLR C
清进位位
1
12
CPL A
累加器求反
1
12
CPL bit
直接地址位求反
2
12
CPL C
进位位求反
1
12
DA A
累加器进行十进制转换
1
12
DEC @Ri
间接RAM内容减1
1
12
DEC A
累加器减1
1
12
DEC direct
直接地址单元内容减1
2
12
DEC Rn
寄存器减1
1
12
DIV A,B
A除以B
1
48
DJNZ direct,rel
直接地址单元减1,非零转移
3
24
DJNZ Rn,rel
寄存器减1,非零转移
3
24
INC @Ri
间接RAM内容加1
1
12
INC A
累加器加1
1
12
INC direct
直接地址单元内容加1
2
12
INC DPTR
DPTR加1
1
24
INC Rn
寄存器加1
1
12
JB bit,rel
直接地址位为1则转移
3
24
JBC bit,rel
直接地址位为1则转移,该位清零
3
24
JC rel
进位位为1则转移
2
24
JMP @A+DPTR
相对于DPTR的间接转移
1
24
JNB bit,rel
直接地址位为0则转移
3
24
JNC rel
进位位为0则转移
2
24
JNZ rel
累加器非零转移
2
24
JZ rel
累加器为零转移
2
24
LACLL addr16
长调用子程序
3
24
LJMP addr16
长转移
3
24
MOV @DPTR,A
累加器送入外部RAM(16位地址)
1
24
MOV @Ri,#data8
8位立即数送入间接RAM单元
2
12
MOV @Ri,A
累加器内容送入间接RAM单元
1
12
MOV @Ri,A
累加器送入外部RAM(8位地址)
1
24
MOV @Ri,direct
直接地址单元中的数据送入间接RAM单元
2
24
MOV A,#data8
8位立即数送入累加器
2
12
MOV A,@A+DPTR
以DPTR为基地址变址寻址单元中的数据送入累加器
1
24
MOV A,@A+PC
以PC为基地址变址寻址单元中的数据送入累加器
1
24
MOV A,@DPTR
外部RAM(16位地址)送入累加器
1
24
MOV A,@Ri
间接RAM中的数据送入累加器
1
12
MOV A,@Ri
外部RAM(8位地址)送入累加器
1
24
MOV A,direct
直接地址单元中的数据送入累加器
2
12
MOV A,Rn
寄存器内容送入累加器
1
12
MOV bit,C
进位位送入直接地址位
2
24
MOV C,bit
直接地址位送入进位位
2
12
MOV direct,#data8
8位立即数送入直接地址单元
3
24
MOV direct,@Ri
间接RAM中的数据送入直接地址单元
2
24
MOV direct,A
累加器内容送入直接地址单元
2
12
MOV direct,direct
直接地址单元中的数据送入直接地址单元
3
24
MOV direct,Rn
寄存器内容送入直接地址单元
2
24
MOV DPTR,#data16
16位立即数地址送入地址寄存器
3
24
MOV Rn,#data8
8位立即数送入寄存器
2
12
MOV Rn,A
累加器内容送入寄存器
1
12
MOV Rn,direct
直接地址单元中的数据送入寄存器
2
24
MUL A,B
A乘以B
1
48
NOP
空操作
1
12
ORL A,#data8
累加器与8位立即数相“或”
2
12
ORL A,@Ri
累加器与间接RAM内容相“或”
1
12
ORL A,direct
累加器与直接地址单元相“或”
2
12
ORL A,Rn
累加器与寄存器相“或”
1
12
ORL C,bit
进位位和直接地址位相“或”
2
24
ORL C,bit
进位位和直接地址位的反码相“或”
2
24
ORL direct,#data8
直接地址单元与8位立即数相“或”
3
24
ORL direct,A
直接地址单元与累加器相“或”
2
12
POP DIRECT
堆栈中的数据弹出到直接地址单元
2
24
PUSH direct
直接地址单元中的数据压入堆栈
2
24
RET
子程序返回
1
24
RETI
中断返回
1
24
RL A
累加器循环左移
1
12
RLC A
累加器带进位循环左移
1
12
RR A
累加器循环右移
1
12
RRC A
累加器带进位循环右移
1
12
SETB bit
置直接地址位
2
12
SETB C
置进位位
1
12
SJMP rel
相对转移
2
24
SUBB A,#data8
累加器带借位减8位立即数
2
12
SUBB A,@Ri
累加器带借位减间接RAM内容
1
12
SUBB A,dirct
累加器带借位减直接地址单元
2
12
SUBB A,Rn
累加器带借位减寄存器内容
1
12
SWAP A
累加器半字节交换
1
12
XCH A,@Ri
间接RAM与累加器交换
1
12
XCH A,direct
直接地址单元与累加器交换
2
12
XCH A,Rn
寄存器与累加器交换
1
12
XCHD A,@Ri
间接RAM与累加器进行低半字节交换
1
12
XRL A,#data8
累加器与8位立即数相“异或”
2
12
XRL A,@Ri
累加器与间接RAM内容相“异或”
1
12
XRL A,direct
累加器与直接地址单元相“异或”
2
12
XRL A,Rn
累加器与寄存器相“异或”
1
12
XRL direct,#data8
直接地址单元与8位立即数相“异或”
3
24
XRL direct,A
直接地址单元与累加器相“异或”
2
12
2. 按类别顺序排列的指令表
MCS-51系列单片机的指令系统,按功能分类可分为:数据传送、算术操作、逻辑操作、控制转移和布尔变量操作等五种。具体指令如下列表格所示:
1、数据传送类指令
助记符
功能说明
字节数
振荡周期
MOV A,Rn
寄存器内容送入累加器
1
12
MOV A,direct
直接地址单元中的数据送入累加器
2
12
MOV A,@Ri
间接RAM中的数据送入累加器
1
12
MOV A,#data8
8位立即数送入累加器
2
12
MOV Rn,A
累加器内容送入寄存器
1
12
MOV Rn,direct
直接地址单元中的数据送入寄存器
2
24
MOV Rn,#data8
8位立即数送入寄存器
2
12
MOV direct,A
累加器内容送入直接地址单元
2
12
MOV direct,Rn
寄存器内容送入直接地址单元
2
24
MOV direct,direct
直接地址单元中的数据送入直接地址单元
3
24
MOV direct,@Ri
间接RAM中的数据送入直接地址单元
2
24
MOV direct,#data8
8位立即数送入直接地址单元
3
24
MOV @Ri,A
累加器内容送入间接RAM单元
1
12
MOV @Ri,direct
直接地址单元中的数据送入间接RAM单元
2
24
MOV @Ri,#data8
8位立即数送入间接RAM单元
2
12
MOV DPTR,#data16
16位立即数地址送入地址寄存器
3
24
MOV A,@A+DPTR
以DPTR为基地址变址寻址单元中的数据送入累加器
1
24
MOV A,@A+PC
以PC为基地址变址寻址单元中的数据送入累加器
1
24
MOV A,@Ri
外部RAM(8位地址)送入累加器
1
24
MOV A,@DPTR
外部RAM(16位地址)送入累加器
1
24
MOV @Ri,A
累加器送入外部RAM(8位地址)
1
24
MOV @DPTR,A
累加器送入外部RAM(16位地址)
1
24
PUSH direct
直接地址单元中的数据压入堆栈
2
24
POP DIRECT
堆栈中的数据弹出到直接地址单元
2
24
XCH A,Rn
寄存器与累加器交换
1
12
XCH A,direct
直接地址单元与累加器交换
2
12
XCH A,@Ri
间接RAM与累加器交换
1
12
2、算术操作类指令
助记符
功能说明
字节数
振荡周期
ADD A,Rn
寄存器内容加到累加器
1
12
ADD A,direct
直接地址单元加到累加器
2
12
ADD A,@Ri
间接RAM内容加到累加器
1
12
ADD A,#data8
8位立即数加到累加器
2
12
ADDC A,Rn
寄存器内容带进位加到累加器
1
12
ADDC A,dirct
直接地址单元带进位加到累加器
2
12
ADDC A,@Ri
间接RAM内容带进位加到累加器
1
12
ADDC A,#data8
8位立即数带进位加到累加器
2
12
SUBB A,Rn
累加器带借位减寄存器内容
1
12
SUBB A,dirct
累加器带借位减直接地址单元
2
12
SUBB A,@Ri
累加器带借位减间接RAM内容
1
12
SUBB A,#data8
累加器带借位减8位立即数
2
12
INC A
累加器加1
1
12
INC Rn
寄存器加1
1
12
INC direct
直接地址单元内容加1
2
12
INC @Ri
间接RAM内容加1
1
12
INC DPTR
DPTR加1
1
24
DEC A
累加器减1
1
12
DEC Rn
寄存器减1
1
12
DEC direct
直接地址单元内容减1
2
12
DEC @Ri
间接RAM内容减1
1
12
MUL A,B
A乘以B
1
48
DIV A,B
A除以B
1
48
3、逻辑操作类指令
助记符
功能说明
字节数
振荡周期
ANL A,Rn
累加器与寄存器相“与”
1
12
ANL A,direct
累加器与直接地址单元相“与”
2
12
ANL A,@Ri
累加器与间接RAM内容相“与”
1
12
ANL A,#data8
累加器与8位立即数相“与”
2
12
ANL direct,A
直接地址单元与累加器相“与”
2
12
ANL direct,#data8
直接地址单元与8位立即数相“与”
3
24
ORL A,Rn
累加器与寄存器相“或”
1
12
ORL A,direct
累加器与直接地址单元相“或”
2
12
ORL A,@Ri
累加器与间接RAM内容相“或”
1
12
ORL A,#data8
累加器与8位立即数相“或”
2
12
ORL direct,A
直接地址单元与累加器相“或”
2
12
ORL direct,#data8
直接地址单元与8位立即数相“或”
3
24
XRL A,Rn
累加器与寄存器相“异或”
1
12
XRL A,direct
累加器与直接地址单元相“异或”
2
12
XRL A,@Ri
累加器与间接RAM内容相“异或”
1
12
XRL A,#data8
累加器与8位立即数相“异或”
2
12
XRL direct,A
直接地址单元与累加器相“异或”
2
12
XRL direct,#data8
直接地址单元与8位立即数相“异或”
3
24
CLR A
累加器清0
1
12
CPL A
累加器求反
1
12
RL A
累加器循环左移
1
12
RLC A
累加器带进位循环左移
1
12
RR A
累加器循环右移
1
12
RRC A
累加器带进位循环右移
1
12
4、控制转移类指令
助记符
功能说明
字节数
振荡周期
ACALL addr11
绝对短调用子程序
2
24
LACLL addr16
长调用子程序
3
24
RET
子程序返回
1
24
RETI
中断返回
1
24
AJMP addr11
绝对短转移
2
24
LJMP addr16
长转移
3
24
SJMP rel
相对转移
2
24
JMP @A+DPTR
相对于DPTR的间接转移
1
24
JZ rel
累加器为零转移
2
24
JNZ rel
累加器非零转移
2
24
CJNE A,direct,rel
累加器与直接地址单元比较,不等则转移
3
24
CJNE A,#data8,rel
累加器与8位立即数比较,不等则转移
3
24
CJNE Rn,#data8,rel
寄存器与8位立即数比较,不等则转移
3
24
CJNE @Ri,#data8,rel
间接RAM单元,不等则转移
3
24
DJNZ Rn,rel
寄存器减1,非零转移
3
24
DJNZ direct,rel
直接地址单元减1,非零转移
3
24
5、布尔变量操作类指令
助记符
功能说明
字节数
振荡周期
CLR C
清进位位
1
12
CLR bit
清直接地址位
2
12
SETB C
置进位位
1
12
SETB bit
置直接地址位
2
12
CPL C
进位位求反
1
12
CPL bit
直接地址位求反
2
12
ANL C,bit
进位位和直接地址位相“与”
2
24
ANL C,bit
进位位和直接地址位的反码相“与”
2
24
ORL C,bit
进位位和直接地址位相“或”
2
24
ORL C,bit
进位位和直接地址位的反码相“或”
2
24
MOV C,bit
直接地址位送入进位位
2
12
MOV bit,C
进位位送入直接地址位
2
24
JC rel
进位位为1则转移
2
24
JNC rel
进位位为0则转移
2
24
JB bit,rel
直接地址位为1则转移
3
24
JNB bit,rel
直接地址位为0则转移
3
24
PAGE
7