学 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


 
   

你可能感兴趣的:(while)