文档视界 最新最全的文档下载
当前位置:文档视界 › 经典的51单片机汇编指令详解

经典的51单片机汇编指令详解

经典的51单片机汇编指令详解
经典的51单片机汇编指令详解

MCS-51系列单片机指令以A开头的指令有18条,分别:

ACALL addr11

ADD A,Rn

ADD A,direct ADD A,@Ri

ADD A,#data

ADDC A,Rn

ADDC A,direct

ADDC A,@Ri ADDC A,#data

AJMP addr11

ANL A,Rn

ANL A,direct

ANL A,@Ri

ANL A,#data

ANL direct,A ANL direct,#data

以X开头的指令有10条,分别为:

XCH A,Rn

XCH A,direct

XCH A,@Ri

XCHD A,@Ri

XRL A,Rn

XRL A,direct

XRL A,@Ri

XRL A,#data

XRL direct,A

XRL direct,#data

1、XCH A,Rn

指令名称:寄存器寻址字节交换指令

指令代码:C8H~CFH

指令功能:寄存器寻址字节

操作内容:(A)交换(Rn);n=0~7

字节数: 1

机器周期:1

2、XCH A,direct

指令名称:直接寻址字节交换指令

指令代码:C5H

指令功能:累加器内容与内部RAM低128单元或专用寄存器内容交换操作内容:(A)交换(direct)

字节数: 2

3、XCH A,@Ri

指令名称:间接寻址字节交换指令

指令代码:C6H~C7H

指令功能:累加器内容与内部RAM低128单元内容交换

操作内容:(A)交换((Ri)); i=0,1

字节数: 1

机器周期:1

4、XCHD A,@Ri

指令名称:半字节交换指令

指令代码:D6H~D7H

指令功能:累加器内容低4位与内部RAM低128单元低4位交换

操作内容:(A)3~0交换((Ri))3~0;i=0,1

字节数: 1

机器周期:1

5、XRL A,Rn

指令名称;逻辑异或操作指令

指令代码:68H~6FH

指令功能:累加器内容与寄存器内容进行逻辑异或操作

操作内容:A<-(A)异或(Rn); n=0~7

字节数: 1

机器周期:1

6、XRL A,direct

指令名称:逻辑异或操作指令

指令代码:65H

指令功能:累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容:A<-(A)异或(direct)

字节数: 2

机器周期:1

7、XRL A,@Ri

指令名称:逻辑异或指令

指令代码:66H~67H

指令功能:累加器与内部RAM低128单元内容进行逻辑异或操作

操作内容:A<-(A)异或((Ri)); i=0,1

机器周期:1

8、XRL A,#data

指令名称:逻辑异或指令

指令代码:64H

指令功能:累加器内容与立即数进行逻辑异或操作

操作内容:A1?/FONT>(A)异或data

字节数: 2

机器周期:1

9、XRL direct,A

指令名称:逻辑异或操作指令

指令代码:62H

指令功能:累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容:direct一(direct)异或(A)

字节数: 2

机器周期:1

10、XRL direct,#data

指令名称:逻辑异或操作指令

指令代码:63H

指令功能:内部RAM低128单元或专用寄存器内容与立即数进行逻辑异或操作

操作内容:direct<-(direct)异或data

字节数: 3

机器周期:2

以R开头的指令有6条,分别为:

RET

RETI

RL A

RLC A

RR A

RRC A

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、RL A

指令名称:循环左移指令

指令代码:23H

指令功能:累加器内容循环左移一位

操作内容:An+1<-(An); n=0~6

A0<-(A7)

字节数: 1

机器周期:1

4、RLC A

指令名称:带进位循环左移指令

指令代码:33H

指令功能:累加器内容连同进位标志位循环左移一位操作内容:An-1<-(An); n=0~6

A0<-(C)

C<-(A7)

字节数: 1

机器周期:1

5、RR A

指令名称:循环右移指令

指令代码:03H

指令功能:累加器内容循环右移一位

操作内容:An<-(An+1);n=0~6

A7<-(A0)

字节数: 1

机器周期:1

6、RRC A

指令名称:带进位循环右移指令

指令代码:13H

指令功能:累加器内容连同进位标志位循环右移一位操作内容:An<-(An+1);n=0~6

A7<-(C)

C<-(A0)

字节数: 1

机器周期:1

以S开头的指令有8条,分别为:

SETB c

SETB bit

SJMP rel

SUBB A,Rn

SUBB A,direct

SUBB A,@Ri

SUBB A,#data

SWAP A

1、SETB c

指令名称:进位标志置位指令

指令代码:D.H

指令功能:进位标志位置位

操作内容:C<-1

字节数: 1

机器周期:1

2、SETB bit

指令名称:直接寻址位置位指令

指令代码:D2H

指令功能:内部RAM可寻址位或专用寄存器指定位置位操作内容:bit<-1

字节数: 2

3、SJMP rel

指令名称:短转移指令

指令代码:80H

指令功能:按指令提供的偏移量计算转移的目的地址,实现程序的无条件相对转移;

操作内容:PC<-(PC)+2

PC<-(PC)+rel

字节数: 2

机器周期:2

使用说明:偏移量是8位二进制补码数,可实现程序的双向转移,其转移范围是(PC一126)一(PC+129)。其中PC值为本指令的地址。

4、SUBB A,Rn

指令名称:寄存器寻址带进位减法指令

指令代码:98H~9FH

指令功能:累加器内容减寄存器内容和进位标志位内容

操作内容:A<-(A)-(Rn)-(C); n=0~7

字节数: 1

