每种汇编语言都有自己的伪指令,用来向汇编源程序发出指示信息,告诉它如何完成汇编工作,或者对符号或标号赋值。伪指令和指令是完全不同的,伪指令不是执行的指令,在汇编时起控制作用,只在源程序中出现,自身并不产生机器代码,是为汇编服务的一些指令。
伪指令具有控制汇编程序输入/输出、定义数据和符号、条件汇编以及分配存储空间等功能。不同的伪指令功能有所不同,但基本用法是相似的。
下面介绍在8051单片机汇编语言中常用的伪指令。
1.ORG汇编起始地址命令
汇编起始地址命令的功能是规定目标程序的起始地址。如果不用ORG规定,则汇编得到的目标程序将从0000H地址开始。
格式:ORG 16位地址
规定了START所在的地址为1000H,该指令就从1000H开始存储。
在一个源程序中可以多次使用ORG指令,以规定不同程序段的起始位置。但所规定的地址应该从小到大,不能交叉也不能重叠。
若按下面的顺序排列则是错误的,因为地址出现了交叉。
2.END汇编结束命令
END是汇编语言源程序的结束标志,用于终止源程序的汇编工作,出现END指令时,说明把源程序翻译成指令代码的工作到此为止。因此,在整个源程序中只能有一条END命令,且位于源程序的最后。如果END指令出现在源程序中间,则编译器将不会汇编其后面的程序。
3.EQU等值命令
EQU是将一个数或者特定的汇编符号赋予规定的字符名称,用于给标号赋值。
格式:字符名称EQU数或汇编符号
用EQU指令赋值以后的字符名称可作为数据地址、代码地址、位地址或者一个立即数来使用。
4.DATA数据地址赋值命令
DATA命令将数据地址或代码地址赋予规定的字符名称。
格式:字符名称DATA表达式
DATA伪指令的功能与EQU有些相似,它们有以下区别:
1)EQU伪指令必须先定义后使用,而DATA伪指令则无此限制(即DATA用来定义变量,而EQU用来定义常量)。(www.xing528.com)
2)用EQU伪指令可以把一个汇编符号赋给一个字符名称,而DATA伪指令则不能。
3)DATA伪指令可将一个表达式的值赋给一个字符变量,所定义的字符变量也可以出现在表示式中,而EQU定义的字符则不能。DATA伪指令在程序中常用来定义数据地址。
5.DB定义字节命令
DB命令是从指定的地址单元开始,定义若干单字节内存单元的内容。
格式:[标号:]DB 8位二进制数表
DB指令是在汇编时告诉编译器从指定的地址单元开始,定义若干字节存储单元,并将指定的数据或数据表赋予这些存储单元。注意,数据表中各字节数据用逗号分隔,如果是字符数据还需要用单引号标注起来,数据可以是二进制、十六进制和ASCII码,DB指令在汇编语言程序中可以多次使用。
6.DW定义数据字命令
格式:[标号:]DW 16位二进制数表
本命令用于从指定的地址开始,在程序存储器的连续单元中定义16位的数据字。一个16位的数据要占据存储器的两个字节,其中高8位数存入低地址字节,低8位数存入高地址字节。若不足16位,高位用0填充。
7.DS定义空间命令
DS定义空间命令是从指定的地址开始,保留若干个字节的内存空间作为备用。
格式:[标号:]DS表达式
在汇编后,将根据表达式的值来决定从指定的地址开始留出多少个字节空间,表达式也可以是一个指定的数值。
汇编后,从0600H开始保留6个字节单元,从0606H开始按照下一条DB命令给单元赋值,即(0606H)=36H,(0607H)=A1H。保留空间的用途将由程序决定。
DB、DW和DS伪指令都只对程序存储器起作用,不能用来对数据存储器的内容进行赋值或初始化。
8.BIT位地址符号命令
格式:字符名称BIT位地址
需要说明的是,并非所有汇编程序都有这条伪指令,若不具备BIT命令时,则可以用EQU命令定义地址变量,但所赋的值必须是位地址。例如,P1.0要用地址90H来代替。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。