学 Win32 汇编[30] - 条件及循环伪指令: .IF、.WHILE、.REPEAT 等
.IF、.ELSEIF、.ELSE、.ENDIF: 条件伪指令
;可以使用和 C 语言类似的条判断:a == ba != ba > ba >= ba < ba <= ba && ba & ba || b!a;还可以直接判断几个常用的标志位:CARRY? ;进位标志OVERFLOW? ;溢出标志PARITY? ;奇偶标志SIGN?? ;符号标志ZERO?? ;零标志
?
; Test30_1.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain 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? retmain endpend main; Test30_2.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc? mov eax, 1? mov edx, 0? .if eax && edx? ? PrintText '&&'? .endif? ? .if eax || edx? ? PrintText '||' ;? .endif? ? .if eax & edx? ? PrintText '&'? .endif? retmain endpend main
.WHILE、.ENDW: While 循环伪指令:
; Test30_4.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc? mov eax, 9? .while eax > 0 ? ? PrintDec eax? ? dec eax? .endw? ? retmain endpend main
.REPEAT、.UNTIL: Repeat 循环伪指令:
; Test30_5.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc? mov eax, 9? .repeat? ? PrintDec eax? ? dec eax? .until eax == 0 ? retmain endpend main
.While 与 .Repeat 都支持 .Break 和 .Continue
.WHILE 与 .BREAK:
; Test30_6.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc? mov eax, 9? .while TRUE? ? PrintDec eax? ? dec eax? .break .if eax == 5? .endw? ? retmain endpend main
.REPEAT 与 .CONTINUE:
; Test30_7.asm.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc? mov eax, 0? .repeat? ? inc eax? .continue .if eax == 2? ? PrintDec eax? .until eax > 3? retmain endpend main