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