地址表达式是由变量、标号、常量、寄存器(BP、BX、SI、DI)的内容(用寄存器名加方括号表示)和运算符组成的有意义的式子。地址表达式的值一般是偏移地址(在地址表达式的一些运算中,其结果也可以是数值常量),具有段、偏移地址及类型三个属性。单个的变量、标号、寄存器的内容是地址表达式的特例。
地址表达式的运算符可以使用数值表达式的运算符,也可以使用以下一些特殊运算符,下面对这些特殊运算符进行介绍。
1.数值回送操作符
它主要包括TYPE、LENGTH、SIZE、OFFSET、SEG五种。这些操作符把一些特征(属性)或存储地址的一部分作为数值回送。下面分别说明各个操作符的功能。
(1)取类型算符TYPE
指令格式:TYPE变量或标号
如果TYPE后面跟的是变量,则汇编程序将回送该变量类型的字节数:字节类型为l,字类型为2,双字类型为4,四字类型为8,十字节类型为10。如果是标号,则汇编程序将回送代表该标号类型的数值:NEAR型为-1(0FFFFH),FAR型为-2(0FFFEH)。
(2)取变量所含的数据存储单元个数算符LENGTH
指令格式:LENGTH变量
它的取值根据定义变量时数据定义伪指令后面第一个表达式的形式而定,如果第一个表达式为重复子句“n DUP(表达式)”,则取值为n;对于其他情况,则取值为1。
(3)取变量所含的数据存储区大小算符SIZE
指令格式:SIZE变量
它的取值为LENGTH变量*TYPE变量,即等于上述两种算符取值的乘积。
(4)取偏移地址算符OFFSET
指令格式:OFFSET变量或标号
它的取值为其后变量或标号的偏移地址。
(5)取段地址算符SEG
指令格式:SEG变量或标号
它的取值为其后变量或标号所在段的段地址。
2.属性操作符
它主要包括PTR、段操作符“:”、SHORT、THIS、HIGH和LOW六种。
(1)类型运算符PTR
指令格式:类型PTR地址表达式
该运算符用来指明某个变量、标号或地址表达式的类型属性,或使它临时兼有与原定义所不同的类型属性,但保持它原来的段属性和偏移属性,即用来建立一个符号地址,但它本身并不分配存储器,只是用来给已分配的存储器地址赋予另一种类型属性。格式中的类型字段表示所赋予的新的类型属性,对于变量可以是BYTE、WORD、DWORD,对于标号可以是NEAR、FAR。(www.xing528.com)
(2)段操作符“:”
指令格式:段寄存器名:地址表达式
或 段名:地址表达式
该运算符用来临时给变量、标号或地址表达式指定一个段属性,且只在所出现的语句中有效,它并不改变地址表达式的偏移属性和类型属性。
(3)短转移算符SHORT
用来修饰JMP指令中转向地址的属性,指出转向地址是在下一条地址的-128~+127B范围之内。
例如:JMP SHORT TAG
(4)定义类型算符THIS
指令格式:THIS类型
它与PTR具有类型的功能,可以为变量、标号或地址表达式指定类型,并与伪指令EQU或=连用。例如:
由上例可知,THIS和PTR在具体用法上有些区别。用THIS定义的变量与下一条语句定义的变量具有相同的段属性和偏移属性,而用PTR定义的变量则与某个在此之前已定义的变量具有相同的段属性和偏移属性。变量A用THIS定义,可以先定义,它与后定义的变量B具有相同的段属性和偏移属性。变量D用PTR定义,指定它与已定义的变量B具有相同的段属性和偏移属性。
(5)字节分离算符HIGH和LOW
指令格式:HIGH或LOW常量或地址表达式
其中,HIGH取常量或地址表达式的高位字节,而LOW取其低位字节。
以上介绍了一些常用的运算符,它们与常量、变量、标号和寄存器等组成表达式,在进行表达式的计算时,这些运算符存在一个优先级的问题。下面给出这些算符的优先级别,从高到低排列如下:
①括号的项。
②LENGTH、SIZE。
③PTR、OFFSET、SEG、TYPE、THIS及段操作符“:”。
④HIGH、LOW。
⑤*、/、MOD、SHL、SHR。
⑥EQ、NE、LT、LE、GT、GE。
⑦逻辑运算:NOT、AND、OR、XOR。
⑧SHORT。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。