WIN32汇编的高级语法

    技术2026-08-06  9

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

    最新回复(0)