单片机伪指令和指令详解

合集下载

单片机伪指令详解

单片机伪指令详解

伪指令依照其用途可分为五类:定义类、存储类、存储定义类、条件类及汇编方式类。

它们的具体分类及用途详见伪指令的类别一览类别a定义类用于对以下内容进行定义的伪指令:1.程序;2.程序中所用数据的性质、范围或结构;3.宏或结构4.程序5.其它1CODE、DATA、TEXT2IRAM、ISRAM、ORAM、OSRAM、RAM、SRAM3MACRO、MACEXIT、ENDM4PROC、ENDP、STRUCT、ENDS;5.DEFINE、VAR、PUBLIC、EXTERNAL、EQU、VDEFb存储类以指定的数据类型存储数据或设定程序地址等DW、DD、FLOAT、DOUBLE、ENDc存储定义类定义若干指定数据类型的数据存储单元DUPd条件类对汇编指令进行条件汇编IF、ELSE、ENDIF;IFMA、IFDEF、IFNDEFe汇编方式类包含汇编文件或创建用户定义段INCLUDE;SECTION详解:定义类伪指令DEFINE【类别】定义类【功能描述】定义常量符号【语法格式】.DEFINE variable[value][,…]【应用解释】给常量符号所赋之值既可是一已定义过的常量符号,亦可是一表达式。

切忌符号超前引用,即如果赋值引用的符号不是在引用前定义的,则会出现“非法超前引用”的错误。

【举例】.DEFINE BODY1;.DEFINE IO_PORT0x7016;.IFDEF BODY;R1=0xFFFF;[IO_PORT]=R1;.ENDIFPUBLIC【类别】定义类【功能描述】声明将被引用在其它文件中的全局标号【语法格式】.PUBLIC label[,label][,…]【应用解释】本伪指令用来在文件中声明将被引用在外部文件中的全局标号。

故在外部文件中用伪指令EXTERNAL所声明的标号必须是用PUBLIC伪指令声明过的。

类似地,当要声明多个全局标号时,要用逗号(,)将每一标号分开。

【举例】.PUBLIC sym1//声明要引用在其它文件中的全局标号.PUBLIC sym1,sym2//声明多个全局标号需用逗号将每一标号分开,空格会被忽略。

MCS-51单片机-伪指令

MCS-51单片机-伪指令
伪指令语句
伪指令并不是真正的指令,也不产生相应的机器 码,它们只是在计算机将汇编语言转换为机器码时, 指导汇编过程,告诉汇编程序如何汇编。下面介绍一 些MCS-51汇编程序常用的伪指令。 (1)汇编起始伪指令ORG 格式:[标号:] ORG 16位地址 功能:规定程序块或数据块存放的起始地址。如: ORG 8000H START: MOV A ,#30H …… 该指令规定第一条指令从地址8000H单元开始存 放,即标号START的值为8000H。
(5)定义字命令 DW 格式:[标号:] DW 16位二进制数表 例如, ORG 1000H TAB: DW 1234H , 0ABH , 10 汇编后: (1000H)=12H (1001H ) = 34H (1002H ) = 00H ( 1003H ) = ABH (1004H ) =00H (1005H) =0AH DB、DW伪指令都只对程序存储器起作用,不能 用来对数据存储器的内容进行赋值或进行其它初始化 的工作。
(2)汇编结束伪指令END 格式:[标号:] END [表达式] 功能:结束汇编。 例如: ORG 2000H START: MOV A ,# 00H …… END START 表示标号START开始的程序段结束。 (3)等值指令EQU MOV A,TEST
(4)定义字节指令DB 格式:[标号:] DB 8位二进制数表 DB命令是从指定的地址单元开始,定义若干个8 位内存单元的内容。例如, ORG 1000H TAB; DB 23H,73, “6”, “B” TABl: DB 110B 以上伪指令经汇编以后,将对从1000H开始的若 干内存单元赋值: (1000H)=23H (1001H)=49H (1002H)=36H (1003H)=42H (1004H)=06H 其中36H和42H分别是字符6和B的ASCII码,其 余的十进制数(73)和二进制数(110B)也都换算为 十六进制数了。

51单片机汇编指令及伪指令小结

51单片机汇编指令及伪指令小结

51单片机汇编指令及伪指令小结51单片机汇编指令及伪指令小结51单片机是一种广泛应用的基于汇编语言的微控制器。

它的汇编指令集非常丰富,包括了基本的数据处理、逻辑运算、分支跳转、数据存储和输入输出等指令。

汇编指令的灵活运用可以实现各种复杂的功能,因此掌握51单片机的汇编指令是开发嵌入式系统的重要基础。

1. 基本数据处理指令51单片机汇编指令集包括了一系列基本的数据处理指令,如加法(add)、减法(sub)、乘法(mul)、除法(div)等。

这些指令用于实现对数据的基本运算操作。

2. 逻辑运算指令逻辑运算指令用于实现各种逻辑运算,如与(and)、或(or)、非(not)、异或(xor)等。

这些指令通常用于处理数据的开关控制、状态判断等功能。

3. 分支跳转指令分支跳转指令用于实现程序的流程控制。

常用的分支跳转指令包括无条件跳转(jmp)、条件跳转(jz、jnz、jc、jnc等)、循环跳转(loop)等。

这些指令可以根据条件和需求设置程序的执行流程,实现各种循环、分支等功能。

4. 数据存储指令数据存储指令用于实现数据的存储和加载操作。

常用的存储指令包括将数据存储到寄存器或内存中(mov)、将数据从寄存器或内存中加载(ld)等。

