Ассемблер для Windows


Конструкции времени исполнения программы



Конструкции времени исполнения программы

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.



Содержание раздела