WIN32汇编的高级语法

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 指令的好处是带来更多的灵活性。

你可能感兴趣的:(c,汇编,测试,语言,X86)