这些指令通过对数据的存储和加载,实现对数据的读写操作。

5. 输入输出指令输入输出指令用于实现与外设的数据通信。

常用的输入输出指令包括从端口输入(instr)、输出到端口(outstr)等。

这些指令通过与外部设备的数据交互,实现嵌入式系统与外设的连接。

除了以上的基本指令外,51单片机还提供了一些伪指令,用于程序的组织和调试。

这些伪指令包括宏指令、条件编译指令、调试指令等。

1. 宏指令宏指令是一种通过宏展开的方式来扩展汇编代码的指令。

它通过提前定义一些宏,并在代码中使用这些宏来生成更复杂的汇编代码。

宏指令的好处是可以简化代码的书写,使得程序的逻辑更清晰。

2. 条件编译指令条件编译指令用于根据编译时的条件来选择性地编译代码。

单片机伪指令

单片机伪指令

32
双精度浮点型 64 (DOUBLE)

以IEEE格式表示的64 位浮点数
天津大学电子实习中心
存储定义类 <1>
定义若干指定数据类型的数据存储单元 DUP
天津大学电子实习中心
存储定义类 <2>
DUP 【类 别】存储定义类 【功能描述】本伪指令与DW、FLOAT、DD、 DOUBLE存储类伪指令组合在一起用于存 放若干个具有相同数值的常量;或者申请若 干个备用的整型、单精度浮点型、长整型以 及双精度浮点型数据单元。
天津大学电子实习中心
汇编方式类 <2>
INCLUDE 【功能描述】在汇编文件里包含某个文件 【语法格式】.INCLUDE filename 【举 例】 .INCLUDE hardware.inc .INCLUDE key.h .INCLUDE hardware.h
天津大学电子实习中心
常用定义类伪指令说明&举例<10>
ENDP 【功能描述】结束程序的定义 【语法格式】ENDP 【举 例】 Test1:.PROC PUSH BP to [SP] …… RETF; .ENDP
天津大学电子实习中心
存储类
以指定的数据类型存储数据或设定程序地 址等 DW、DD、FLOAT、DOUBLE、END
天津大学电子实习中心
常用定义类伪指令说明&举例<6>
DATA 【功能描述】切换定义预定义段DATA 【语法格式】.DATA 【举 例】.DATA tone_table: .DW 5,8,6,9,3,8,0 ;
天津大学电子实习中心
常用定义类伪指令说明&举例<7>
CODE 【功能描述】切换定义预定义段CODE 【语法格式】.CODE 【举 例】.CODE .PUBLIC _MAIN;

MCS系列单片机指令系统2

MCS系列单片机指令系统2

Y
解:本题是十进制数累加,必 须对和要进行BCD码调整;同
N Cy=1?
Y
时加数的增长不能用INC指令, 千、百位加1
数据保存 结束
也必须进行BCD码调整,因此 只能用ADD A,#01指令, 再进行BCD码调整。
BCD码调整 加数1
【例】在内RAM 30H~3FH 存放符号数,试统计中间负数 的个数,将统计结果存放在 40H单元中,试编制程序。
4)DW伪指令 指令格式:
[标号:]DW 16位二进制数表 说明:DW伪指令是定义字的伪指令,即从指定的地址单元 开始,定义若干个16位二进制数据,每个字占用两个单元, 先存高8位,再存低8位。用法同DB伪指令。
5)DS伪指令
指令格式:
地址
[标号:]DS <表达式>
说明:DS伪指令是定义存储区, 2000H
LOOP2:INC R0 DJNZ R2,LOOP1 END
本章小结
主要掌握立即寻址、直接寻址、寄存器寻址、寄存器间接 寻址等寻址方式。 掌握各指令的格式及用法。 能阅读程序,写出结果。 能编写简单结构化程序。
【例】下列程序存放在ROM中的情
况。 源程序
机器语言
ORG 2000H
START:MOV A,#02H 74 02
MOVC A,@A+PC 83
RET
22
DB 41H,”4”,”A”41 34 41
END
地址 2000H 2001H 2002H 2003H 2004H 2005H 2006H
ROM 74 02 83 22 41 34 41
即从标号指定的单元开始保留表 2001H
达式所代表的存储单元数。
2002H

单片机汇编语言伪指令

单片机汇编语言伪指令

单片机汇编语言伪指令1.BIT---用于汇编程序的一开始创建一个常量.FLASH_COUNT BIT3EH;创建一个名为FLASH_COUNT的常量,并把立即数3EH赋给这个常量,在程序中就可以直接把FLASH_COUNT等同于立即数3EH进行操作.2.DATA---定义一个指向特殊功能寄存器区地址的变量.DPTRSW DATA0A2H;DPTRSW指向特殊功能寄存器0A2H地址上.3.DB---用于汇编程序中定义若干个长度为1个字节的字,这若干个字使用逗号分隔开,如果逗号之间没有数据,汇编器默认为00H.DB10H,11H,,3FH,20H;在目标文件中生成10H,11H,00H,3FH,20H4.DS---用于保留一块存储器空间给程序变量使用或别的用途.STORAGE DS10;保留一块名叫"STORAGE"的10字节存储空间5.DW---定义若干个长度为两个字节的字,这若干个字使用逗号分隔开,如果逗号之间没有数据,汇编器默认为0000H.DW0FFFEH,,0102H;在目标文件中生成代码:FFH,FEH,00H,00H,01H,02H6.END---该伪指令告诉汇编器程序的结束点.7.EQU---定义某一个符号的值,一旦一个符号被定义后,就不能被另一个EQU或SET指令重复定义.BEEP_COUNT EQU1+1;表达式把2定义给符号BEEP_COUNT8.IF、ELSE、ENDIF---这3个伪指令是条件选择语句,它们告诉汇编器根据表达式的值,是否汇编某一块程序,没有汇编的块在目标文件中是不存在对应的执行代码的.IF P1.0;如果P1.0=1,就汇编下一行ELSE01H,02H,03H;在存储器中定义字01H、02H、03HENDIF;条件选择结束,如果P1.0≠1,上一行不被汇编.9.INCL---该指令用于在汇编时把其他文件与当前文件结合在一起汇编.INCL"const.def";即把文件"const.def"与当前文件结合在一起汇编.---该伪指令用于设置程序计数器PC的初始值.ORG0000H;指令的执行代码在单片机的程序存储器中从0000H开始存储(也可简单写成00H).11.SET---该伪指令类似EQU,但不同的是SET可以通过另一个SET伪指令重复定义变量的值.COUNT SET3COUNT SET1;最终COUNT=112.$---美元符号表示当前地址,意味着程序计数器PC的值不变,在程序中表示"本行程序". DJNZ R5,$;工作寄存器R5减1,如果不等于0就调回本行---直到R5减至0为止,执行下一条指令.。

