Win32Asm Tutorial |
![]() |
назад | 10- Преимущества MASM | вперед | ![]() |
10.0 - Преимущества masm
Если вы не используете masm, то можете пропустить этот раздел и попробовать преобразовать все примеры, или прочитать это и пробовать убедить себя, использовать masm. Конечно это ваш собственный выбор. Но masm делает действительно ассемблер намного проще.
10.1 - Конструкции сравнения и повтора
Masm имеет некоторый синтаксис псевдовысокого уровня, чтобы легко создавать конструкции сравнения и повтора:
.IF, .ELSE, .ELSEIF, .ENDIF
.REPEAT, .UNTIL
.WHILE, .ENDW, .BREAK
.CONTINUE
If
Если у вас есть опыт в языках программирования, возможно вы видели что-то вроде if/else конструкций:
.IF eax==1
;eax равен 1
.ELSEIF eax=3
; eax равен 3
.ELSE
; eax не равен 1 и 3
.ENDIF
Эта конструкция очень полезна. Вам не нужно вставлять сравнения и переходы, а только вставте директиву .IF (не забудьте точку перед .IF и .ELSE и т.д.). Вложенности if позволяются:
.IF eax==1
.IF ecx!=2
; eax= 1 и ecx не равно 2
.ENDIF
.ENDIF
Это может быть сделано проще:
.IF (eax==1 && ecx!=2)
; eax = 1 и ecx не равно 2
.ENDIF
== | равно |
!= | не равно |
> | больше |
< | меньше |
>= | больше или равно |
<= | меньше или равно |
& | проверка бита |
! | инверсия ( NOT ) |
&& | логическое 'И' ( AND ) |
|| | логическое 'ИЛИ' ( OR ) |
CARRY? | флаг переноса (cf) установлен? |
OVERFLOW? | флаг переполнения (of) установлен? |
PARITY | флаг паритета (pf) установлен? |
SIGN? | флаг знака (sf) установлен? |
ZERO? | флаг нуля (zf) установлен? |
Repeat
Эта конструкция выполняет блок, пока условие не истинно:
.REPEAT
; код здесь
.UNTIL eax==1
Эта конструкция повторяет код между repeat и until, пока eax не станет равным 1.
While
Конструкция while это инверсия конструкции repeat. Она выполняет блок, пока условие истинно:
.WHILE eax==1
; код здесь
.ENDW
Вы можете использовать директиву .BREAK, чтобы прервать цикл и выйти.