机器周期:1

影响标志位:当够减时,进位标志位复位;不够减时,进位标志置位。当位3发生借位时,AC 置位;否则AC复位。当位6及位7不同时发生借位时,OV置位;否则OV复位。

5、SUBB A,direct

指令名称:直接寻址带进位减法指令

指令代码:95H

指令功能:累加器内容减内部RAM低128单元或专用寄存器和进位标志位内容

操作内容:A<-(A)-(diret)-(C)

字节数: 2

机器周期:1

影响标志位:同SUBB A,Rn指令(序号97)

6、SUBB A,@Ri

指令名称:间接寻址带进位减法指令

指令代码:96H~97H

指令功能:累加器内容减内部RAM低128单元内容及进位标志位内容

操作内容:A<-(A)-((Ri))-(C);i=0,1

字节数: 1

影响标志位:同SUBB A,Rn指令(序号97)

7、SUBB A,#data

指令名称:立即数带进位减法指令

指令代码:94H

指令功能:累加器内容减立即数及进位标志内容

操作内容:A<-(A)-data-(C)

字节数: 2

机器周期:1

影响标志位:同SUBB A,Rn指令(序号97)

8、SWAP A

指令名称:累加器高低半字节交换指令

指令代码:C4H

指令功能:累加器内容的高4位与低4位交换

操作内容:(A)7?/FONT>4交换(A)3?/FONT>0

字节数: 1

机器周期:1

以N开头的指令只有1条,就是:

1、NOP

指令名称:空操作指令

指令代码;00H

指令功能:不执行任何操作,常用于产生一个机器周期的时间延迟。操作内容:PC<-(PC)+l

字节数: 1

机器周期:1

以O开头的指令有8条,分别为:

ORL A,Rn

ORL A,direct

ORL A,@Ri

ORL A,#data

ORL direct,A

ORL direct,#data

ORL C,bit

ORL C,/bit

1、ORL A,Rn

指令名称:逻辑或操作指令

指令代码:48H~4FH

指令功能:累加器内容与寄存器内容进行逻辑或操作

操作内容:A1<-(A)|(Rn), n=0~7

字节数: 1

机器周期:1

2、ORL A,direct

指令名称:逻辑或操作指令

指令代码:45H

操作内容:A<-(A)|(direct)

字节数: 2

机器周期:1

3、ORL A,@Ri

指令名称:逻辑或操作指令

指令代码:46H~47H

指令功能:累加器内容与内部RAM低128单元内容进行逻辑或操作

操作内容:A<-(A)|((Ri)); i=0,1

字节数: 1

机器周期:1

4、ORL A,#data

指令名称:逻辑或操作指令

指令代码:44H

指令功能:累加器内容与立即数进行逻辑或操作

操作内容:A<-(A)|data

字节数: 2

机器周期:1

5、ORL direct,A

指令名称:逻辑或操作指令

指令代码:42H

指令功能:内部RAM低128单元或专用寄存器内容与累加器内容进行逻辑或操作操作内容:direct<-(direct)|(A)

字节数: 2

机器周期:1

6、ORL direct,#data

指令名称:逻辑或操作指令

指令代码:43H

指令功能:内部RAM低128单元或专用寄存器内容与立即数进行逻辑或操作。

操作内容:direct<-(direct)|data

字节数: 3

机器周期:2

7、ORL C,bit

指令名称:位逻辑或操作指令

指令代码:72H

指令功能:累加位C状态与内部RAM可寻址位或专用寄存器指定位进行逻辑或操作

操作内容:C<-(C)|(bit)

字节数: 2

机器周期:2

8、ORL C,/bit

指令名称:位反逻辑或操作指令

指令代码:A0H

指令功能:累加位C状态与内部RAM可寻址位或专用寄存器指定位的反进行逻辑或操作操作内容:C<-(C)|(bit非)

字节数: 2

机器周期:2

使用说明:指定位的状态取反后进行逻辑或操作,但并不改变指定位的原来状态。

以P开头的指令有2条,分别为:

POP direct

PUSH direct

1、POP direct

指令名称:出栈指令

指令代码:D0H

指令功能:堆栈栈顶单元的内容送内部RAM低128单元或专用寄存器

操作内容:direct<-(SP)

SP<-(SP)-1

字节数: 2

机器周期:2

2、PUSH direct

指令名称:进栈指令

指令代码:C0

指令功能:内部RAM低128单元或专用寄存器内容送堆栈栈顶单元操作内容:SP<-(SP)+1

(SP)<-(direct)

字节数: 2

机器周期:2

以M开头的指令有24条,分别为:

MOV A,Rn

MOV A,direct

MOV A,@Ri

MOV A,#data

MOV Rn,A

MOV Rn,direct

MOV Rn,#data

MOV direct,A

MOV direct,Rn

MOV direct2,direct1

MOV direct, @Ri

MOV direct,#data

MOV @Ri,A

MOV @Ri,direct

MOV @Ri,data

MOV C,bit

MOV bit,C

MOV DPTR,#datal6

MOVC A,@A+DPTR

MOVC A,@A+PC

MOVX A,@Ri

MOVX A,@DPTR

MOVX @Ri,A

MOVX @DPTR,A

MUL AB

1、MOV A,Rn

指令名称:寄存器数据传送指令

指令代码:E8H~EFH

指令功能:寄存器内容送累加器

操作内容:A<-(Rn), n=0~7

字节数: 1

机器周期:1

2、MOV A,direct

指令名称:直接寻址数据传送指令

指令代码:E5H