MCS-51单片机汇编伪指令的用法解析

MCS-51单片机汇编伪指令的用法解析

MCS-51单片机汇编伪指令的用法解析
1、DS ---预留存储区命令
格式:〔标号:〕DS 表达式值
其功能是从指定地址开始,定义一个存储区,以备源程序使用。

存储区预留的存储单元数由表达式的值决定。

TMP:DS 1
从标号TEP地址处开始保留1个存储单元(字节)。

2、BIT---定义位命令
格式:字符名称BIT 位地址
其功能用于给字符名称定义位地址。

SPK BIT P3.7
经定义后,允许在指令中用SPK代替P3.7。

3、USING指令
USING指令通知汇编器使用8051的哪一个工作寄存器组。

格式:USING 表达式(值必须为0-3,默认值为0。


USING 0
使用第0组工作寄存器。

4、SEGMENT指令
SEGMENT 指令用来声明一个再定位段和一个可选的再定位类型。

格式:再定位段名SEGMENT 段类型〔再定位类型〕
其中,“再定位段名”用于指明所声明的段。

“段类型”用于指定所声明的段将处的存储器地址空间。

可用的段类型有CODE、XDATA、DATA、IDATA和BIT。

STACK_SEG SEGMENT IDATA
DATA_SEG SEGMENT DATA
5、RSEG---再定位段选择指令。

单片机db指令

单片机db指令

单片机db指令1单片机DB指令在单片机的应用过程中,很多情况下需要使用到DB指令。

DB指令是单片机汇编语言中的一种指令,用于将数据存储到数据段中。

本文将从以下几个方面来详细介绍DB指令的相关知识。

2DB指令介绍DB指令是单片机汇编语言中的一种伪指令,用于向数据段中存放数据。

其语法格式如下:DB数据1,数据2,数据3,…,数据n以上语句中,数据可以是整数、字符或字符串。

多个数据之间用逗号隔开,最后一个数据无需加逗号。

每个数据占据一个字节的空间,所以数据的长度最好不要超过8位,否则可能会出现编译错误。

3使用DB指令存储数据使用DB指令存储数据需要先在数据段中定义一个变量。

例如,我们要在数据段中定义一个单字节的变量x,并将其初始化为10,可以使用以下语句:data SEGMENTx DB10data ENDS以上语句中,SEGMENT和ENDS是固定的语句,用于定义数据段的开始和结束。

x是变量名,可以自己定义。

DB指令后面的10是变量的初始值。

4使用DB指令存储字符或字符串DB指令不仅可以用于存储整数,还可以用于存储字符或字符串。

例如,我们要在数据段中定义一个字符串str,并将其初始化为“Hello,world!”,可以使用以下语句:data SEGMENTstr DB'Hello,world!',0data ENDS以上语句中,字符串需要用单引号或双引号括起来,最后一个字符必须是0,表示字符串的结束。

如果不加0,那么程序在读取字符串时可能会出现错误。

5DB指令的应用示例下面以一个简单程序为例,演示如何使用DB指令存储数据。

该程序实现了将两个数的和存储在数据段中的功能。

要实现这个功能,我们需要先在代码段中定义两个变量a和b,并使用DB指令将它们的值初始化。

然后使用ADD指令将它们相加,并将结果存储到数据段中的变量c中。

最后使用MOV指令将c的值移动到寄存器AL中,然后使用INT21H调用DOS中的打印字符串函数显示结果。

单片机伪指令

单片机伪指令

常用的7条:ORG—定位伪指令END—结束汇编伪指令EQU—赋值伪指令DB—定义字节指令DW—定义数据字指令DS—定义存储区指令;从标号开始预留若干单元,单元个数有表达式值决定BIT—位定义指令51汇编伪指令2008-12-20 10:58伪指令是对汇编起某种控制作用的特殊命令,其格式与通常的操作指令一样,并可加在汇编程序的任何地方,但它们并不产生机器指令。

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

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

MASM51中可用的伪指令有:ORG 设置程序起始地址END 标志源代码结束EQU 定义常数SET 定义整型数DATA 给字节类型符号定值BYTE 给字节类型符号定值WROD 给字类型符号定值BIT 给位地址取名ALTNAME 用自定义名取代保留字DB 给一块连续的存储区装载字节型数据DW 给一块连续的存储区装载字型数据DS 预留一个连续的存储区或装入指定字节。

INCLUDE 将一个源文件插入程序中TITLE 列表文件中加入标题行NOLIST 汇编时不产生列表文件NOCODE 条件汇编时,条件为假的不产生清单一、ORG伪指令ORG用于为在它之后的程序设置地址值,它有一个参数,其格式为:ORG 表达式表达式可以是一个具体的数值,也可以包含变量名,如果包含变量名,则必须保证,当第一次遇到这条伪指令时,其中的变量必须已有定义(已有具体的数值),否则,无定义的值将由0替换,这将会造成错误。

在列表文件中,由ORG定义的指令地址会被打印出来。

ORG指令有什么用途呢?指令被翻译成机器码后,将被存入系统的ROM中,一般情况下,机器码总是一个接一个地放在存储器中,但有一些代码,其位置有特殊要求,典型的是五个中断入口,它们必须被放在0003H,000BH,0013H,001BH和0023H的位置,否则就会出错,如果我们编程时不作特殊处理,让机器代码一个接一个地生成,不能保证这些代码正好处于这些规定的位置,执行就会出错,这时就要用到ORG伪指令了。

2.3.6伪指令

2.3.6伪指令
TAB:DB 45H,73,‘5’,‘A’ DB 101B 结果: (2000H)=45H (2002H)=35H (2004H)=05H (2001H)=49H (2003H)=41H
其中35H和41H分别是字符5和A的ASCII码,其余 的十进制数(73)和二进制数(101B)也都换算为 十六进制数了。
3、有关概念
源程序:用汇编语言编写的程序。
目标程序:用机器语言表示的程序。 汇编:将汇编语言源程序翻译成目标程序的过程。 汇编程序:计算机内专门用于完成汇编工作的应用 程序。
汇编语言源程序由一系列的指令和伪指令组成。
本节介绍伪指令。 二、伪指令 伪指令又叫汇编控制指令,用来对汇编的过程进 行控制或对某些符号、标号进行赋值。
A2 BIT P1.1
用EQU命令也可以定义位地址变量,但这时所赋 的值应该是具体的位地址值,例如P1.0 就要具体 地用90H来代替。
本节小结
源程序
汇编语言基本概念
目标程序 汇编 汇编程序
ORG汇编起始伪指令
END汇编结束伪指令

伪指令
EQU、DATA字符定义伪指令 DB、DW、DS数据表定义伪指令 BIT位地址定义伪指令
(1503H)=8AH
(1505H)=0AH
7、DS(定义空间命令) ①功能:从指定的地址开始,保留若干个字节内存
空间备用。
②格式:[标号:] DS 表达式 在汇编以后,将根据表达式的值来决定从指定 地址开始留出多少个字节空间,表达式也可以是 一个指定的数值。
③举例:
ORG 1000H
DS 08H DB 30H,8AH 汇编以后,从1000H开始,保留八个字节的内存单 元,然后从1008H开始,按照下一条DB命令给内存单

单片机知识点背诵

单片机知识点背诵

1. 汇编语言中常用的伪指令有什么哪些?分别起什么作用?ORG伪指令:用于指明程序或数据从程序存储空间的什么位置开始存放DB伪指令:用于定义字节数据。

可以定义一个字节也可定义多个字节DW伪指令:用于定义字数据DS伪指令:用于在存储器中保留一定数量的字节单元EQU伪指令:将指令中项的值赋予EQU前面的符号Bit伪指令:用于给位地址赋予符号,经赋值后可用该符号代替bit后面的位地址END伪指令:放于程序的最后面,用于指明汇编语言源程序的结束位置DATA伪指令:该伪指令用于给片内RAM字节单元地址赋予DATA前面的符号,符号以字母开头,同一单元地址可以赋予多个符号XDATA伪指令:该伪指令与XDATA伪指令基本相同,只是它针对的是片外RAM字节单元2.简述中断响应的含义及主要条件。

当CPU检测到中断源提出的中断请求,且中断又处于允许状态,CPU就会响应中断,进入中断响应过程。

中断响应的条件:中断源有请求且中断允许3.简述定时器的几种工作模式。

工作模式0:13位的定时\计数器工作模式1:16位的定时\计数器工作模式2:8位自动重置定时\计数器工作模式3:两个8位定时\计数器(只有定时\计数器0才有)4.什么是同步串行通信与异步串行通信?单片机与移位寄存器之间的传送是同步通信单片机对单片机之间的传送叫异步通信5. MCS-51系列单片机具有几个中断源?分别是如何定义的?什么是自然优先级以及自然优先级是如何排列的?MCS-51系列单片机具有5个中断源外部中断源INT0、外部中断源INT1、定时\计数器T0中断、定时\计数器T1中断、串行口中断ES自然优先级就是系统默认的优先级五个中断源的自然优先级顺序:INT0、T0、INT1、T1、ES6.什么是单工通信与双工通信?串口只能输入或只能输出的叫单工通信串口可以同时进行接收和发送的叫双工通信7. 简述MOVX A, @R1与MOVX @R1, A的区别。

所表示的意义不同,前者是将外部RAM(8位地址)单元的内容送入A中,后者是将A中的内容送入到外部RAM(8位地址)单元中8. 简述单片机内部数据寄存器的几个部分构成。

MCS-51单片机常用伪指令及常见出错表

MCS-51单片机常用伪指令及常见出错表

MCS-51单片机常用伪指令及常见出错表一)符号定义伪指令符号定义名用法说明EQU 为常量,符号名等定义符号化常量名符号名不能重名定义= 为常量,符号名等定义符号化常量名符号名不能重名定义DATA 用来为一个字节类型的符号定值符号名不能重名定义BYTE 用来为一个字节类型的符号定值符号名不能重名定义WORD 用来为一个字类型的符号定值符号名不能重名定义BIT 用来定义一个字位类型符号名不能重名定义SET 用来定义整数类型的符号名符号名可重名定义1. EQU(=)指令EQU 指令用于将一个数值或寄存器名赋给一个指定符号名。

