Шаг 57.
Директивы и средства ассемблера. Управляющие конструкции

    На этом шаге мы перечислим условные и циклические конструкции.

    Условные конструкции.

    Рассмотрим следующий фрагмент, содержащий условную конструкцию и соответствующий ей ассемблерный код.

    .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.




Предыдущий шаг Содержание Следующий шаг