指令功能:内部RAM低126单元或专用寄存器内容送累加器操作内容:A<-(direct)

字节数: 2

机器周期:1

3、MOV A,@Ri

指令名称:间接寻址数据传送指令

指令代码:E6H~E7H

指令功能:内部RAM低128单元内容送累加器

操作内容:A<-((Ri)), i=0,1

字节数: 1

机器周期:1

4、MOV A,#data

指令名称:立即数据传送指令

指令代码:74H

指令功能:立即数送累加器

操作内容:A<-data

字节数: 2

机器周期:1

5、 MOV Rn,A

指令名称:累加器数据传送指令

指令代码:F8H~FFH

指令功能:累加器内容送寄存器

操作内容:Rn<-(A)

字节数: 1

机器周期:1

6、MOV Rn,direct

指令名称:直接寻址数据传送指令

指令代码:A8H~AFH

指令功能:内部RAM低128单元或专用寄存器内容送累加器操作内容:Rn<-(direct),n=0~7

字节数: 2

7、MOV Rn,#data

指令名称:立即数据传送指令

指令代码:78H~7FH

指令功能:立即数送寄存器

操作内容:Rn<-data,n=0~7

字节数: 2

机器周期:1

8、MOV direct,A

指令名称:累加器数据传送指令

指令代码:F5H

指令功能:累加器内容送内部RAM低128单元或专用寄存器

操作内容:direct<-(A)

字节数: 2

机器周期:1

9、MOV direct,Rn

指令名称:寄存器数据传送指令

指令代码:88H~8FH

指令功能:寄存器内容送内部RAM低128单元或专用寄存器

操作内容:direct<-(Rn), n=0~7

字节数: 2

机器周期:2

10、MOV direct2,direct1

指令名称:直接寻址数据传送指令

指令代码:85H

指令功能:内部RAM低123单元或专用寄存器之间的相互传送

操作内容:direct2<-(direct1)

字节数: 3

机器周期:2

11、MOV direct, @Ri

指令名称:间接寻址数据传送指令

指令代码:86H~87H

指令功能:内部RAM低128单元内容送内部RAM低128单元或专用寄存器操作内容:direct<-((Ri)),i=0,1

机器周期:2

12、MOV direct,#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、MOV C,bit

指令名称:位数据传送指令

指令代码:A2H

指令功能:内部RAM可寻址位或专用寄存器的位状态送累加位C

操作内容:C<-(bit)

字节数: 2

机器周期:1

17、MOV bit,C

指令名称:累加位数据传送指令

指令代码:92H

指令功能:累加器状态送内部RAM可寻址位或专用寄存器的指定位

操作内容:bit<-(C)

字节数: 2

机器周期:2

18、MOV DPTR,#datal6

指令名称:十六位数据传送指令

指令代码:90H

指令功能:十六位立即数送数据指针

操作内容:DPH<-datal5~8

DPL<-data7~0

字节数: 3

机器周期:2

19、MOVC A,@A+DPTR

指令名称:程序存储器读指令

指令代码:93H

指令功能:读程序存储器单元内容送累加器

操作内容:A<-((A)+(DPTR))

字节数: 1

机器周期:2

使用说明:变址寄存器A内容加基址寄存器DPTR内容时,低8位产生的进位直接加到高位,不影响进位标志。

20、MOVC A,@A+PC

指令名称:程序存储器读指令

指令代码:83H

指令功能:读程序存储器单元内容送累加器

操作内容:A<-((A)+(PC))

字节数: 1

机器周期:2

使用说明:同MOVC A,@A+DPTR指令(序号70)

21、MOVX A,@Ri

指令名称:寄存器间接寻址外部RAM读指令

指令代码:E2H~E3H

指令功能:读外部RAM低256单元数据送累加器

字节数: 1

机器周期:2

22、MOVX A,@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、MUL AB

指令名称:乘法指令

指令代码:A4H

指令功能:实现8位无符号数乘法运算。两个乘数分别放在累加器A和寄存器B中。乘积为16位,低8位在B中,高8位在A中。

操作内容:AB<-(A)×(B)

字节数: 1

机器周期:4

影响标志位:进位标志复位。若乘积大于255,则OV标志置位;否则复位。

以J开头的指令有8条,分别为:

JB bit,rel

JBC bit,rel

JC rel

JMP @A+DPTR

JNB bit,rel

JNC rel

JNZ rel JZ rel

1、JB bit,rel

指令名称:位条件转移指令。

指令代码:20H

指令功能:根据指定位的状态,决定程序是否转移。若为1则转移;否则顺序执行。

操作内容:若(bit)=1,则PC<-(PC)+3+rel

若(bit)≠1,则PC<-(PC)+3

字节数: 3

机器周期:2

2、JBC bit,rel

指令名称:位条件转移清0指令

指令代码:10H

指令功能:对指定位的状态进行测试。若为1,则把该位清0并进行转移;否则程序顺序执行。操作内容:若(bit)=1,则PC<-(PC)+3+rel,bit<-0

若(bit)≠1,则PC<-(PC)+3

字节数: 3

机器周期:2

3、JC rel

指令名称:累加位条件转移指令

指令代码: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、JNB bit,rel

指令名称:位条件转移指令

指令代码:30H

指令功能:根据指定位的状态,决定程序是否转移。若为0则转移;否则顺序执行。操作内容:若(bit)=0,则PC<-(PC)+3+rel

若(bit)≠0,则PC<-(PC)+3

字节数: 3

机器周期:2

6、JNC rel

指令名称:累加位条件转移指令

指令代码:50H

