4.3.2 表达式

 
表达式是常数、寄存器、标号、变量与一些操作符相组合的序列,可以有数字表达式和地址表达式两种。在汇编期间,汇编程序按照一定的优先规则对表达式进行计算后可得到一个数值或一个地址。

  常用的表达式操作符介绍如下:

  (1) 算术操作符
  算术操作符有+、-、*、/ 和MOD。
  MOD是指除法运算后得到的余数,如19/7的商是2,而19 MOD 7则为5(余数)。

  (2) 逻辑操作符
  逻辑操作符有:AND(与)、OR(或)、XOR(异或)、NOT(非)。
  逻辑操作符都是按位操作的,只能用于数字表达式中。逻辑操作符要求汇编程序对其前后两个操作数(或表达式)作指定的逻辑操作。

  (3) 关系操作符
  关系操作符有:EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。
  关系操作符的两个操作数必须都是数字或是同一段内的两个存储器地址。计算的结果应为逻辑值:结果为真,表示为0FFFFH;结果为假,则表示为0。

  (4) 数值回送操作符
  数值回送操作符有:TYPE、LENGTH、SIZE、OFFSET、SEG等。
  数值操作符把一些特征或存储器地址的一部分作为数值回送。

  · TYPE
  格式为:TYPE 表达式
  如果表达式是变量,则汇编程序将回送该变量的以字节数表示的类型:DB为1,DW为2,DD为4,DF为6,DQ为8,DT为10。如果表达式是标号,则汇编程序将回送代表该标号类型的数值:NEAR为 -1,FAR为 -2。如果表达式为常数,则应回送0。

  · LENGTH
  格式为:LENGTH 变量
  对于变量中使用DUP的情况,汇编程序将回送分配给该变量的单元数,而对于其他情况则送1。

  · SIZE
  格式为:SIZE 变量
  汇编程序应回送分配给该变量的字节数。但是,此值是LENGTH值和TYPE值的乘积。

  · OFFSET
  格式为:OFFSET 变量或标号
  汇编程序将回送变量或标号的偏移地址值。

  · SEG
  格式为:SEG 变量或标号
  汇编程序将回送变量或标号的段地址值。

  (5) 属性操作符
  属性操作符主要有:PTR、段操作符、SHORT、THIS、HIGH、LOW等。

  · PTR
  格式为:类型 PTR 符号地址
  PTR用来给已分配的存储地址(用符号地址表示)赋予另一种属性,使该地址具有另一种类型。
  类型可有BYTE、WORD、DWORD、FWORD、QWORD、TBYTE、NEAR和FAR等几种,所以PTR也可以用来建立字、双字、四字或段内及段间的指令单元等。

  · 段操作符
  段操作符用来表示一个标量、变量或地址表达式的段属性。
  格式为:
  段寄存器∶地址表达式
  段名∶地址表达式
  组名∶地址表达式

  · SHORT
  用来修饰JMP指令中转向地址的属性,指出转向地址是在下一条指令地址的±127个字节范围之内。

  · THIS
  格式为: THIS 属性或类型
  THIS可以象PTR一样建立一个指定类型(BYTE、WORD、DWORD)或指定距离(NEAR或FAR)的地址操作数。该操作数的段地址和偏移地址与下一个存储单元地址相同。

  · HIGH和LOW
  称为字节分离操作符,它接收一个数或地址表达式,HIGH取其高位字节,LOW取其低位字节。

  · 操作符的优先级
  我们知道表达式是常数、寄存器、标号、变量和操作符的组合,在计算表达式时,应该首先计算优先级高的操作符,然后从左到右地对优先级相同的操作符进行计算。括号也可以改变计算次序,括号内的表达式应优先计算。