一、伪指令详解
伪指令在百度百科中的定义为:
伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信息。例如,提供如下信息:哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等。
伪指令有2个特点:
1.由于是伪“指令”,因而它只存在于汇编语言中。高级语言中不叫指令,叫语句;
2.由于是“伪”指令,也即“假”指令,因而不是可执行指令,不会产生机器代码,
不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息。
与指令的区别::
1.指令是在执行阶段发挥作用的,由CPU(Intel、AMD等)来执行。
2.伪指令是在编译阶段发挥作用的,由汇编器(MASM、TASM等)来解释。
二、数据定义伪指令
为源程序中的数据和堆栈区分配数据存储单时,使用最多的伪指令。
数据定义伪指令格式如下:
常用的数据定义伪指令类型有:
∙DB(定义字节,常用)一个字节数据占1个字节单元,读完一个,偏移量加1∙DW(定义字,常用)一个字数据占2个字节单元,读完一个,偏移量加2∙DD(定义双字)一个双字数据占4个字节单元,读完一个,偏移量加4
∙DQ(定义四字)一个四字数据占8个字节单元,读完一个,偏移量加8
∙DT(定义十字节,用于BCD码)
数据定义伪指令后面的初值表可以是常数、表达式、字符串。
例如:
D2DW110*230;为D2分配1个字,存放表达式的值
D3DB‘GOOD!’;为D3分配5字节,用来存放字符串‘GOOD!’
D4DD2.4E+3;为D4分配2个字,存放一个浮点数
D5DB‘AB’;为D5分配2字节,字符A在低字节,B在高字节
D6DW‘AB’;为D6分配1个字,字符A在高字节,B在低字节
S1DB5DUP(?);为S1预留5字节的存储空间
S2DW3DUP(0);为S2分配3个字,初值设为0
语句1相当于C语言中的DW D2=110*230,只不过是语法结构不太一样
注意:通过变量名操作时,变量名代表存储区的第一个数据的地址。只有DB可以定义2个字符以上的字符串。由此可见在上述代码第5行中,为D5赋值‘AB’,低字节上是A,高字节上是B,是因为DB类型数据分配的存储空间为一个字节,在第一个字节被‘A’填满后就接着在其上面开辟新的空间存储字节B。而第
六行中,开辟一块DW类型的空间,在该存储空间上足以存储这两个字符,存储时在该空间从上到下进行写入,所以先把A存储到高字节位,再存储B到低字节位上。图解见下图所示。
两种模式存储‘AB’
三、符号定义伪指令
符号定义伪指令是给一个数值、字符串或表达式赋予一个名字。符号定义伪指令有等值伪指令EQU、等号伪指令“=”、符号/标号伪指令LABEL三种。
1.EQU(等值伪指令)
等值伪指令EQU用来给数值、字符串或表达式定义一个等价的符号,其格式如下:
例:为常量定义一个符号:
ONE EQU1
TWO EQU2
字符串常量符号SUM EQU ONE+TWO
GREETING EQU'How are you!'
符号名代表字符串“How are you!”
还可以给变量或标号定义新的类型属性并取一个新名字:
例:BYTES DB4DUP(?)
FIRSTW EQU WORD PTR BYTES
例:给由地址表达式指出的任意存储单元定义一个符号名:
XYZ EQU[BP+3]
A EQU ARRAY[BX][SI]
B EQU ES:ALPHA;加段前缀的直接寻址引用
2.=(等号伪指令)
其格式如下:
使用“=”定义的符号名可以被重新定义,使符号名具有新值;等号伪指令定义的符号名仅用于代表数值表达式。
习惯上“=”主要用来定义符号常量:
X=18
X=X+1;X的值为19
EQU和“=”的区别:
1.使用EQU伪指令定义的符号名不能与其他符号名重名,符号名必须唯一,且不能
被重新定义,而使用等号伪指令定义的符号名可以重名,可以被重新定义、重新赋值。
2.使用EQU伪指令定义的符号名不仅可以代表某个常数或常数表达式,还可以代表
字符串、关键字、指令码、一串符号(如WORD PTR)等,而使用等号伪指令定义的符号名仅用于代表数值表达式。
LABEL(符号定义伪指令)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。