一个懒人专用文章归档神器,如果你不能成为压路机的一部分,那么你就只能成为道路的一部分 Bala~bala~

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

汇编 懒人 1268℃ 0评论

.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

转载请注明:懒人档案室 » Win32 汇编[30] – 条件及循环伪指令: .IF、.WHILE、.REPEAT 等

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址