伪指令(Pseudo Instruction)
伪指令不要求计算机做任何操作,也没有对应的机器码,不产生目标程序,不影响程序的执行,仅仅是能够帮助汇编程序进行汇编的一些指令。它主要用来指定程序或数据的起始位置,给出一些连续存放数据的存储单元地址,为中间运算结果保留一部分存储空间以及表示源程序结束等。不同版本的汇编语言,伪指令的符号和含义可能有所不同,但基本用法是相似的。下面介绍几种常用的伪指令。
1.ORG
格式: ORG 16位地址
该伪指令的功能是规定其后面的目标程序或数据块的起始地址。它放在一段源程序(主程序、子程序)或数据块的前面,说明紧跟在其后的程序段或数据块的起始地址就是ORG后面给出的地址。例如:
上述程序说明标号STAR所在的地址为2000 H,该指令MOV的目标码就从2000 H单元开始存放。
在一个源程序中,可以多次使用ORG指令,以规定不同的程序段的起始位置。但所规定的地址应该是从小到大,而且不允许重叠,即不同的程序段之间不能有重叠地址。一个源程序若开始没有ORG指令,则从0000 H开始自动存放目标码。
2.END
指令格式: END
END是汇编语言源程序的结束标志,在END以后所写的指令,汇编程序都不予处理。一个源程序只能有一个END命令。在同时包含有主程序和子程序的源程序中,同样也只能有一个END命令。
3.EQU
格式: 字符名称 EQU 数或汇编符号
等值命令EQU是将一个数或者特定的汇编符号赋予规定的字符名称。
这里使用的“字符名称”不是标号,不能用“:”来作分隔符。用EQU指令赋值以后的字符名称可以用作数据地址、代码地址、位地址或者当作一个立即数来使用。因此,给字符名称所赋的值可以是8位数,也可以是16位数。例如:
TAB1 EQU 1000H
TAB2 EQU 2000H
汇编后TAB1、TAB2分别具有值1000 H、2000 H。又例如:
这里X赋值以后当作直接地址使用,而DA被定义为16位地址,是一个子程序的入口。使用EQU命令时必须先赋值,后使用,而不能先使用后赋值。同时,该字符名称不能和汇编语言的关键字同名,如A、ADD、SJMP、B等。
4.DATA
格式: 字符名称 DATA 表达式
DATA命令是将数据地址或代码地址赋予规定的字符名称。
DATA伪指令的功能与EQU有些相似,使用时要注意它们有以下区别:
(1)EQU伪指令必须先定义后使用,而DATA伪指令则无此限制。
(2)用EQU伪指令可以把一个汇编符号赋给一个字符名称,而DATA伪指令则不能。
(3)DATA伪指令可将一个表达式的值赋给一个字符变量,所定义的字符变量也可以出现在表达式中,而EQU定义的字符则不能这样使用。DATA伪指令在程序中常用来定义数据地址。例如:
5.DB
格式: [标号] DB 项或项表
该伪指令的功能是把项或项表的数据存入从标号地址开始的连续存储单元中。这个伪指令在汇编以后,将改变相关程序存储器单元中的内容。例如:
标号TAB的地址为2000H,此伪指令将0~9的ASCII码值依次存入2000H开始的连续存储单元,即2000H存入0的ASCII码30H,2001H存入1的ASCII码31H,依此类推。
6.DW
格式: [标号] DW 项或项表
DW伪指令与DB相似,但用于定义字的内容。项或项表指所定义的一个字(两个字节)或用逗号分开的字串。汇编时,机器自动按高8位在先、低8位在后的格式排列。例如:
汇编后:
(2100H)=10H (2101H)=67 H
(2102H)=60H (2103H)=80 H
(2104H)=00H (2105H)=6EH
7.DS
格式: [标号] DS 表达式
定义空间命令DS从指定的地址开始,保留若干字节的内存空间以作备用。
在汇编以后,将根据表达式的值来决定从指定的地址开始留出多少个字节空间,表达式也可以是一个指定的数值。例如:
ORG 5000H
DS 07H
DB 86H,0A7H
汇编后,从5000 H开始保留7个字节的内存单元,然后从5007 H开始,按照下一条DB命令给内存单元赋值,即(5007 H)=86 H,(5008H)=0A7 H。保留的空间将由程序的其他部分决定它们的用途。DB、DW、DS伪指令都只对程序存储器起作用,不能用来对数据存储器的内容进行赋值或其他初始化的工作。
8.BIT
格式: 字符名称 BIT 位地址
BIT命令对位地址赋予所规定的字符名称。例如:
A1 BIT A.1
A2 BIT P2.0
这样就把两个位地址即0E1H和0A0H分别赋给了两个变量A1和A2,在编程中它们就可当作位地址来使用。这是直接位寻址的一种表示方式。