На этом шаге мы перечислим условные и циклические конструкции.
Условные конструкции.
.IF <условие>
. . . . .
.ENDIF
.IF <условие>
. . . . .
.ELSE
. . . . .
.ENDIF
.IF <условие_1>
. . . . .
.ELSEIF <условие 2>
. . . . .
.ELSEIF <условие 3>
. . . . .
.ELSE
. . . . .
.ENDIF
Рассмотрим следующий фрагмент, содержащий условную конструкцию и соответствующий ей ассемблерный код.
.IF EAX==12H
MOV ЕАХ,10Н
.ELSE
MOV EAX,15H
.ENDIF
Эквивалентен следующему ассемблерному коду:
CMP ЕАХ,12H
JNE NO_EQ
MOV ЕАХ,10Н
JMP EX_BLOK
NO_EQ:
MOV ЕАХ,15H
EX_BLOK:
Цикл "пока". Общий вид:
.WHILE <условие>
. . . . .
.ENDW
WHILE EAX<64H
ADD ЕАХ,10Н
ENDW
Для MASM:
JMP L2
L1:
ADD ЕАХ, 10Н
L2:
CMP EAX,64H
JB L1
Для TASM:
L1:
CMP ЕАХ,64Н
JNB EXI
ADD ЕАХ,10Н
JMP L1
EXI:
Есть некоторое отличие в том, как два ассемблера транслируют директивы .IF и .WHILE. Транслятор TASM32 производит автоматически оптимизацию на предмет выравнивания по границе учетверенного слова, добавляя дополнительно команды NOP. Это несколько ускоряет выполнение программы, но увеличивает ее объем.
На следующем шаге мы рассмотрим разработку программ, транслируемых как в MASM, так и в TASM.