指令格式:符号名EQU(=)表达式符号名EQU(=)寄存器名经过EQU 指令赋值的符号可在程序的其它地方使用,以代替其赋值。

例如:MAX EQU 2000则在程序的其它地方出现MAX,就用2000 代替。

2. SET 指令SET 指令类似于EQU 指令,不同的是SET 指令定义过的符号可重定义。

指令格式:符号名SET 表达式符号名SET 寄存器名例如:MAX SET 2000MAX SET 30003. BIT 指令BIT 指令用于将一个位地址赋给指定的符号名。

指令格式:符号名BIT 位地址经BIT 指令定义过的位符号名不能更改。

例如:X_ON BIT 60H ;定义一个绝对位地址X_OFF BIT 24h.2 ;定义一个绝对位地址4. DATA(BYTE)指令DA TA 指令用于将一个内部RAM 的地址赋给指定的符号名指令格式:符号名DATA 表达式数值表达式的值应在0~255 之间,表达式必须是一个简单再定位表达式。

例如:REGBUF DA TA(BYTE)40HPORT0 DATA(BYTE)80HDA TA与BYTE的区别: DATA与BYTE是相类似的伪指令。

当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。

5. XDATA 指令XDATA 指令用于将一个外部RAM 的地址赋给指定的符号名。

