На этом шаге мы перечислим условные и циклические конструкции.
Условные конструкции.
.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.