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

2021/4/30 12:25:08

本文主要是介绍学 Win32 汇编[30] - 条件及循环伪指令: .IF、.WHILE、.REPEAT 等,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

学 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

posted on 2010-04-21 17:26  万一  阅读(6424)  评论(0)  编辑  收藏

这篇关于学 Win32 汇编[30] - 条件及循环伪指令: .IF、.WHILE、.REPEAT 等的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程