现在的位置: 首页 > 综合 > 正文

WIN32汇编的高级语法

2013年09月16日 ⁄ 综合 ⁄ 共 1037字 ⁄ 字号 评论关闭

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

指令的好处是带来更多的灵活性。

抱歉!评论已关闭.