.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