1
.条件测试语句
操作符和逻辑运算 |
||
== |
等于 |
变量和操作数之间的比较 |
!= |
不等于 |
变量和操作数之间的比较 |
> |
大于 |
变量和操作数之间的比较 |
>= |
大于等于 |
变量和操作数之间的比较 |
< |
小于 |
变量和操作数之间的比较 |
<= |
小于等于 |
变量和操作数之间的比较 |
& |
位测试 |
将变量和操作数做“与”操作 |
! |
逻辑取反 |
对变量取反或对表达式的结果取反 |
&& |
逻辑与 |
对两个表达式的结果进行逻辑“与”操作 |
|| |
逻辑或 |
对两个表达式的结果进行逻辑“或”操作 |
x==3
eax!=3
(y>=3)&&ebx
(z&1)||!eax
MASM
的条件测试采用的是和
C
语言相同的语法。
对于不含比较符的单个变量或寄存器,
MASM
也将所有非零值认为是“真”,零值认为是“假”
MASM
的条件测试语句有几个限制:
(
1
)表达式的左边只能是变量或寄存器,不能为常数;
(
2
)表达式的两边不能同时为变量,但可以同时是寄存器。
这些限制来自于
80x86
的指令,因为条件测试伪操作符只是简单地把每个表达式翻译成
cmp
或
test
指令,
80x86
的指令集中没有
cmp 0,eax
之类的指令,同时也不允许直接操作两个内存中的数。
标志位的状态条件测试:
CARRY?
表示
Carry
位是否置位
OVERFLOW?
表示
Overflow
位是否置位
PARITY?
表示
Parity
位是否置位
SIGN?
表示
Sign
位是否置位
ZERO?
表示
Zero
位是否置位
2
.分支语句、只能用于无符号数
3
.循环语句
.while
条件测试表达式
指令
[.break [.if
退出条件
]]
[.continue]
.endw
或
.repeat
指令
[.break [.if
退出条件
]]
[.continue]
.until
条件测试表达式
(或
.untilcxz [
条件测试表达式
]
.while
eax > 1
mov
esi,1
.break
.if ebx
.continue
mov
esi,2
.endw
loop
指令可以自动递减
ecx
的值来控制循环,不使用
loop
将会在循环体内多设置一条参数递减的指令,但不用
loop
指令的好处是带来更多的灵活性。