Assembler для начинающих


         

Ассемблирование по условию - часть 5


            Фиг. 6.5 Операторы IF для условного ассемблирования
 
      Рассмотрим  еще один  пример, чтобы  познакомиться с некоторыми
    другими  вариантами  использования    ассемблирования по условию. На
    Фиг. 6.6  показано применение  другого условного оператора    - IFB, а
    также  использование вложенных  условных операторов.  Макрокомандой
    здесь  является  FLD  -  команда  загрузки  сопроцессора  8087. Для
    транслирования   этой   команды    требуется   несколько   условных
    операторов, так как она может применяться в следующих вариантах:
 
      FLD
      FLD 1
      FLD короткое_вещественное
      FLD длинное_вещественное
      FLD временное_вещественное
 
      Поле операнда макрокоманды FLD может быть пустым, содержать
    константу, или четырехбайтовую, восьмибайтовую либо десятибайтовую
    переменную. Макрокоманда должна распознать каждый из перечисленныз
    случаев и сгенерировать правильный программный код. (все эти типы
    данных рассмотрены очень подробно в гл.7.)
      Оператор IFB проверяет наличие операнда. Если операнд
    отсутствует, то ассемблер генерирует соответствующий этому случаю
    программный код, так как оператор IFB вырабатывает значение
    "истина". Это иллюстрирует первый вызов макрокоманды, когда
    генерируется код
 
      DB 09BH,0D9H,0C 1H
 
      Оператор EXITM, содержащийся в этой части условного оператора
    IF, реализует выход из макрокоманды. Каждый раз, когда при
    расширении макрокоманды ассемблеру встречается этот оператор,
    расширение заканчивается, как если бы встретился ENDM. В данном
    случае ассемблер пропускает оставшуюся часть макроопределения. При
    таком выходе из макрокоманды в ассемблерном листинге появляется
    предупреждающее сообщение "Open conditionals:1" ("Незавершенные
    условные операторы: 1"). Оно предупреждает вас, что ассемблер не Mincho"'>            Microsoft (R) Macro Assembler Version 5.00              4/2/89 16:06:47



Содержание  Назад  Вперед