8086CPU指令和伪指令(中英文全解)

8086CPU指令和伪指令(中英文全解)

8086CPU指令和寄存器英文全称。

一、数据传送指令比如,mov(move)、push、pop、pushf(push flags)、popf(pop flags)、xchg(exchange)等都是数据传送指令,这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送。

二、算术运算指令比如,add、sub(substract)、adc(add with carry)、sbb(substract with borrow)、inc (increase)、dec(decrease)、cmp(compare)、imul(integer multiplication)、idiv (integer divide)、aaa(ASCII add with adjust)等都是算术运算指令,这些指令实现寄存器和内存中的数据运算。

它们的执行结果影响标志寄存器的sf、zf、of、cf、pf、af位。

三、逻辑指令比如,and、or、not、xor(exclusive or)、test、shl(shift logic left)、shr(shift logic right)、sal(shift arithmetic left)、sar(shift arithmetic right)、rol(rotate left)、ror(rotate right)、rcl(rotate left through carry)、rcr(rotate right through carry)等都是逻辑指令。

除了not 指令外,它们的执行结果都影响标志寄存器的相关标志位。

四、转移指令可以修改IP,或同时修改CS和IP的指令统称为转移指令。

转移指令分为一下几类。

(1)无条件转移指令,比如,jmp(jump);(2)条件转移指令,比如,jcxz(jump if CX is zero)、je(jump if equal)、jb(jump if below)、ja(jump if above)、jnb(jump if not below)、jna(jump if not above)等;(3)循环指令,比如,loop;(4)过程,比如,call、ret(return)、retf(return far);(5)中断,比如,int(interrupt)、iret(interrupt return)。

51单片机汇编指令及伪指令小结

51单片机汇编指令及伪指令小结