指令功能:根据累加位(C)的状态决定程序是否转移。若为o则转移;否则顺序执行。操作内容:若(C)=0,则PC<-(PC)+2+rel

若(C)≠0,则PC<-(PC)+2

字节数: 2

机器周期:2

7、JNZ rel

指令名称:判0转移指令

指令代码:70H

指令功能:累加位(A)的内容不为0,则程序转移;否则程序顺序执行。

操作内容:若(A)≠0,则PC<-(PC)+2+rel

若(A)=0,则PC<-(PC)+2

字节数: 2

机器周期:2

8、JZ rel

指令名称:判0转移指令

指令代码:60H

指令功能:累加位(A)的内容为o,则程序转移;否则程序顺序执行。

操作内容:若(A)=0,则PC<-(PC)+2+rel

若(A)≠0,则PC<-(PC)+2

字节数: 2

以L开头的指令就2条,分别为:

LCALL addr16 LJMP addrl6

1、LCALL addr16

指令名称:长调用指令

指令代码:12H

指令功能:按指令给定地址进行子程序调用操作内容:PC<-(PC)+3

SP<-(SP)+1

(SP)<-(PC)7~0

SP<-(SP)+1

(SP)<-(PC)15~8

PC<-addrl6

字节数: 3

机器周期:2

使用说明:在64KB的范围内调用子程序

2、LJMP addrl6

指令名称:长转移指令

指令代码:02H

指令功能:使程序按指定地址进行无条件转移操作内容:PC<-addrl6

字节数: 3

机器周期:2

以D开头的指令有8条,分别为:

DA A

DEC A

DEC Rn

DEC direct

DEC @Ri

DIV AB

DJNZ Rn,rel

DJNZ direct,rel

1、DA A

指令名称:十进制调整指令

指令功能:对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、DEC A

指令名称:累加器减1指令

指令代码:14H

指令功能:累加器内容减1

操作内容:A<-(A)-1

字节数: 1

机器周期:1

3、DEC Rn

指令名称:寄存器减1指令

指令代码:18H~1FH

指令功能:寄存器内容减1

操作内容:Rn<-(Rn)-1,n=0~7

字节数: 1

机器周期:1

4、DEC direct

指令名称:直接寻址减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

6、DIV AB

指令名称:无符号数除法指令;

指令代码:84H

指令功能:A的内容被B的内容除。指令执行后,商存于A中,余数存于B中。操作内容:A<-(A)/(B)的商

B<-(A)/(B)的余数

字节数: 1

机器周期:4

影响标志位:C被清0;若B=00H,除法无法进行,并使OV=1;否则OV=0。

7、DJNZ Rn,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、DJNZ direct,rel

指令名称:直接寻址单元减1条件转移指令

指令代码:D5H

指令功能:内部RAM低128单元内容减1。不为0转移;为0顺序执行。

操作内容:direct<-(direct)-1

若(direct)≠0,则PC<-(PC)+3+rel

若(direct)=0,则PC<-(PC)+3

字节数: 3

机器周期:2

以I开头的指令有5条,分别为:

INC A

INC Rn

INC direct

INC @Ri

INC DPTR

51单片机汇编指令速查表

51单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A, Rn 寄存器送累加器 1 1 MOV Rn,A 累加器送寄存器 1 1 MOV A ,@Ri 内部RAM单元送累加器 1 1 MOV @Ri ,A 累加器送内部RAM单元 1 1 MOV A ,#data 立即数送累加器 2 1 MOV A ,direct 直接寻址单元送累加器 2 1 MOV direct ,A 累加器送直接寻址单元 2 1 MOV Rn,#data 立即数送寄存器 2 1 MOV direct ,#data 立即数送直接寻址单元 3 2 MOV @Ri ,#data 立即数送内部RAM单元 2 1 MOV direct ,Rn 寄存器送直接寻址单元 2 2 MOV Rn ,direct 直接寻址单元送寄存器 2 2 MOV direct ,@Ri 内部RAM单元送直接寻址单元 2 2 MOV @Ri ,direct 直接寻址单元送内部RAM单元 2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元 3 2 MOV DPTR ,#data16 16位立即数送数据指针 3 2 MOVX A ,@Ri 外部RAM单元送累加器(8位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM单元(8位地址) 1 2 MOVX A ,@DPTR 外部RAM单元送累加器(16位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM单元(16位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC为基址) 1 2 XCH A ,Rn 累加器与寄存器交换 1 1 XCH A ,@Ri 累加器与内部RAM单元交换 1 1 XCHD A ,direct 累加器与直接寻址单元交换 2 1 XCHD A ,@Ri 累加器与内部RAM单元低4位交换 1 1 SWAP A 累加器高4位与低4位交换 1 1 POP direct 栈顶弹出指令直接寻址单元 2 2 PUSH direct 直接寻址单元压入栈顶 2 2 二、算术运算类指令 ADD A, Rn 累加器加寄存器 1 1

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

51单片机汇编指令集(附记忆方法)

51单片机汇编指令集 一、数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; 三、逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; 四、控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移;

51单片机汇编指令集(附记忆方法)

51 单片机汇编指令集 一、数据传送类指令( 7 种助记符) MOV(英文为Move :对内部数据寄存器RAM 和特殊功能寄存器SFR 的数据进行 传送; MOV Q Move Code )读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部 RAM 勺数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; 二、算术运算类指令( 8 种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加 1; DEC(Decrement) 减 1; MUL(Multiplication 、Multiply) 乘法; DIV(Division 、Divide) 除法; 三、逻辑运算类指令( 10 种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) SWAP (Swap) 低 4 位与高 4 位交换; 四、控制转移类指令( 17 种助记符) ACALL ( Absolute subroutine Call )子程序绝对调用; LCALL ( Long subroutine Call )子程序长调用; RET ( Return from subroutine )子程序返回; RETI ( Return from Interruption )中断返回; SJMP ( Short Jump )短转移; AJMP ( Absolute Jump )绝对转移; LJMP( Long Jump )长转移; CJNE (Compare Jump if Not Equal) 比较不相等则转移; DJNZ (Decreme nt Jump if Not Zero) 减1后不为0则转移; JZ (Jump if Zero) 结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移; JC (Jump if the Carry flag is set) 有进位则转移; JNC (Jump if Not Carry) 无进位则转移; JB (Jump if the Bit is set) 位为1则转移; JNB (Jump if the Bit is Not set) 位为0则转移; 带进位循环左移; 带进位循环右移;

51单片机常用汇编语言助记符英文全称

51单片机常用汇编语言助记符英文全称 (1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1;DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零;CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用;

(完整版)51单片机汇编指令(全)

指令中常用符号说明 Rn当前寄存器区的8个工作寄存器R0~R7(n=0~7) Ri当前寄存器区可作为地址寄存器的2个工作寄存器R0和R1(i=0,1) Direct8位内部数据寄存器单元的地址及特殊功能寄存器的地址 #data表示8位常数(立即数) #data16表示16位常数 Add16表示16位地址 Addr11表示11位地址 Rel8位代符号的地址偏移量 Bit表示位地址 @间接寻址寄存器或基址寄存器的前缀 ( )表示括号中单元的内容 (( ))表示间接寻址的内容 指令系统 数据传送指令(8个助记符) 助记符中英文注释 MOV Move 移动 MOV A , Rn;Rn→A,寄存器Rn的内容送到累加器A MOV A , Direct;(direct)→A,直接地址的内容送A MOV A ,@ Ri;(Ri)→A,RI间址的内容送A MOV A , #data;data→A,立即数送A MOV Rn , A;A→Rn,累加器A的内容送寄存器Rn MOV Rn ,direct;(direct)→Rn,直接地址中的内容送Rn MOV Rn , #data;data→Rn,立即数送Rn MOV direct , A;A→(direct),累加器A中的内容送直接地址中 MOV direct , Rn;(Rn)→direct,寄存器的内容送到直接地址 MOV direct , direct;(direct)→direct,直接地址的内容送到直接地址 MOV direct , @Ri;((Ri))→direct,间址的内容送到直接地址 MOV direct , #data;8位立即数送到直接地址中 MOV @Ri , A;(A)→@Ri,累加器的内容送到间址中 MOV @Ri , direct;direct→@Ri,直接地址中的内容送到间址中 MOV @Ri , #data; data→@Ri ,8位立即数送到间址中 MOV DPTR , #data16;data16→DPTR,16位常数送入数据指针寄存器,高8位送入DPH,低8位送入DPL中(单片机中唯一一条16位数据传送指令) (MOV类指令共16条)

第3章-MCS-51系列单片机的指令系统和汇编语言程序范文

第3章MCS一51系列单片机的指令系统 和汇编语言程序 3·1汇编指令 3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。 3·1·2请总结: (1)汇编语言程序的优缺点和适用场合。 (2)学习微机原理课程时,为什么一定要学汇编语言程序? 3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象与寻址范围。 3·1·4要访问片内RAM,可有哪几种寻址方式? 3·1·5要访问片外RAM,有哪几种寻址方式? 3·1·6要访问ROM,又有哪几种寻址方式? 3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。 3·1·8试分别针对51子系列与52子系列,说明MOV A,direct指令与MOV A,@Rj 指令的访问范围。 3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM? 3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。3·1·11请选用指令,分别达到下列操作: (1)将累加器内容送工作寄存器R6. (2)将累加器内容送片内RAM的7BH单元。 (3)将累加器内容送片外RAM的7BH单元。 (4)将累加器内容送片外RAM的007BH单元。 (5)将ROM007BH单元内容送累加器。 3·1·12 区分下列指令的不同功能: (l)MOV A,#24H 与MOV A.24H (2)MOV A,R0与MOV A,@R0 (3)MOV A,@R0与MOVX A,@R0 3·1·13设片内RAM 30H单元的内容为40H; 片内RAM 40H单元的内容为l0H; 片内RAM l0H单元的内容为00H; (Pl)=0CAH。 请写出下列各指令的机器码与执行下列指令后的结果(指各有关寄存器、RAM单元与端口的内容)。 MOV R0,#30H MOV A,@R0 MOV RI,A MOV B,@Rl MOV @R0,Pl MOV P3,Pl MOV l0H,#20H MOV 30H,l0H

51单片机汇编指令

按功能分为五大类: (1)数据传送类指令(7种助记符) MOV(Move)对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移;

AT89S51单片机实例35例汇编+C语言对照带电路图及说明-闪烁灯

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

常用51单片机汇编指令

常用单片机汇编指令: 1 .MOV A,Rn寄存器内容送入累加器 2 .MOV A,direct 直接地址单元中的数据送入累加器 3 .MOV A,@Ri (i=0,1) 间接RAM中的数据送入累加器 4 .MOV A,#data 立即数送入累加器 5 .MOV Rn,A累加器内容送入寄存器 6 .MOV Rn,direct 直接地址单元中的数据送入寄存器 7 .MOV Rn,#data 立即数送入寄存器 8 .MOV direct,A 累加器内容送入直接地址单元 9 .MOV direct,Rn 寄存器内容送入直接地址单元 10. MOV direct,direct 直接地址单元中的数据送入另一个 直接地址单元 11 .MOV direct,@Ri (i=0,1) 间接RAM中的数据送入直接地址单元 12 MOV direct,#data 立即数送入直接地址单元 13 .MOV @Ri,A (i=0,1) 累加器内容送间接RAM单元 14 .MOV@Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元 15 .MOV @Ri,#data (i=0,1) 立即数送入间接RAM单元 16 .MOV DPTR,#data16 16 位立即数送入地址寄存器 17 .MOVC A,@A+DPTR以DPTR^基地址变址寻址单元中的数 据送入累加器

18 .MOVC A,@A+PC以PC为基地址变址寻址单元中的数据送入累加器 19 .MOVX A,@Ri (i=0,1) 外部RAM(8位地址)送入累加器 20 .MOVX A,@DPTR外部RAM(16位地址)送入累加器 21 .MOVX @Ri,A (i=0,1) 累计器送外部RAM(8位地址) 22 .MOVX @DPTR,A累计器送外部RAM( 16位地址) 23 .PUSH direct 直接地址单元中的数据压入堆栈 24 .POP direct 弹栈送直接地址单元 25 .XCH A,Rn 寄存器与累加器交换 26 .XCH A,direct 直接地址单元与累加器交换 27 .XCH A,@Ri (i=0,1) 间接RAM与累加器交换 28 .XCHD A,@Ri (i=0,1) 间接RAM的低半字节与累加器交换算术操作类指令: 1. ADD A,Rn 寄存器内容加到累加器 2 .ADD A,direct 直接地址单元的内容加到累加器 3 A.DD A,@Ri (i=0,1) 间接ROM的内容加到累加器 4 .ADD A,#data 立即数加到累加器 5 .ADDC A,Rn寄存器内容带进位加到累加器 6 .ADDC A,direct 直接地址单元的内容带进位加到累加器 7 .ADDC A,@Ri(i=0,1) 间接ROM的内容带进位加到累加器 8 .ADDC A,#data 立即数带进位加到累加器

汇编51单片机考试常见试题

汇编51单片机考试常见试题

一、填空题 1.单片机是把中央处理器、存储器、定时器/计数器以及I/O接口电路等主要计算机部件集成在一块集成电路芯片上的微型计算机。 2.除了单片机这一名称之外,单片机还可称为微控制器、嵌入式控制器。 3.计算机的系统总线有地址总线、控制总线和数据总线。 4.80C51单片机基本型内部RAM有 128 个字节单元,这些单元可以分为三个用途不同的区域,一是工作寄存器区、二是位寻址区、三是数据缓冲区。5.8051单片机有2 个16位定时/计数器。 6.单片机存储器的主要功能是存储程序和数据。80C51含4 KB掩膜ROM。7.80C51在物理上有4个独立的存储器空间。 8.通常、单片机上电复位时PC= 0000H,SP=07H;而工作寄存器则缺省采用第00 组,这组寄存器的地址范围是从00H~ 07H。 9.8051的堆栈是向地址的高端生成的。入栈时SP先加1,再压入数据。10.使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。11.MCS-51特殊功能寄存器只能采用直接寻址方式。 12.汇编语言中可以使用伪指令,它们不是真正的指令,只是用来对汇编过程进行某种控制。 13.半导体存储器的最重要的两个指标是存储容量和存储速度。 14.当PSW4=1,PSW3=0时,工作寄存器Rn,工作在第2组。 15.在8051单片机中,由 2 个振荡(晶振)周期组成1个状态(时钟)周期,由 6个状态周期组成1个机器周期。 16.假定累加器A的内容30H,执行指令:1000H:MOVC A,@A+PC后,把程序存储器1031H单元的内容送累加器A中。 17.MCS-51单片机访问外部存储器时,利用ALE信号锁存来自P0口的低8位地址信号。 18.内部RAM中,位地址为30H的位,该位所在字节的字节地址为26H。19.若A中的内容为63H,那么,P标志位的值为0。 20.在基址加变址寻址方式中,以累加器A作变址寄存器,以DPTR或PC作基址寄存器。 21.指令格式是由操作码和操作数所组成,也可能仅由操作码组成。 22.通过堆栈操作实现子程序调用,首先就要把PC的内容入栈,以进行断点保护。调用返回时,再进行出栈保护,把保护的断点送回到PC。 23.MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS-51的PC是16位的,因此其寻址的范围为64KB。 24.在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的地址。 25.假定累加器A中的内容为30H,执行指令1000H:MOVC A,@A+PC 后,把程序存储器1031H单元的内容送入累加器A中。 26.12根地址线可寻址4 KB存储单元。 27.:假定A=55H,R3=0AAH,在执行指令ANL A,R3后,A=00H,R3=0AAH。28.MCS-51的P0口作为输出端口时,每位能驱动8个LSTTL负载。 29.MCS-51有4个并行I/O口,其中P1~P3是准双向口,所以由输出转输入时必须先写入“1”。 30.MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。

51单片机汇编指令集

1)数据传送类指令(7种助记符) MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送; MOVC(Move Code)读取程序存储器数据表格的数据传送; MOVX (Move External RAM) 对外部RAM的数据传送; XCH (Exchange) 字节交换; XCHD (Exchange low-order Digit) 低半字节交换; PUSH (Push onto Stack) 入栈; POP (Pop from Stack) 出栈; (2)算术运算类指令(8种助记符) ADD(Addition) 加法; ADDC(Add with Carry) 带进位加法; SUBB(Subtract with Borrow) 带借位减法; DA(Decimal Adjust) 十进制调整; INC(Increment) 加1; DEC(Decrement) 减1; MUL(Multiplication、Multiply) 乘法; DIV(Division、Divide) 除法; (3)逻辑运算类指令(10种助记符) ANL(AND Logic) 逻辑与; ORL(OR Logic) 逻辑或; XRL(Exclusive-OR Logic) 逻辑异或; CLR(Clear) 清零; CPL(Complement) 取反; RL(Rotate left) 循环左移; RLC(Rotate Left throught the Carry flag) 带进位循环左移; RR(Rotate Right) 循环右移; RRC (Rotate Right throught the Carry flag) 带进位循环右移; SWAP (Swap) 低4位与高4位交换; (4)控制转移类指令(17种助记符) ACALL(Absolute subroutine Call)子程序绝对调用; LCALL(Long subroutine Call)子程序长调用; RET(Return from subroutine)子程序返回; RETI(Return from Interruption)中断返回; SJMP(Short Jump)短转移; AJMP(Absolute Jump)绝对转移; LJMP(Long Jump)长转移; CJNE (Compare Jump if Not Equal)比较不相等则转移; DJNZ (Decrement Jump if Not Zero)减1后不为0则转移; JZ (Jump if Zero)结果为0则转移; JNZ (Jump if Not Zero) 结果不为0则转移;

C51单片机汇编语言指令集

51汇编语言指令集 符号定义表 符号含义 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) #data 8位常数 #data16 16位常数 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,#data 2 1 将累加器与常数相加,结果存回累加 器 5.ADDC A,Rn 1 1 将累加器与寄存器的内容及进位C相 加,结果存回累加器 6.ADDC A,direct 2 1 将累加器与直接地址的内容及进位C 相加,结果存回累加器 7.ADDC A,@Ri 1 1 将累加器与间接地址的内容及进位C 相加,结果存回累加器 8.ADDC A,#data 2 1 将累加器与常数及进位C相加,结果 存回累加器 9.SUBB A,Rn 1 1 将累加器的值减去寄存器的值减借 位C,结果存回累加器 10.SUBB A,direct 2 1 将累加器的值减直接地址的值减借 位C,结果存回累加器 11.SUBB A,@Ri 1 1 将累加器的值减间接地址的值减借 位C,结果存回累加器 12.SUBB A,0data 2 1 将累加器的值减常数值减借位C,结 果存回累加器 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 逻辑运算指令 ANL A,Rn 1 1 将累加器的值与寄存器的值做AND的逻 辑判断,结果存回累加器 ANL A,direct 2 1 将累加器的值与直接地址的内容做AND 的逻辑判断,结果存回累加器 ANL A,@Ri 1 1 将累加器的值与间接地址的内容做AND 的逻辑判断,结果存回累加器 ANL A,#data 2 1 将累加器的值与常数做AND的逻辑判 断,结果存回累加器 ANL direct,A 2 1 将直接地址的内容与累加器的值做AND 的逻辑判断,结果存回该直接地址 ANL direct,#data 3 2 将直接地址的内容与常数值做AND 的逻辑判断,结果存回该直接地址ORL A,Rn 1 1 将累加器的值与寄存器的值做OR的逻 辑判断,结果存回累加器 32.ORL A,direct 2 1 将累加器的值与直接地址的内容做OR 的逻辑判断,结果存回累加器33.ORL 1 1 将累加器的值与间接地址的内容做OR

51单片机汇编指令大全

51汇编指令大全 Rn: 表示当前寄存器区的8个工作寄存器R0~R7 Ri: 表示当前寄存器区的R0或R1,可作地址指针即间址寄存器(i=0或1) @: 为间接寄存器或基址寄存器的前缀. Direct: 表示8位内部数据存储单元的地址.它可以是内部RAM的单元地址0~127.特殊功能 寄存器SFR的地址(128~255)或名称, A: 累加器ACC. B: .特殊功能寄存器B,用于MUL和DIV指令中. C: 进位位Cy. #data: 表示包含在指令中的单字节(8位)立即数.如果用16位进制表示,后缀字母为”H”,数据范围00~0FFH,不得一字母开头;如果用16进制表示无须任何后缀,但必须在0~255之间. #data16: 表示包含在指令中的双字节(16位)立即数. Adda16: 表示16位的目的地址.用于LCALL和LJMP指令中,目的地址范围是从0000H~FFFFH的整个64KB存储地址空间. Adda11: 表示11位的目的地址.用于ACALL和AJMP的指令中,目的地址必须和下一条指令第一个字节同处一页. Rel: 表示8位带符号的相对偏移量.用语SJMP和所有的条件转移指令中.偏移量相对于下一条指令的第一个字节计算,在-128~+127范围内取值. DPTR: 为数据指针,可用作16位的地址寄存器. /: 加在位操作的前面,表示对该位进行非运算. bit: 表示内部可寻址位或特殊功能寄存器中的直接寻址位. “(x): 寄存器或地址单元中的内容. ((x)): 有x见解寻址的单元中的内容. <-: 表示将箭头右边的内容传送至箭头的左边. $: 当前指令的地址. 单片机指令系统 (一) 内部数据传送指令 (1) 以累加器A为目的的传送指令: MOV A, #data ;(A)<-data MOV A, direct ;(A)<-(direct) MOV A, Rn ;(A)<-(Rn) MOV A, @Ri ;(A)<- ((Ri)) (2) 以通用寄存器Rn为目的的传送指令: MOV Rn, A ;(Rn)<-(A) MOV Rn, direct ; (Rn)<(direct)- MOV Rn, #data: ; (Rn)<-(data) (3) 以直接地址为目的的传送指令: MOV direct, A ;(direct)<-(A) MOV direct, Rn ; (direct)<-(Rn) MOV direct, direct2 ; (direct)<-(direct2) MOV direct, @Ri ; (direct)<-((Rn)) MOV direct, #data ; (direct)<-data (4) 以寄存器间接地址为目的的传送指令:

51单片机汇编指令速查表

51 单片机汇编指令速查表 指令格式功能简述字节数周期 一、数据传送类指令 MOV A,Rn 寄存器送累加器1 1 MOV Rn,A 累加器送寄存器1 1 MOV A ,@Ri 内部RAM 单元送累加器1 1 MOV @Ri ,A 累加器送内部RAM 单元1 1 MOV A ,#data 立即数送累加器2 1 MOV A ,direct 直接寻址单元送累加器2 1 MOV direct ,A 累加器送直接寻址单元2 1 MOV Rn,#data 立即数送寄存器2 1 MOV direct ,#data 立即数送直接寻址单元3 2 MOV @Ri ,#data 立即数送内部RAM 单元2 1 MOV direct ,Rn 寄存器送直接寻址单元2 2 MOV Rn ,direct 直接寻址单元送寄存器2 2 MOV direct ,@Ri 内部RAM 单元送直接寻址单元2 2 MOV @Ri ,direct 直接寻址单元送内部RAM 单元2 2 MOV direct2,direct1 直接寻址单元送直接寻址单元3 2 MOV DPTR ,#data16 16 位立即数送数据指针3 2 MOVX A ,@Ri 外部RAM 单元送累加器(8 位地址) 1 2 MOVX @Ri ,A 累加器送外部RAM 单元(8 位地址) 1 2 MOVX A ,@DPTR 外部RAM 单元送累加器(16 位地址) 1 2 MOVX @DPTR ,A 累加器送外部RAM 单元(16 位地址) 1 2 MOVC A ,@A+DPTR 查表数据送累加器(DPTR 为基址) 1 2 MOVC A ,@A+PC 查表数据送累加器(PC 为基址) 1 2 XCH A ,Rn 累加器与寄存器交换1 1 XCH A ,@Ri 累加器与内部RAM 单元交换1 1 XCHD A ,direct 累加器与直接寻址单元交换2 1 XCHD A ,@Ri 累加器与内部RAM 单元低4 位交换1 1 SW AP A 累加器高4 位与低4 位交换1 1 POP direct 栈顶弹出指令直接寻址单元2 2 PUSH direct 直接寻址单元压入栈顶2 2 二、算术运算类指令 ADD A,Rn 累加器加寄存器1 1 ADD A,@Ri 累加器加内部RAM 单元1 1 ADD A,direct 累加器加直接寻址单元2 1 ADD A,#data 累加器加立即数2 1 ADDC A,Rn 累加器加寄存器和进位标志1 1 ADDC A,@Ri 累加器加内部RAM 单元和进位标志1 1 ADDC A,#data 累加器加立即数和进位标志2 1

经典的51单片机汇编指令详解

MCS-51系列单片机指令以A开头的指令有18条,分别: ACALL addr11 ADD A,Rn ADD A,direct ADD A,@Ri ADD A,#data ADDC A,Rn ADDC A,direct ADDC A,@Ri ADDC A,#data AJMP addr11 ANL A,Rn ANL A,direct ANL A,@Ri ANL A,#data ANL direct,A ANL direct,#data 以X开头的指令有10条,分别为: XCH A,Rn XCH A,direct XCH A,@Ri XCHD A,@Ri XRL A,Rn XRL A,direct XRL A,@Ri XRL A,#data XRL direct,A XRL direct,#data 1、XCH A,Rn 指令名称:寄存器寻址字节交换指令 指令代码:C8H~CFH 指令功能:寄存器寻址字节 操作内容:(A)交换(Rn);n=0~7 字节数: 1 机器周期:1 2、XCH A,direct 指令名称:直接寻址字节交换指令 指令代码:C5H 指令功能:累加器内容与内部RAM低128单元或专用寄存器内容交换操作内容:(A)交换(direct) 字节数: 2

3、XCH A,@Ri 指令名称:间接寻址字节交换指令 指令代码:C6H~C7H 指令功能:累加器内容与内部RAM低128单元内容交换 操作内容:(A)交换((Ri)); i=0,1 字节数: 1 机器周期:1 4、XCHD A,@Ri 指令名称:半字节交换指令 指令代码:D6H~D7H 指令功能:累加器内容低4位与内部RAM低128单元低4位交换 操作内容:(A)3~0交换((Ri))3~0;i=0,1 字节数: 1 机器周期:1 5、XRL A,Rn 指令名称;逻辑异或操作指令 指令代码:68H~6FH 指令功能:累加器内容与寄存器内容进行逻辑异或操作 操作内容:A<-(A)异或(Rn); n=0~7 字节数: 1 机器周期:1 6、XRL A,direct 指令名称:逻辑异或操作指令 指令代码:65H 指令功能:累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容:A<-(A)异或(direct) 字节数: 2 机器周期:1 7、XRL A,@Ri 指令名称:逻辑异或指令 指令代码:66H~67H 指令功能:累加器与内部RAM低128单元内容进行逻辑异或操作 操作内容:A<-(A)异或((Ri)); i=0,1

相关文档
相关文档 最新文档