WIN32汇编的高级语法

来源:互联网 发布:小米盒子 软件 编辑:程序博客网 时间:2024/06/04 15:19

1.条件测试语句

 

操作符和逻辑运算                            

==

等于

变量和操作数之间的比较

!=

不等于

变量和操作数之间的比较

>

大于

变量和操作数之间的比较

>=

大于等于

变量和操作数之间的比较

<

小于

变量和操作数之间的比较

<=

小于等于

变量和操作数之间的比较

&

位测试

将变量和操作数做“与”操作

!

逻辑取反

对变量取反或对表达式的结果取反

&&

逻辑与

对两个表达式的结果进行逻辑“与”操作

||

逻辑或

对两个表达式的结果进行逻辑“或”操作

x==3

eax!=3

(y>=3)&&ebx

(z&1)||!eax    

MASM的条件测试采用的是和C语言相同的语法。对于不含比较符的单个变量或寄存器,MASM也将所有非零值认为是“真”,零值认为是“假”

MASM的条件测试语句有几个限制:

1)表达式的左边只能是变量或寄存器,不能为常数;

2)表达式的两边不能同时为变量,但可以同时是寄存器。

这些限制来自于80x86的指令,因为条件测试伪操作符只是简单地把每个表达式翻译成cmptest指令,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指令的好处是带来更多的灵活性。

原创粉丝点击