51单片机汇编指令及伪指令小结51单片机汇编指令及伪指令小结51单片机汇编指令小结一、数据传送类指令MOV用法MOVA,RnMOVA,@RiMOVA,#dataMOVA,directMOVRn,AMOVRn,#dataMOVRn,directMOV@Ri,AMOV@Ri,#dataMOV@Ri,directMOVdirect,AMOVdirect,@RiMOVdirect,Rn功能寄存器送累加器立即数送累加器直接寻址单元送累加器累加器送寄存器立即数送寄存器直接寻址单元送寄存器字节数122122周期11111121121222222222221111XCH不能出现两个直接寻址地址R0和R1只能寻址片内低128字节或者片外低256字节MOVX必须通过A与外部RAM传值,另一个操作数必须用寄存器间接寻址MOVC必须通过A进行注意事项MOV指令中不能出现两个工作寄存器间接寄存器寻址只能用R0和R1R0和R1只能寻址片内低128字节或者片外低256字节(SFR不能通过工作寄存器寻址)DPTR为唯一16位寄存器内部RAM单元送累加器1累加器送内部RAM单元1立即数送内部RAM单元2直接寻址单元送内部RAM单元累加器送直接寻址单元内部RAM单元送直接寻址单元寄存器送直接寻址单元址单元223223MOVdirect,#data 立即数送直接寻址单元MOVdirect2,direct1直接寻址单元送直接寻MOVDPTR,#data1616位立即数送数据指针3MOVXMOVXA,@Ri外部RAM单元送累加器1(8位地址)MOVXA,@DPTRMOVX@Ri,AMOVX@DPTR,AMOVCMOVCAA+DPTRXCHXCHD,@外部RAM单元送累加器(16位地址)累加器送外部RAM单元(8位地址)累加器送外部RAM单元(16位地址)查表数据送累加器(DPTR为基址)查表数据送累加器(PC为基址)累加器与寄存器交换累加器与内部RAM单元交换累加器与直接寻址单元交换累加器与内部RAM单元111111121MOVCA,@A+PCXCHA,RnXCHA,@RiXCHA,directXCHDA,@Ri低4位交换PUSH&POPPOPdirectPUSHdirect栈顶弹出指令直接寻址单元直接寻址单元压入栈顶2222用ACC表示累加器堆栈在用户RAM区二、算术运算类指令指令ADD用法ADDA,RnADDA,@RiADDA,directADDA,#dataADDCADDCA,RnADDCA,@RiADDCA,#dataADDCA,directINCINCAINCRnINCdirectINC@Ri功能累加器加寄存器累加器加内部RAM单元累加器加直接寻址单元累加器加立即数累加器加寄存器和进位标志累加器加内部RAM单元和进位标志累加器加立即数和进位标志累加器加直接寻址单元和进位标志累加器加1寄存器加1直接寻址单元加1内部RAM单元加1字节数112211221121周期111111111111注意事项ADD可以产生进位,但不考虑进位加法类指令只能通过A进行加法类的和超过8位时,CY置1,OV置1 ADDC可以产生进位,也考虑进位除了INCA改变奇偶标识位,其他都不改变PSW(不改变CY)INCDPTRDASUBBDAASUBBA,RnSUBBA,@RiSUBBA,#dataSUBBA,directDECDECADECRnDEC@RiDECdirectMUL&MULABDIV数据指针加1十进制调整累加器减寄存器和进位标志累加器减内部RAM单元和进位标志累加器减立即数和进位标志累加器减直接寻址单元和进位标志累加器减1寄存器减1内部RAM单元减1直接寻址单元减1累加器乘寄存器B1111221112121111111114结果存储为BAA、B为单字节无符号数乘积大于255时(结果中B不为0),OV置1CY总为0结果储存为:商A,余数B除数为0时,OV置1与INC类似DIVAB累加器除以寄存器B14三、逻辑运算类指令指令ANL用法ANLA,RnANLA,@RiANLA,#dataANLA,directANLdirect,AANLdirect,#dataORLORLA,RnORLA,@RiORLA,#dataORLA,direct功能累加器与寄存器累加器与内部RAM单元累加器与立即数累加器与直接寻址单元直接寻址单元与累加器直接寻址单元与立即数累加器或寄存器累加器或内部RAM单元累加器或立即数累加器或直接寻址单字节数1122231122周期注意事项111111111元ORLdirect,AORLdirect,#dataXRLXRLA,RnXRLA,@RiXRLA,#dataXRLA,directXRLdirect,AXRLdirect,#dataRLARRARLCARRCACPLACLRA 直接寻址单元或累加器直接寻址单元或立即数累加器异或寄存器累加器异或内部RAM单元累加器异或立即数累加器异或直接寻址单元直接寻址单元异或累加器直接寻址单元异或立即数累加器左循环移位累加器右循环移位累加器连进位标志左循环移位累加器连进位标志右循环移位累加器取反累加器清零2311222311111111111112111111边上一位移入CY,另一侧一位从CY移入ANL、ORL、XRL均可以对接口进行操作四、控制转移类指令类指令用法ACALLaddr11功能2KB范围内绝对调用字节数2周期注意事项2Addr0~10赋给PC0~10PC11~15不变调用时,地址分两次压栈调用时,地址分两次压栈A+DPTR赋给PCLCALLaddr16AJMPaddr11LJMPaddr16SJMPrelJMP@A+DPTRRETRET1JCrel64kb范围内长调用2KB范围内绝对转移64KB范围内长转移-128B~127B相对短转移相对长转移子程序返回中断返回判断CY=1转移323211122222222JNCrelJZrelJNZrelCJNEA,#data,relCJNEA,direct,relCJNERn,#d ata,rel判断CY=0转移累加器为零转移累加器非零转移累加器与立即数不等转移累加器与直接寻址单元不等转移寄存器与立即数不等转移22233332222222221影响CY:前数>=后数,CY=0,反之CY=1CJNE@Ri,#data,relRAM单元与立即数不等转移五、位操作类指令MOVMOVC,bitMOVbit,C直接寻址位送CC送直接寻址DJNZRn,relDJNZdirect,relNOP直接寻址单元减1不为零转移空操作寄存器减1不为零转移2312212Bit为RAM中20H~2FH中128个可寻址位,或SFR中可寻址储存单元必须通过C传送SETBJBbit,relJNBbit,relJBCbit,relSETBCSETBbit(bit)为1则转移并清零3331222211逻辑操作与字节中的一致51汇编常用伪指令16位地址:此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址;2.【标号】DB字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。

伪指令

伪指令

MCS-51单片机常用伪指令及常见出错表一)符号定义伪指令符号定义名用法说明EQU 为常量,符号名等定义符号化常量名符号名不能重名定义 = 为常量,符号名等定义符号化常量名符号名不能重名定义 DATA 用来为一个字节类型的符号定值符号名不能重名定义 BYTE 用来为一个字节类型的符号定值符号名不能重名定义 WORD 用来为一个字类型的符号定值符号名不能重名定义BIT 用来定义一个字位类型符号名不能重名定义SET 用来定义整数类型的符号名符号名可重名定义1. EQU(=)指令EQU 指令用于将一个数值或寄存器名赋给一个指定符号名。

指令格式:符号名EQU(=)表达式符号名EQU(=)寄存器名经过EQU 指令赋值的符号可在程序的其它地方使用,以代替其赋值。

例如:MAX EQU 2000则在程序的其它地方出现MAX,就用2000 代替。

2. SET 指令SET 指令类似于EQU 指令,不同的是SET 指令定义过的符号可重定义。

