• 学 Win32 汇编[30] 条件及循环伪指令: .IF、.WHILE、.REPEAT 等



    .IF、.ELSEIF、.ELSE、.ENDIF: 条件伪指令
    
    ;可以使用和 C 语言类似的条判断:
    a == b
    a != b
    a >  b
    a >= b
    a <  b
    a <= b
    a && b
    a &  b
    a || b
    !a
    
    ;还可以直接判断几个常用的标志位:
    CARRY?    ;进位标志
    OVERFLOW? ;溢出标志
    PARITY?   ;奇偶标志
    SIGN?     ;符号标志
    ZERO?     ;零标志
    

    ; Test30_1.asm
    .386
    .model flat, stdcall
    
    include    windows.inc
    include    kernel32.inc
    include    masm32.inc
    include    debug.inc
    includelib kernel32.lib
    includelib masm32.lib
    includelib debug.lib
    
    .code
    main proc
        xor eax, eax
        .if !eax
            PrintText 'EAX = 0'
        .endif
        ;
        mov eax, 3
        .if eax == 3
            PrintText 'EAX = 3'
        .else
            PrintText 'EAX != 3'
        .endif
        ;
        mov eax, 4
        .if eax == 3
            PrintText 'EAX = 3'
        .elseif eax > 3
            PrintText 'EAX > 3'
        .else
            PrintText 'EAX < 3'
        .endif
        ret
    main endp
    end main
    
    ; Test30_2.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc mov eax, 1 mov edx, 0 .if eax && edx PrintText '&&' .endif .if eax || edx PrintText '||' ; .endif .if eax & edx PrintText '&' .endif ret main endp end main

    .WHILE、.ENDW: While 循环伪指令:
    
    ; Test30_4.asm
    .386
    .model flat, stdcall
    
    include    windows.inc
    include    kernel32.inc
    include    masm32.inc
    include    debug.inc
    includelib kernel32.lib
    includelib masm32.lib
    includelib debug.lib
    
    .code
    main proc
        mov eax, 9
        .while eax > 0 
            PrintDec eax
            dec eax
        .endw    
        ret
    main endp
    end main
    

    .REPEAT、.UNTIL: Repeat 循环伪指令:
    
    ; Test30_5.asm
    .386
    .model flat, stdcall
    
    include    windows.inc
    include    kernel32.inc
    include    masm32.inc
    include    debug.inc
    includelib kernel32.lib
    includelib masm32.lib
    includelib debug.lib
    
    .code
    main proc
        mov eax, 9
        .repeat
            PrintDec eax
            dec eax
        .until eax == 0  
        ret
    main endp
    end main
    

    .While 与 .Repeat 都支持 .Break 和 .Continue

    .WHILE 与 .BREAK:
    
    ; Test30_6.asm
    .386
    .model flat, stdcall
    
    include    windows.inc
    include    kernel32.inc
    include    masm32.inc
    include    debug.inc
    includelib kernel32.lib
    includelib masm32.lib
    includelib debug.lib
    
    .code
    main proc
        mov eax, 9
        .while TRUE
            PrintDec eax
            dec eax
        .break .if eax == 5
        .endw    
        ret
    main endp
    end main
    

    .REPEAT 与 .CONTINUE:
    
    ; Test30_7.asm
    .386
    .model flat, stdcall
    
    include    windows.inc
    include    kernel32.inc
    include    masm32.inc
    include    debug.inc
    includelib kernel32.lib
    includelib masm32.lib
    includelib debug.lib
    
    .code
    main proc
        mov eax, 0
        .repeat
            inc eax
        .continue .if eax == 2
            PrintDec eax
        .until eax > 3
        ret
    main endp
    end main
    

  • 相关阅读:
    1509 -- Glass Beads POJ
    1043: [HAOI2008]下落的圆盘
    面向对象的特性一:封装性
    java的值传递机制
    可变参数的形参方法
    方法的重载
    类及对象
    面向对象
    数组的常用算法问题
    数组的常见异常
  • 原文地址:https://www.cnblogs.com/del/p/1717408.html
Copyright © 2020-2023  润新知