7.4.5 高级语言结构中使用的表达式
在这一节里,我们将介绍高级语言结构中允许使用的表达式。
表7.1说明这些表达式中允许使用的操作符。
表达式的格式可分为以下两类:
第一类用来测试条件码的值,如:
ZERO?
CARRY?
OVERFLOW?
SIGN?
PARITY?
如所指定的条件码位为1,则表达式的值为真。可以用 ! 放在表达式之前来测试相反条件。
另一类是用寄存器reg、存储单元memory和常数作为操作数构成的表达式,如:
reg
memory
reg op reg
reg op memory
reg op constant
memory op constant
其中,reg和memory用来判断其内容是否为零。如为零,则表达式的值为真。后面四种格式中的op可用表7.1中除 ! 外的操作符来作比较或逻辑操作。这些表达式之前也可加上
! 来测试相反条件。
这些操作符的优先级规定如下:
! 的优先级最高,其次是比较操作符,然后是&&,最后是||。也可以用括号来改变默认的优先级。
下面我们再看一个包含复杂表达式的例子7.38
最后要注意的是:汇编程序在作 > 或 < 的比较操作时是怎样判别相比较的操作数是带符号数还是无符号数的呢?
在第四章里,我们已经说明在MASM6中除用DB、DW、DD等伪操作定义数据外,还可用与其等价的BYTE、WORD、DWORD等伪操作来定义数据。实际上,MASM6中还增加了专门用于定义带符号数的伪操作SBYTE、SWORD和SDWORD。如数据段中的变量已用带符号数的伪操作加以定义,则汇编程序将对该变量作带符号数比较。对于寄存器的内容则可在寄存器前加上前缀SBYTE
PTR、SWORD PTR或SDWORD PTR来说明其内容为带符号数。如不说明,则汇编程序将默认其为无符号数。如在例7.38中,若将表达式改为
(AX == VAR) && (SWORD PTR BX >= 10)
和
(AX == VAR) || (SWORD PTR BX >= 10)
则在汇编程序所产生的代码中,原来的无符号数转移指令JB将生成为带符号数转移指令JL。
另外一个解决这个问题的办法是用ASSUME伪操作。例7.38中如保持原表达式不变,在程序中加入ASSUME BX:SWORD,则汇编程序产生的代码中也会用JL取代JB。
|