指令格式:符号名SET 表达式符号名SET 寄存器名例如:MAX SET 2000MAX SET 30003. BIT 指令BIT 指令用于将一个位地址赋给指定的符号名。

指令格式:符号名BIT 位地址经BIT 指令定义过的位符号名不能更改。

例如:X_ON BIT 60H ;定义一个绝对位地址X_OFF BIT 24h.2 ;定义一个绝对位地址4. DATA(BYTE)指令DATA 指令用于将一个内部RAM 的地址赋给指定的符号名指令格式:符号名DATA 表达式数值表达式的值应在0~255 之间,表达式必须是一个简单再定位表达式。

例如:REGBUF DATA(BYTE) 40HPORT0 DATA(BYTE) 80HDATA与BYTE的区别: DATA与BYTE是相类似的伪指令。

当程序运行到DATA伪指令定义的符号名时,该符号名将被显示;而由BYTE定义的符号名不被显示。

5. XDATA 指令XDATA 指令用于将一个外部RAM 的地址赋给指定的符号名。

单片机传输指令

单片机传输指令

(1) MOVC
A,@A+PC
以PC作基址寄存器,A的内容作为无符号整数和 PC作基址寄存器, 的内容作为无符号整数和 作基址寄存器 PC中的内容 下一条指令的起始地址) 中的内容( PC中的内容(下一条指令的起始地址)相加 后得到一个16位的地址, 16位的地址 后得到一个16位的地址,该地址指出的程序 存储单元的内容送到累加器A 存储单元的内容送到累加器A。
5.16位数传送指令 5.16位数传送指令
MOV DPTR,#data16 ; #data16→DPTR
唯一的16位数据的传送指令 ,立即数的 唯一的16位数据的传送指令 16 位送入DPH 立即数的低8位送入DPL DPH, DPL。 高8位送入DPH,立即数的低8位送入DPL。
6.查表指令
共两条,用于读程序存储器中的数据表格 共两条,用于读程序存储器中的数据表格 程序存储器 基址寄存器加变址寄存器间接 的指令,均采用基址寄存器加变址 的指令,均采用基址寄存器加变址寄存器间接 寻址方式。 寻址方式。
ORG 1000H
TAB: DB 2BH, 0A0H, ‘A’, 2*4 ;
表示从1000H单元开始的 单元开始的 表示从 地方存放数据2BH,0A0H, 地方存放数据2BH,0A0H, 41H(字母 的ASCII码), (字母A的 码 08H
• 5. 符号定义伪指令 符号定义伪指令EQU或“=” 或 格式: 格式:符号名 EQU 表达式 或 符号名= 符号名=表达式 • 功能:将表达式的值或某个 功能: 特定汇编符号定义为一个指定 的符号名, 的符号名,只能定义单字节数 并且必须遵循先定义后使 据,并且必须遵循先定义后使 的原则,因此该语句通常放 用的原则,因此该语句通常放 在源程序的开头部分 部分。 在源程序的开头部分。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ASM-51汇编伪指令
一、伪指令分类
1.符号定义
SEGMENT, EQU, SET, DATA, IDATA, XDATA, BIT, CODE
2.存储器初始化/保留
DS, DB, DW, DBIT
3.程序链接
PUBILC, EXTRN, NAME
4.汇编程序状态控制
ORG, END
5.选择段的伪指令
RSEG, CSEG, DSEG, XSEG, ISEG, BSEG, USING
二、伪指令具体说明
1.符号定义伪指令
1)SEGMENT伪指令
格式:段名SEGMENT 段类型
说明:SEGMENT 伪指令说明一个段。

段就是一块程序代码或数据存储器。

允许使用的段类型为:
●CODE代码空间
●DATA 可以直接寻址的内部数据空间
●XDATA外部数据空间
●IDATA可以间接寻址的整个内部数据空间
●BIT位空间
例子:(段符号用于表达式时,代表被连接段的基地址)
STACK SEGMENT IDATA
RSEG STACK
DS 10H ;保留16字节做堆栈
MOV SP , #STACK-1 ;堆栈指针初始化
2)EQU伪指令
格式:符号名 EQU 表达式
符号名 EQU 特殊汇编符号
说明:EQU表示把一个数值或特殊汇编符号赋予规定的名字。

一个表达式赋予一个符号,必须是不带向前访问的表达式。

例子:N27 EQU 27;
ACCUM EQU A ;定义ACCUM代替特殊汇编符号A(累加器)
HERE EQU $; HERE为当前位置计数器的值
3)SET伪指令
格式:符号名 SET 表达式
符号名 SET 特殊汇编符号
说明:SET类似EQU,区别在于可以用另一个SET伪指令在以后对定义过的符号重新定义。

例子:COUNT SET 0
COUNT SET COUNT+1
4)BIT伪指令
格式:符号名 BIT 位地址
说明: BIT伪指令把一个地址赋予规定的符号名。

该符号类型取段类型BIT.
例子:
RSEG DATA_SEG;
CONTROL: DS 1
ALATM BIT CONTROL.0;
OPEN_BOARD BIT ALATM+1 ;下一位
RESET_BOARD BIT 60H ;下一个绝对的位
5)DATA伪指令
格式:符号名 DATA 表达式
说明:DATA伪指令把片内的数据地址赋予所规定的符号名。

符号段类型为DATA. 例子:CONIN DATA SBUF;定义CONIN 到串行口缓冲器的地址
TABLE_BASE DATA 70H ;把TABLE_BASE 定义到位置70H
6)XDATA伪指令
格式:符号名 XDATA 表达式
说明: XDATA伪指令把片外的数据地址赋予所规定的符号名。

段类型为XDATA. 例子:
RSEG XSEG1
ORG 100H
DATE DS 5;定义DATE在偏离XSEG1的100H处
TIME XDATA DATE+5;定义TIME为DATE后面的5个字节.
7)IDATA伪指令
格式:符号名 IDATA 表达式
说明: IDATA伪指令将间接的内部数据地址赋予所规定的符号名。

类型为IDATA. 例子:BUFFER IDATA 60H
BUFFER_LEN EQU 20H
BUFFER_END IDATA BUFFER+BUFFER_LEN-1
8)CODE伪指令
格式:符号名 CODE 表达式
说明:CODE 伪指令把一个代码地址赋予所规定的符号名。

符号段类型为CODE。

2.存储器初始化及保留
1)DS伪指令
格式:标号 DS 表达式
说明: DS伪指令以字节为单位保留空间。

可以用于除BIT类型段以外的任何段。

2)DBIT伪指令
格式:标号 DBIT 表达式
说明: DBIT伪指令以位为单位保留空间。

它仅用于BIT类型段。

在BIT段中,位置计数器的基本单位是位而不是字节。

3)DB伪指令
格式:标号 DB 表达式
说明:DB伪指令用字节值对代码存储器初始化。

段类型为CODE型,其表达式列表是一个由逗号(,)分开的一个或多个字节值或串。

例子:AGE: DB ‘MARY’,0,27
ORIMES:DB 1,2,3,5
4)DW伪指令
格式:标号 DW 表达式
说明:DW伪指令是用字(16位)值对代码存储器初始化。

段类型为CODE型。

该表达式可以是一个由逗号(,)分开的一个或多个字值,字值可为绝对的或可重新定位的表达式。

若在列表中用了位置计数器$,它计算出正被初始化字的代码地址。

列表中的每一项以它出现在该列表中的顺序放入存储器,其高字节在前,低字节在后。

例子:ARRIVAL DW 710, ‘AM’
JUMP_TABLE DW GO_PROC,BREAK_PROC,DISPLAY_PROC;由产生地址的清单成一个跳转表。

3.程序的链接
1)PUBLIC伪指令
格式:PUBLIC 符号名列表
说明:PUBLIC伪指令允许当前被汇编模块的符号为外部公用。

符号名对于一个时,用逗号(,)分开。

寄存器或段符号名(通过SEGMENT伪指令声明了的)不可以规定为PUBLIC。

例子:PUBLIC putctrl,put_data,liner
2)EXTRN伪指令
格式:ERTRN [段类型(符号名列表)],。

说明:EXTRN伪指令列出当前模块中要访问的在其他模块中定义了的符号。

这个伪指令可以出现在程序的任何地方。

外部符号必须符合与上每一个符号相关的段类型。

(这些类型是CODE,XDATA,DATA,IDATA,BIT及NUMBER,即一个无类型的符号)
例子:EXTRN CODE(pntcrif,putstring,getnum),DATA(count,total)
EXTRN CODE(binas,ascbin),NUMBER(table-size)
3)NAME 伪指令
格式: NAME 模块名
说明:NAME伪指令用来定义当前的程序模块,应放在该模块全部伪指令及指令代码的前面。

若无NAME伪指令,则源文件名作为系统对其设置的名称,但不得以数字开始。

4.汇编程序的状态控制
1)END
格式: END
说明:END语句不得有标号,允许在它的行上出现一个注释。

END语句是程序的最后一行,否则将产生一个错误。

2)ORG
格式: ORG 表达式
说明:ORG伪指令用来对汇编程序的位置计数器做修改,以设置一个新的程序起点。

该表达式应当是一个绝对的或是可重新定位的表达式,它访问当前的段而不含向前的访问。

ORG伪指令改变位置计数器,但它并不产生一个新段。

如果当前段为绝对段,其值便是当前段的一个绝对地址,如果该段是可以重新定位的,其值是当前段基地址的偏移。

例子:ORG ($+10H) AND 0FFF0H ;将位置计数器设为下一个16字节边界ORG 50 :将位置计数器设置为50
5.段选择伪指令
可重定位段:RSEG
格式:RSEG 段名
说明:其段名一定要在前面使用SEGMENT伪指令定义过
绝对段: CSEG XSEG DSEG ISEG BSEG
格式:
●CSEG [ AT 绝对地址] ;在代码地址空间选择一个绝对段
●XSEG [ AT 绝对地址] ;在外部数据地址空间选择一个绝对段
●DSEG [ AT 绝对地址] ;在内部数据地址空间选择一个绝对段
●ISEG [ AT 绝对地址] ;在间接内部数据地址空间选择一个绝对段
●BSEG [ AT 绝对地址] ;在位地址空间选择一个绝对段
如果使用[ AT 绝对地址],汇编器便结束以前规定的绝对段并生成一个从该地址开始的新的绝对段。

如果未规定一个绝对地址,该段类型的原来绝对段便继续生效。

如果选择段类型为以前未定义的绝对段而且省略了绝对地址,则在位置0开始生成一个段。

例子:
BSEG AT 70H
DECIMAL_MODE DBIT 1
CHAT_MIDE DBIT 1
ING伪指令
格式: USING 表达式
说明: USING伪指令通知汇编器其后面的代码所使用的寄存器组。

其表达式是一个数(0-3之间),它指向四个寄存器组之一。

例子:
USING 3
PUSH AR2 ;压入第三组的第二个寄存器
USING 1
PUSH AR2 ;压入第一组的第二个寄存器。

相关文档
最新文档