51单片机汇编指令详解.docx
《51单片机汇编指令详解.docx》由会员分享,可在线阅读,更多相关《51单片机汇编指令详解.docx(38页珍藏版)》请在冰豆网上搜索。
51单片机汇编指令详解
1、XCHA,Rn
指令名称:
寄存器寻址字节交换指令
指令代码:
C8H~CFH
指令功能:
寄存器寻址字节
操作内容:
(A)交换(Rn);n=0~7
字节数:
1
机器周期:
1
2、XCHA,direct
指令名称:
直接寻址字节交换指令
指令代码:
C5H
指令功能:
累加器内容与内部RAM低128单元或专用寄存器内容交换
操作内容:
(A)交换(direct)
字节数:
2
机器周期:
1
3、XCHA,@Ri
指令名称:
间接寻址字节交换指令
指令代码:
C6H~C7H
指令功能:
累加器内容与内部RAM低128单元内容交换
操作内容:
(A)交换((Ri));i=0,1
字节数:
1
机器周期:
1
4、XCHDA,@Ri
指令名称:
半字节交换指令
指令代码:
D6H~D7H
指令功能:
累加器内容低4位与内部RAM低128单元低4位交换
操作内容:
(A)3~0交换((Ri))3~0;i=0,1
字节数:
1
机器周期:
1
5、XRLA,Rn
指令名称;逻辑异或操作指令
指令代码:
68H~6FH
指令功能:
累加器内容与寄存器内容进行逻辑异或操作
操作内容:
A<-(A)异或(Rn);n=0~7
字节数:
1
机器周期:
1
6、XRLA,direct
指令名称:
逻辑异或操作指令
指令代码:
65H
指令功能:
累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作
操作内容:
A<-(A)异或(direct)
字节数:
2
机器周期:
1
7、XRLA,@Ri
指令名称:
逻辑异或指令
指令代码:
66H~67H
指令功能:
累加器与内部RAM低128单元内容进行逻辑异或操作
操作内容:
A<-(A)异或((Ri));i=0,1
字节数:
1
机器周期:
1
8、XRLA,#data
指令名称:
逻辑异或指令
指令代码:
64H
指令功能:
累加器内容与立即数进行逻辑异或操作
操作内容:
A1?
/FONT>(A)异或data
字节数:
2
机器周期:
1
9、XRLdirect,A
指令名称:
逻辑异或操作指令
指令代码:
62H
指令功能:
累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作
操作内容:
direct一(direct)异或(A)
字节数:
2
机器周期:
1
10、XRLdirect,#data
指令名称:
逻辑异或操作指令
指令代码:
63H
指令功能:
内部RAM低128单元或专用寄存器内容与立即数进行逻辑异或操作
操作内容:
direct<-(direct)异或data
字节数:
3
机器周期:
2
以R开头的指令有6条,分别为:
RET
RETI
RLA
RLCA
RRA
RRCA
1、RET
指令名称:
子程序返回指令
指令代码:
22H
指令功能:
子程序返回
操作内容:
PC15~8<-((SP))
SP<-(SP)-1
PC7~0<-((SP))
SP<-(SP)-1
字节数:
1
机器周期:
2
2、RETI
指令名称:
中断返回指令
指令代码:
32H
指令功能:
中断服务程序返回
操作内容’:
PC15?
/FONT>8<-((SP))
SP<-(SP)-l
PC7~0<-((SP))
SP<-(SP)-1
字节数:
1
机器周期:
2
3、RLA
指令名称:
循环左移指令
指令代码:
23H
指令功能:
累加器内容循环左移一位
操作内容:
An+1<-(An);n=0~6
A0<-(A7)
字节数:
1
机器周期:
1
4、RLCA
指令名称:
带进位循环左移指令
指令代码:
33H
指令功能:
累加器内容连同进位标志位循环左移一位
操作内容:
An-1<-(An);n=0~6
A0<-(C)
C<-(A7)
字节数:
1
机器周期:
1
5、RRA
指令名称:
循环右移指令
指令代码:
03H
指令功能:
累加器内容循环右移一位
操作内容:
An<-(An+1);n=0~6
A7<-(A0)
字节数:
1
机器周期:
1
6、RRCA
指令名称:
带进位循环右移指令
指令代码:
13H
指令功能:
累加器内容连同进位标志位循环右移一位
操作内容:
An<-(An+1);n=0~6
A7<-(C)
C<-(A0)
字节数:
1
机器周期:
1
1、SETBc
指令名称:
进位标志置位指令
指令代码:
D.H
指令功能:
进位标志位置位
操作内容:
C<-1
字节数:
1
机器周期:
1
2、SETBbit
指令名称:
直接寻址位置位指令
指令代码:
D2H
指令功能:
内部RAM可寻址位或专用寄存器指定位置位
操作内容:
bit<-1
字节数:
2
机器周期:
1
3、SJMPrel
指令名称:
短转移指令
指令代码:
80H
指令功能:
按指令提供的偏移量计算转移的目的地址,实现程序的无条件相对转移;
操作内容:
PC<-(PC)+2
PC<-(PC)+rel
字节数:
2
机器周期:
2
使用说明:
偏移量是8位二进制补码数,可实现程序的双向转移,其转移范围是(PC一126)一(PC+129)。
其中PC值为本指令的地址。
4、SUBBA,Rn
指令名称:
寄存器寻址带进位减法指令
指令代码:
98H~9FH
指令功能:
累加器内容减寄存器内容和进位标志位内容
操作内容:
A<-(A)-(Rn)-(C);n=0~7
字节数:
1
机器周期:
1
影响标志位:
当够减时,进位标志位复位;不够减时,进位标志置位。
当位3发生借位时,AC置位;否则AC复位。
当位6及位7不同时发生借位时,OV置位;否则OV复位。
5、SUBBA,direct
指令名称:
直接寻址带进位减法指令
指令代码:
95H
指令功能:
累加器内容减内部RAM低128单元或专用寄存器和进位标志位内容
操作内容:
A<-(A)-(diret)-(C)
字节数:
2
机器周期:
1
影响标志位:
同SUBBA,Rn指令(序号97)
6、SUBBA,@Ri
指令名称:
间接寻址带进位减法指令
指令代码:
96H~97H
指令功能:
累加器内容减内部RAM低128单元内容及进位标志位内容
操作内容:
A<-(A)-((Ri))-(C);i=0,1
字节数:
1
机器周期:
1
影响标志位:
同SUBBA,Rn指令(序号97)
7、SUBBA,#data
指令名称:
立即数带进位减法指令
指令代码:
94H
指令功能:
累加器内容减立即数及进位标志内容
操作内容:
A<-(A)-data-(C)
字节数:
2
机器周期:
1
影响标志位:
同SUBBA,Rn指令(序号97)
8、SWAPA
指令名称:
累加器高低半字节交换指令
指令代码:
C4H
指令功能:
累加器内容的高4位与低4位交换
操作内容:
(A)7?
/FONT>4交换(A)3?
/FONT>0
字节数:
1
机器周期:
1
1、NOP
指令名称:
空操作指令
指令代码;00H
指令功能:
不执行任何操作,常用于产生一个机器周期的时间延迟。
操作内容:
PC<-(PC)+l
字节数:
1
机器周期:
1
1、ORLA,Rn
指令名称:
逻辑或操作指令
指令代码:
48H~4FH
指令功能:
累加器内容与寄存器内容进行逻辑或操作
操作内容:
A1<-(A)|(Rn),n=0~7
字节数:
1
机器周期:
1
2、ORLA,direct
指令名称:
逻辑或操作指令
指令代码:
45H
操作内容:
A<-(A)|(direct)
字节数:
2
机器周期:
1
3、ORLA,@Ri
指令名称:
逻辑或操作指令
指令代码:
46H~47H
指令功能:
累加器内容与内部RAM低128单元内容进行逻辑或操作
操作内容:
A<-(A)|((Ri));i=0,1
字节数:
1
机器周期:
1
4、ORLA,#data
指令名称:
逻辑或操作指令
指令代码:
44H
指令功能:
累加器内容与立即数进行逻辑或操作
操作内容:
A<-(A)|data
字节数:
2
机器周期:
1
5、ORLdirect,A
指令名称:
逻辑或操作指令
指令代码:
42H
指令功能:
内部RAM低128单元或专用寄存器内容与累加器内容进行逻辑或操作
操作内容:
direct<-(direct)|(A)
字节数:
2
机器周期:
1
6、ORLdirect,#data
指令名称:
逻辑或操作指令
指令代码:
43H
指令功能:
内部RAM低128单元或专用寄存器内容与立即数进行逻辑或操作。
操作内容:
direct<-(direct)|data
字节数:
3
机器周期:
2
7、ORLC,bit
指令名称:
位逻辑或操作指令
指令代码:
72H
指令功能:
累加位C状态与内部RAM可寻址位或专用寄存器指定位进行逻辑或操作
操作内容:
C<-(C)|(bit)
字节数:
2
机器周期:
2
8、ORLC,/bit
指令名称:
位反逻辑或操作指令
指令代码:
A0H
指令功能:
累加位C状态与内部RAM可寻址位或专用寄存器指定位的反进行逻辑或操作
操作内容:
C<-(C)|(bit非)
字节数:
2
机器周期:
2
使用说明:
指定位的状态取反后进行逻辑或操作,但并不改变指定位的原来状态。
1、POPdirect
指令名称:
出栈指令
指令代码:
D0H
指令功能:
堆栈栈顶单元的内容送内部RAM低128单元或专用寄存器
操作内容:
direct<-(SP)
SP<-(SP)-1
字节数:
2
机器周期:
2
2、PUSHdirect
指令名称:
进栈指令
指令代码:
C0
指令功能:
内部RAM低128单元或专用寄存器内容送堆栈栈顶单元
操作内容:
SP<-(SP)+1
(SP)<-(direct)
字节数:
2
机器周期:
2
1、MOVA,Rn
指令名称:
寄存器数据传送指令
指令代码:
E8H~EFH
指令功能:
寄存器内容送累加器
操作内容:
A<-(Rn),n=0~7
字节数:
1
机器周期:
1
2、MOVA,direct
指令名称:
直接寻址数据传送指令
指令代码:
E5H
指令功能:
内部RAM低126单元或专用寄存器内容送累加器
操作内容:
A<-(direct)
字节数:
2
机器周期:
1
3、MOVA,@Ri
指令名称:
间接寻址数据传送指令
指令代码:
E6H~E7H
指令功能:
内部RAM低128单元内容送累加器
操作内容:
A<-((Ri)),i=0,1
字节数:
1
机器周期:
1
4、MOVA,#data
指令名称:
立即数据传送指令
指令代码:
74H
指令功能:
立即数送累加器
操作内容:
A<-data
字节数:
2
机器周期:
1
5、MOVRn,A
指令名称:
累加器数据传送指令
指令代码:
F8H~FFH
指令功能:
累加器内容送寄存器
操作内容:
Rn<-(A)
字节数:
1
机器周期:
1
6、MOVRn,direct
指令名称:
直接寻址数据传送指令
指令代码:
A8H~AFH
指令功能:
内部RAM低128单元或专用寄存器内容送累加器
操作内容:
Rn<-(direct),n=0~7
字节数:
2
机器周期:
2
7、MOVRn,#data
指令名称:
立即数据传送指令
指令代码:
78H~7FH
指令功能:
立即数送寄存器
操作内容:
Rn<-data,n=0~7
字节数:
2
机器周期:
1
8、MOVdirect,A
指令名称:
累加器数据传送指令
指令代码:
F5H
指令功能:
累加器内容送内部RAM低128单元或专用寄存器
操作内容:
direct<-(A)
字节数:
2
机器周期:
1
9、MOVdirect,Rn
指令名称:
寄存器数据传送指令
指令代码:
88H~8FH
指令功能:
寄存器内容送内部RAM低128单元或专用寄存器
操作内容:
direct<-(Rn),n=0~7
字节数:
2
机器周期:
2
10、MOVdirect2,direct1
指令名称:
直接寻址数据传送指令
指令代码:
85H
指令功能:
内部RAM低123单元或专用寄存器之间的相互传送
操作内容:
direct2<-(direct1)
字节数:
3
机器周期:
2
11、MOVdirect,@Ri
指令名称:
间接寻址数据传送指令
指令代码:
86H~87H
指令功能:
内部RAM低128单元内容送内部RAM低128单元或专用寄存器
操作内容:
direct<-((Ri)),i=0,1
字节数:
2
机器周期:
2
12、MOVdirect,#data
指令名称:
立即数传送指令
指令代码:
75H
指令功能:
立即数送内部RAM低128单元或专用寄存器
操作内容:
direct<-data
字节数:
3
机器周期:
2
13、MOV@Ri,A
指令名称:
累加器数据传送指令
指令代码:
F6H~F7H
指令功能:
累加器内容送内部RAM低128单元
操作内容:
(Ri)<-(A),i=0,1
字节数:
1
机器周期:
1
14、MOV@Ri,direct
指令名称:
直接寻址数据传送指令
指令代码:
A6H~A7H
指令功能:
内部RAM低128单元或专用寄存器内容送内部RAM低128单元
操作内容:
(Ri)<-(direct),i=0,1
字节数:
2
机器周期:
2
15、MOV@Ri,data
指令名称:
立即数传送指令
指令代码:
76H~77H
指令功能:
立即数送内部RAM低128单元
操作内容:
(Ri)<-data,i=0,1
字节数:
2
机器周期:
1
16、MOVC,bit
指令名称:
位数据传送指令
指令代码:
A2H
指令功能:
内部RAM可寻址位或专用寄存器的位状态送累加位C
操作内容:
C<-(bit)
字节数:
2
机器周期:
1
17、MOVbit,C
指令名称:
累加位数据传送指令
指令代码:
92H
指令功能:
累加器状态送内部RAM可寻址位或专用寄存器的指定位
操作内容:
bit<-(C)
字节数:
2
机器周期:
2
18、MOVDPTR,#datal6
指令名称:
十六位数据传送指令
指令代码:
90H
指令功能:
十六位立即数送数据指针
操作内容:
DPH<-datal5~8
DPL<-data7~0
字节数:
3
机器周期:
2
19、MOVCA,@A+DPTR
指令名称:
程序存储器读指令
指令代码:
93H
指令功能:
读程序存储器单元内容送累加器
操作内容:
A<-((A)+(DPTR))
字节数:
1
机器周期:
2
使用说明:
变址寄存器A内容加基址寄存器DPTR内容时,低8位产生的进位直接加到高位,不影响进位标志。
20、MOVCA,@A+PC
指令名称:
程序存储器读指令
指令代码:
83H
指令功能:
读程序存储器单元内容送累加器
操作内容:
A<-((A)+(PC))
字节数:
1
机器周期:
2
使用说明:
同MOVCA,@A+DPTR指令(序号70)
21、MOVXA,@Ri
指令名称:
寄存器间接寻址外部RAM读指令
指令代码:
E2H~E3H
指令功能:
读外部RAM低256单元数据送累加器
字节数:
1
机器周期:
2
22、MOVXA,@DPTR
指令名称:
数据指针间接寻址外部RAM读指令
指令代码:
E0H
指令功能:
读外部RAM单元数据送累加器
操作内容:
A1<-((DPTR))
字节数:
1
机器周期:
2
23、MOVX@Ri,A
指令名称:
寄存器间接寻址外部RAM写指令
指令代码:
F2H~F3H
指令功能:
把累加器内容写入外部RAM低256单元
操作内容:
(Ri)<-(A),i=1,0
字节数:
1
机器周期:
2
24、MOVX@DPTR,A
指令名称:
数据指针间接寻址外部RAM写指令
指令代码:
F0H
指令功能:
把累加器内容写入外部RAM单元
操作内容:
(DPTR)<-(A)
字节数:
1
机器周期:
2
25、MULAB
指令名称:
乘法指令
指令代码:
A4H
指令功能:
实现8位无符号数乘法运算。
两个乘数分别放在累加器A和寄存器B中。
乘积
为16位,低8位在B中,高8位在A中。
操作内容:
AB<-(A)×(B)
字节数:
1
机器周期:
4
影响标志位:
进位标志复位。
若乘积大于255,则OV标志置位;否则复位。
以J开头的指令有8条,分别为:
JBbit,rel
JBCbit,rel
JCrel
JMP@A+DPTR
JNBbit,rel
JNCrel
JNZrelJZrel
1、JBbit,rel
指令名称:
位条件转移指令。
指令代码:
20H
指令功能:
根据指定位的状态,决定程序是否转移。
若为1则转移;否则顺序执行。
操作内容:
若(bit)=1,则PC<-(PC)+3+rel
若(bit)≠1,则PC<-(PC)+3
字节数:
3
机器周期:
2
2、JBCbit,rel
指令名称:
位条件转移清0指令
指令代码:
10H
指令功能:
对指定位的状态进行测试。
若为1,则把该位清0并进行转移;否则程序顺序执行。
操作内容:
若(bit)=1,则PC<-(PC)+3+rel,bit<-0
若(bit)≠1,则PC<-(PC)+3
字节数:
3
机器周期:
2
3、JCrel
指令名称:
累加位条件转移指令
指令代码:
40H
指令功能:
根据累加位(C)的状态决定程序是否转移,若为1则转移,否则顺序执行。
操作内容:
若(C)=1,则PC<-(PC)+2+rel
若(C)≠1,则PC<-(PC)+2
字节数:
2
机器周期:
2
4、JMP@A+DPTR
指令名称:
无条件间接转移指令
指令代码:
72H
指令功能:
A内容与DPTR内容相加作为转移目的地址,进行程序转移。
操作内容:
PC<-(A)+(DPTR)
字节数:
1
机器周期;2
5、JNBbit,rel
指令名称:
位条件转移指令
指令代码:
30H
指令功能:
根据指定位的状态,决定程序是否转移。
若为0则转移;否则顺序执行。
操作内容:
若(bit)=0,则PC<-(PC)+3+rel
若(bit)≠0,则PC<-(PC)+3
字节数:
3
机器周期:
2
6、JNCrel
指令名称:
累加位条件转移指令
指令代码:
50H
指令功能:
根据累加位(C)的状态决定程序是否转移。
若为o则转移;否则顺序执行。
操作内容:
若(C)=0,则PC<-(PC)+2+rel
若(C)≠0,则PC<-(PC)+2
字节数:
2
机器周期:
2
7、JNZrel
指令名称:
判0转移指令
指令代码:
70H
指令功能:
累加位(A)的内容不为0,则程序转移;否则程序顺序执行。
操作内容:
若(A)≠0,则PC<-(PC)+2+rel
若(A)=0,则PC<-(PC)+2
字节数:
2
机器周期:
2
8、JZrel
指令名称:
判0转移指令
指令代码:
60H
指令功能:
累加位(A)的内容为o,则程序转移;否则程序顺序执行。
操作内容:
若(A)=0,则PC<-(PC)+2+rel
若(A)≠0,则PC<-(PC)+2
字节数:
2
机器周期:
2
1、LCALLaddr16
指令名称:
长调用指令
指令代码:
12H
指令功能:
按指令给定地址进行子程序调用
操作内容:
PC<-(PC)+3
SP<-(SP)+1
(SP)<-(PC)7~0
SP<-(SP)+1
(SP)<-(PC)15~8
PC<-addrl6
字节数:
3
机器周期:
2
使用说明:
在64KB的范围内调用子程序
2、LJMPaddrl6
指令名称:
长转移指令
指令代码:
02H
指令功能:
使程序按指定地址进行无条件转移
操作内容:
PC<-addrl6
字节数:
3
机器周期:
2
1、DAA
指令名称:
十进制调整指令
指令代码:
D4H
指令功能:
对BCD码加法运算的结果进行有条件的修正
操作内容:
若(A)3~0>9|(AC)=1,则A3~0<-(A)3~0+6
若(A)7~4>9|(C)=1,则A7~4<-(A)7~4+6
若(A)7~4=9^(A)3~0>9,则A7~4<-(A)7~4+6
字节数:
1
机器周期:
1
使用说明:
DA指令不影响溢出标志
2、DECA
指令名称:
累加器减1指令
指令代码:
14H
指令功能:
累加器内容减1
操作内容:
A<-(A)-1
字节数:
1
机器周期:
1
3、DECRn
指令名称:
寄存器减1指令
指令代码:
18H~1FH
指令功能:
寄存器内容减1
操作内容:
Rn<-(Rn)-1,n=0~7
字节数:
1
机器周期:
1
4、DECdirect
指令名称:
直接寻址减1指令
指令代码:
15H
指令功能:
内部RAM低128单元及专用寄存器内容减1
操作内容:
direct<-(direct)-1
字节数:
2
机器周期:
1
5、DEC@Ri
指令名称:
间接寻址减1指令
指令代码:
16H~17H
指令功能:
内部RAM低128单元内容减1
操作内容:
(Ri)<-((Ri))-1,i=0,1
字节数:
1
机器周期:
1
6、DIVAB
指令名称:
无符号数除法指令;
指令代码:
84H
指令功能:
A的内容被B的内容除。
指令执行后,商存于A中,余数存于B中。
操作内容:
A<-(A)/(B)的商
B<-(A)/(B)的余数
字节数:
1
机器周期:
4
影响标志位:
C被清0;若B=00H,除法无法进行,并使OV=1;否则OV=0。
7、DJNZRn,rel
指令名称:
寄存器减1条件转移指令
指令代码:
D8H~DFH
指令功能:
寄存器内容减1。
不为0转移;为0顺序执行。
操作内容:
Rn<-(Rn)-l,n=0~7
若(Rn)≠0,则PC<-(PC)+2+rel
若(Rn)=0,则PC<-(PC)+2
字节数:
2
机器周期:
2
8、DJNZdirect,rel
指令名称:
直接寻址单元减1条件转移指令
指令代码:
D5H
指令功能:
内部RAM低128单元内容减1。
不为0转移;为0顺序执行。
操作内容:
direct<-(direct)-1
若(direct)≠0,则PC<-(PC)+3+rel
若(direct)=0,则PC<-(PC)+3
字节数:
3
机器周期:
2
1、INCA
指令名称:
累加器加1指令
指令代码:
04H
指令功能:
累加器内容加1
操作内容:
A<-(A)+1
字节数:
1
机器周期:
1
2、INCRn
指令名称:
寄存器加1指令
指令代码:
08H~0FH
指令功能:
寄存器内容加1
操作内容:
Rn<-(Rn)+1,n=0~7
字节数:
1
机器周期:
1
3、INCdirect
指令名称:
直接寻址单元加1指令
指令代码:
05H
指令功能:
内部BAM低128单元或专用寄存器内容加1
操作内容:
direct<-(direct)+1
字节数:
2
机器周期:
1
4、INC@Ri
指令名称:
间接寻址单元加1指令
指令代码:
06H~07H
指令功能: