51单片机汇编指令总结

时间:2024.3.24

单片机指令功能一览表

助记符 代码 说明

MOV A,Rn E8~EF 寄存器A

MOV A,direct E5 dircet 直接字节送A

MOV A,@Ri ER~E7 间接RAM送A

MOV A,#data 74 data 立即数送A

MOV Rn,A F8~FF A送寄存器

MOV Rn,dircet A8~AF dircet 直接字节送寄存器

MOV Rn,#data 78~7F data 立即数送寄存器

MOV dircet,A F5 dircet A送直接字节

MOV dircet,Rn 88~8F dircet 寄存器送直接字节

MOV dircet1,dircet2 85 dircet1 dircet2 直接字节送直接字节 MOV dircet,@Ro 86~87 间接RAM送直接字节

MOV dircet,#data 75 dircet data 立即数送直接字节

MOV @Ri,A F6~F7 A送间接RAM

MOV @Ri,#data 76~77 data 直接字节送间接RAM

MOV @Ri,#data 76~77 data 立即数送间接RAM

MOV DPTR,#data16 90 data 15~8 16位常数送数据指针 data7~0

MOVC A,@A+DPTR 93 由((A)+(DPTR))寻址的程序存贮 器字节选A

MOVC A,@A+PC 83 由((A)+(PC));寻址的程序存贮器字节送A MOVX A,@Ri E2~E3 送外部数据(8位地址)送A

MOVX A,@DPTR E0 送外部数据(16位地址)送A

MOVX @Ri,A F2~F3 A送外部数据(8位地址)

MOVX @DPTR,A F0 A送外部数据(16位地址)

PUSH dircet C0 dircet 直接字节进栈,SP加1

POP dircet D0 dircet 直接字节退栈,SP减1

XCH A,Rn C8~CF 交换A和寄存器

XCH A,dircet C5 dircet 交换A和直接字节

XCH A,@Ri C6~C7 交换A和间接RAM

XCH A,@Ri D6~D7 交换A和间接RAM的低位

SWAP A C4

算术操作 (A的二个半字节交换)

ADD A,Rn 28~2F 寄存器加到A

ADD A,dircet 25 dircet 直接字节加到A ADD A,@Ri 26~27 间接RAM加到A

ADD A,#data 24data 立即数加到A

ADD A,Rn 38~3F 寄存器和进位位加到A

ADD A,dircet 35dircet 直接字节和进位位加到A ADD A,@Ri 36~37 间接字节和进位位加到A ADD A,data 34 data 立即数和进位位加到A ADD A,Rn 98~9F A减去寄存器和进位位

ADD A,dircet 95 dircet A减去直接字节和进位位 ADD A,@Ri 36~37 间接RAM和进位位加到A ADD A,data 34 data 立即数和进位位加到A SUBB A,Rn 98~9F A减去寄存器和进位位

SUBB A,dircet 95 dircet A减去直接字节和进位位 SUBB A,@Ri 96~97 A减去间接RAM和进位位 SUBB A,#data 94 data A减去立即数和进位位 INC A 04 A加1

INC Rn 08~0F 寄存器加1

INC dircet 05 dircet 直接字节加1

INC @Ri 06~07 间接RAM加1

DEC A 14 A减1

DEC Rn 18~1F 寄存器减1

DEC dircet 15 dircet 直接字节减1

DEC @Ri 16~17 间接RAM减1

INC DPTR A3 数据指针加1

MUL AB A4 A乘以B

DIV AB 84 A除以B

DA A D4 A的十进制加法调整

逻辑操作

ANL A,Rn 58~5F 寄存器“与”到A

ANL A,dircet 55 dircet 直接字节“与”到A

ANL A,@Ri 56~57 间接RAm“与”到A

ANL A,#data 54 data 立即数“与”到A

ANL dircet A 52 dircet A“与”到直接字节

ANL dircet,#data 53 dircet data 立即数“与”到直接字节 ORL A,Rn 48~4F 寄存器“或”到A

ORL A,dircet 45 dircet 直接字节“或”到A

ORL A,@Ri 46~47 间接RAM“或”到A

ORL A,#data 44 data 立即数“或”到A

ORL dircet,A 42 dircet A“或”到直接字节

ORL dircet,#data 43 dircet data 立即数“或”到直接字节 XRL A,Rn 68~6F 寄存器“异或”到A

XRL A,dircet 65 dircet 直接字节“异或”到A

XRL A,@Ri 66~67 间接RAM“异或”到A

XRL A,#data 64 data 立即数“异或”到A

XRL dircet A 62 dircet A“异或”到直接字节

XRL dircet,#data 63 dircet data 立即数“异或”到直接字节 CLR A E4 清零

CPL A F4 A取反

RL A 23 A左环移

RLC A 33 A通过进位左环移

RR A 03 A右环移

RRC A 13 A通过进位右环移

控制程序转移

ACALL addr 11 *1 addr(a7~a0) 绝对子程序调用 LCALL addr 16 12 addr(15~8) 长子程序调用

addr(7~0)

RET 22 子程序调用返回

RETI addr 11 32 中断调用返回

AJMP addr 11 △1 addr(a7~a6) 绝对转移

LJMP addr 16 02addr(15~8) 长转移

addr(7~0)

SJMP rel 80 rel 短转移,相对转移

JMP @A+DPTR 73 相对于DPTR间接转移

JZ rel 60 rel A为零转移

JNZ rel 70 rel A为零转移

CJNE A,dircet,rel B5 dircet rel 直接字节与A比较,不等则转移

CJNE A,#data,rel B4 data rel 立即数与A比较,不等则转移

CJNE A,Rn,#data,rel B8~BF data rel 立即数与寄存器比较,不等则转移 CJNE @Ri,#data,rel B6~B7 data rel 立即数与间接RAM比较,不等则转移 DJNZ Rn,rel D8~DF rel 寄存器减1,不为零则转移

DJNZ dircet,rel B5 dircet rel 直接字节减1,不为零则转移

NOP 00 空操作

*=a10a9a8l

△=a10a9a80

布尔变量操作

CLR C C3 清零进位

CLR bit C2 清零直接位

SETB C D3 置位进位

SETB bit D2 置位直接位

CPL C B3 进位取反

CPL bit B2 直接位取反

ANL C,bit 82 dit 直接数“与”到进位

ANL C,/bit B0 直接位的反“与”到进位

ORL C,bit 72 bit 直接位“或”到进位

ORL C,/bit A0 bit 直接位的反“或”到进位

MOV C,bit A2 bit 直接位送进位

MOV bit,C 92 bit 进位送直接位

JC rel 40 rel 进位位为1转移

JNC rel 50 rel 进位位为0转移

JB bit,rel 20 bit rel 直接位为1相对转移

JNB bit,rel 30 bit rel 直接位为0相对转移

JBC bit,rel 10 bit rel 直接位为1相对转移,然后清零该位

[1]. 循环移位指令(4条)

RL A ;累加器A中的内容左移一位

RR A ;累加器A中的内容右移一位

RLC A ;累加器A中的内容连同进位位CY左移一位

RRC A ;累加器A中的内容连同进位位CY右移一位

[2]. 累加器半字节交换指令(1条)

SWAP A ; 累加器中的内容高低半字节互换

[3]. 求反指令(1条)

CPL A ; 累加器中的内容按位取反

[4]. 清零指令(1条)

CLR A ; 0→(A),累加器中的内容清0

[5]. 逻辑与操作指令(6条)

ANL A,data ;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。

ANL data,#data ;直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。

ANL A,#data ;累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。 ANL A,Rn ;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。

ANL data,A ;直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。

ANL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。

[6]. 逻辑或操作指令(6条)

这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。

ORL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。

ORL data,#data ;直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。

ORL A,#data ;累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。 ORL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。

ORL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。

ORL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。

[7]. 逻辑异或操作指令(6条)

XRL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。

XRL data,#data ;直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。

XRL A,#data ;累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A中。

XRL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。

XRL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。

XRL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中

控制转移类指令分析

[1]. 无条件转移指令(4条)

LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址)

AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变

SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值

JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值

[2]. 条件转移指令(8条)

JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行

JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行

CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行 CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

布尔变量操作指令分析

[1]. 位传送指令(2条)

MOV C,bit ;bit→CY,某位数据送CY

MOV bit,C ;CY→bit,CY数据送某位

[2]. 位置位复位指令(4条)

CLR C ; 0→CY,清CY

CLR bit ; 0→bit,清某一位

SETB C ; 1→CY,置位CY

SETB bit ; 1→bit,置位某一位

[3]. 位运算指令(6条)

ANL C,bit ;(CY)∧(bit)→CY

ANL C,/bit ;(CY)∧( )→CY

ORL C,bit ;(CY)∨(bit)→CY

ORL C,/bit ;(CY)∧()→CY

CPL C ;()→CY

CPL bit ;()→bir

[4]. 位控制转移指令(5)

JC rel ; (CY)=1转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。 JNC rel ; (CY)=0转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。 JB bit, rel ; 位状态为1转移。

JNB bit, rel ; 位状态为0转移。

JBC bit, rel ; 位状态为1转移,并使该位清“0”。


第二篇:5-MCS-51单片机讲义(宏汇编伪指令)


MCS-51单片机讲义资料(汇编)— MCS-51宏汇编伪指令 华信单片机工作室

第五章 MCS-51宏汇编伪指令

伪指令是对汇编起某种控制作用的特殊命令,但自身并不产生机器码,不属于指令系统,而仅仅为汇编服务的一些指令,因此称为伪指令。其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。

许多伪指令要求带参数,这在定义伪指令时由“表达式”域指出,任何数值与表达式均可以作为参数。

不同汇编程序允许的伪指令并不相同,以下所述的伪指令适用于Intel公司的MASM51系统,但一些基本的伪指令在大部份汇编程序中都能使用,当使用其它的汇编程序版本时,只要注意一下它们之间的区别就可以了。MASM51中常用的伪指令共分为五大类:

1. 程序计数与结束伪指令:ORG、END;

2. 符号定义伪指令:EQU、SET、DATA、BYTE、WORD、BIT、ALTNAME、DB、DW、

DS;

3. 附加文件伪指令:INCLUDE;

4. 程序清单格式化伪指令:TITLE、PAGE;

5. 一般控制伪指令:LIST、NOLIST、NOCODE。

下面简要介绍一下各条伪指令的功能:

5.1 ORG

功能:程序计数伪指令,用于设置由表达式决定的初始地址,ORG也称为起始伪指令。表达式缺省为0。

格式:ORG 16位地址

例如:

ORG 0100H

START:MOV A,#05H

ADD A,#08H

MOV 20H,A

ORG 0100H表示该伪指令下面第一条指令的起始地址是0100H,即“MOV A,#05H”指令的首字节地址为0100H,或标号START代表的地址为0100H。

5.2 END

功能:是汇编语言源程序的结束标志。在END以后所写的指令,汇编程序不再处理。一个源程序只有一个END指令,放在所有指令的最后。源程序中若没有END语句,汇编将报出错。 1

MCS-51单片机讲义资料(汇编)— MCS-51宏汇编伪指令 华信单片机工作室

5.3 EQU

功能:将一个数值或寄存器名赋给一个指定的符号名。

格式:符号名 EQU 表达式 或 符号名 EQU 寄存器名

符号名=表达式

例如:

DELY EQU

DELY1 EQU

PP EQU 3344H 30H R0

ORG 0000H

JMP MAIN

ORG 0050H

MAIN:

MOV DPTR,#DELY ;(DPTR)=3344H

MOV A,#DELY ;(A)=44H

MOV A,#DELY1 (A)=30H

MOV PP,#10 ;(PP)=10

MOV A,PP ;(A)=10

NOP

END

5.4 SET

功能:SET指令的功能与EQU指令类似,不同的是,用SET指令定义过的符号名可被重新定义。

格式:符号名 SET 表达式 或 符号名 SET 寄存器名

VALUE SET 100

VALUE SET VALUE-2

COUNTER SET R1

TEMP SET COUNTER

TEMP SET VALUE+COUNTER

5.5 DATA

功能:将一个内部RAM的地址赋给规定的符号名。

格式:符号名 DATA 表达式

数值表达式的值应在0~255之间,经DATA定义过的符号在程序中不能被重新定义。 2

MCS-51单片机讲义资料(汇编)— MCS-51宏汇编伪指令 华信单片机工作室

DATA与EQU的功能有些相似,但使用时有以下区别:

(1) EQU定义的符号必须先定义后使用,而DATA可以先使用后定义。

(2) 用EQU可以把一个汇编符号赋予一个名称,而DATA则不能。

(3) DATA可将一个表达式的值赋予一个字符名称,所以定义的字符名称也可以出现在表达 中,而使用EQU定义的字符则不能这样使用。

DATA常在程序中用来定义数据地址。例如:

First DATA 30H ;表示用First代表30H。

5.6 BYTE

格式:符号名 BYTE 表达式

类似于DATA伪指令,也是为一个字节类型的符号名定值。

BYTE与DATE之间的区别类似于EQU和SET,BYTE伪指令不能定义重名符号。 A51不支持BYTE伪指令,一般应用于C51中。

5.7 WORD

WORD伪指令类似于DATA伪指令,只是WORD伪指令定义了一个字类型的符号名,其格式为:

符号名 WORD 表达式

一个字由2个字节组成。当然,因为8051汇编语言集没有字操作,所以程序执行时,只处理字节。WORD伪指令仅仅允许用户定义一个认为是字的存储位置。

例:VAL31 WORD 39

PAR7 WORD 21H

5.8 BIT

功能:将一个位地址赋给指定的符号名。

格式:符号名 BIT 位地址

经BIT定义过的位符号名不能被改变。

例如:

AQ BIT P0.0

AL BIT 20H.1

把P0.0的位地址赋给字符AQ。在其后的编程中,AQ可作为位地址使用。

5.9 ALTNAME

格式:ALTNAME 保留字,新名

3

MCS-51单片机讲义资料(汇编)— MCS-51宏汇编伪指令 华信单片机工作室

替换名伪指令用于将自定义的新名替换保留字,以后这个与被替换的保留字可等效地用于程序中,要注意的是新名的首字符必须与被替换保留原保留字首字符相同。(A51不支持该伪指令)

5.10 DB

功能:从指定的地址单元开始,定义若干个8位内存单元的数据。

格式:[标号:] DB 8位表达式表

例如:

ORG 4000H

TAB: DB 73,45,‘A’,‘2’;(注:直接使用字符串时用单引号“‘”作为分隔符) TAB1:DB 101B

以上指令经汇编后,将对4000H开始的若干内存单元进行如下赋值:

(4000H)=73H,(4001H)=2DH(注:45的16进制数),(4002H)=41H(注:A的ASCⅡ码), (4003H)=32H(2的ASCⅡ码),(2004H)=05H。

5.11 DW

功能:从指定的地址单元开始,定义若干个16位数据。

格式:[标号:] DW 表达式表

(注:如果表达式中有字符串,只取最后两个字符,若字符串只有一个字符,高字节置“0”)因为16位须占用两个字节,所以高8位先存入,低8位后存入。不足16位者,用0填充。例如:

ORG 1000H

HTAB: DW 7856H,89H,30

汇编后:

(1000H)=78H,(1001H)=56H

(1002H)=00H,(1003H)=89H

(1004H)=00H,(1005H)=1EH (注:十进制数30的16进制数为1EH)

5.12 DS

功能:从指定的地址开始,保留若干字节内存空间备用。

格式:[标号:] DS 表达式

例如:

ORG 2000H

DS 07H

MOV A,#07H

END

4

MCS-51单片机讲义资料(汇编)— MCS-51宏汇编伪指令 华信单片机工作室

汇编以后,从2000H单元开始,保留7个字节的内存单元,然后从2007H开始,放置“MOV A,#07H”的机器码74H 7AH,即:(2007H)=74H,(2008H)=7AH。

5.13 INCLUDE

格式:$INCLUDE(文件名)

功能:将指定的文件内容立即插入到源程序中,它通常用来将用户自定义的8051符号文件包含到程序中去。

例:$INCLUDE(REG.INC)

$INCLUDE(MOD1.ASM) ;将一个汇编程序插入到源程序中

5.14 TITLE

功`能:定义一个出现在页头的标题。

格式:$TITLE(标题行)

例:$TITLE(abc,a51) 经编绎后在清单LST文件中可看到:“A51 MACRO ASSEMBLER ABC,A51 ”标题行。

5.15 PAGE

功能:当表达式缺省时,该伪指令使程序清单从新的一页开始,当表达式存在时,表达式之值定义每页的行数。

格式:$PAGE 表达式

A51不支持PAGE伪指令。

5.16 LIST

功能:使汇编时产生程序清单。

格式:$LIST

5.17 NOLIST

功能:使汇编时不产生程序清单,所有包含此伪指令及在此伪指令以后的语句都不进入LST文件。 格式:$NOLIST

5.18 NOCODE

功能:使条件汇编结构中,那些没有被汇编的部分不出现在列表文件清单中。

其格式为 $NOCODE

5

MCS-51单片机讲义资料(汇编)— MCS-51宏汇编伪指令 华信单片机工作室

NOCODE伪指令使得在汇编时,条件汇编程序结构中那些真值为假的条件不产生清单。有关条件汇编结构在下面介绍。如果没有这条伪指令,汇编将产生所有条件下的清单,不论其真值是否为真。但是假的条件,不产生目标码。而NOCODE伪指令使汇编清单中只列出那些由汇编程序用到的部分,因此,当使用NOCODE伪指令时,程序清单与源程序并非逐行对应。

6

更多相关推荐:
单片机总结

在本站51hei-5板子上做315兆无线解码和红外解码试验的时候,延时函数的精度很重要,要做到相当精确才可以成功,所以大家一定要掌握.这也是大家最常在QQ里问我的一个问题,如果从keil里看了c语言的反汇编代码…

AT24C02做密码锁c程序——西华师范大学电子协会黄超自学51单片机总结

#includereg52.h#includeintrins.h#defineuintunsignedint#defineucharunsignedcharsbitsda=P2^1;sbitscl=P2^0;v…

单片机总结

单片机课程学习总结单片机这门课程我已经学了一个学期了在这一个学期的学习过程中我一开始不怎么懂得编程但慢慢的我现在已经不仅会读程序还会写程序了真为自己一个学期来努力学到的单片机知识只是而感到高兴怎么学单片机也常看...

单片机学习总结

单片机是一门应用性和综合性很强的学科,它综合了电子技术中的模拟电路和数字电路方面的知识,特别是数字电路,因为数字电路在单片机里面的应用很多。由于单片机涉及的知识很多,所以我们只能循序渐进的学习,逐步的积累,没有…

单片机总结

MCS51单片机课程总结单片机设计技术1概述微型计算机系统包括硬件系统软件系统两大部分运算器微处理器控制器存储器ROMRAM微型计算机IO接口并行接口串行接口主机总线DBABCB硬件外设键盘显示器打印机等微型计...

单片机重点总结

第1章1、微型计算机通常由哪些部分组成?各有哪些功能?答:微型计算机通常由控制器、运算器、存储器、输入/输出接口电路、输入设备和输出设备组成。控制器的功能是负责从内部存储器中取出指令并对指令进行分析、判断、并根…

单片机总结报告

单片机总结报告IC卡小组成员刘绍凯06291043刘永欢06291044一实验设备二实验原理刘中芳06291045如硬件连接图所示本系统可分为如下几个模块单片机80C196模块复位晶振电路电源电路显示模块键位模...

51单片机RAM总结

51单片机RAM数据存储区学习笔记1RAMkeilC语言编程RAM是程序运行中存放随机变量的数据空间在keil中编写程序如果当前模式为small模式如果总的变量大小未超过128B则未初始化的变量的初值默认为0如...

单片机知识点总结

单片机考点总结1单片机由CPU存储器及各种IO接口三部分组成2单片机即单片微型计算机又可称为微控制器和嵌入式控制器3MCS51系列单片机为8位单片机共40个引脚MCS51基本类型有80318051和87511I...

单片机个人知识点总结

波特率公式TH1256f波特率12322SMODMCS51系列单片机内部有哪些主要的逻辑部件答案一个8位的CPU一个布尔处理机一个片内振荡器128B的片内RAM21个特殊功能寄存器4个8位并行IO接口一个全双工...

单片机知识点总结

第一部分硬件基础1单片机的组成2单片机的并行IO口在使用时有哪些注意的地方3单片机的存储器程序存储器和数据存储器的寻址范围地址总线和数据总线的位数数据存储器内存空间的分配特殊功能寄存器区4时钟及机器周期5单片机...

51单片机初学知识点总结

51单片机初学知识点总结经过这半个月的学习我对于单片机的定时器对IO口的随意操作输入检测中断定时器的中断单片机的外部中断串口通信等几大学习模块有了一定了解和掌握1软件我主要是在keiluvision3实现用C语...

单片机总结(35篇)