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


         

встретил оператора ENDIF, закрывающего условный


             0004  ????????????????       EIGHT_BYTE      DQ      ?
             000C  ???????????????????      TEN_BYTE        DT      ?
                 ?
                                          FLD
             0016  9B D9 C1            1              DB      09BH,0D9H,0C1H        ;
                                          FLD     1
             0019  9B D9 C1            1                    DB      09BH,0D9H,0C0H+1
                                          FLD     FOUR_BYTE
             001C  9B            1                    DB      09BH
             001D  D9 06 0000 R        1                    ESC     8,FOUR_BYTE     ;
             0021  9B            1                    DB      09BH
             0022  DB 2E 0000 R        1                    ESC     01DH,FOUR_BYTE  ;
                                          FLD     EIGHT_BYTE
             0026  9B            1                    DB      09BH
             0027  DD 06 0004 R        1                    ESC     40,EIGHT_BYTE   ;
                                          FLD     TEN_BYTE
 
             002B                   CODE    ENDS
                                          END
 
            Фиг. 6.6 Вложенное условное ассемблирование
    встретил оператора ENDIF, закрывающего условный оператор. Это
    происходит в результате раннего входа из макрокоманды. Хотя это и
    нежелательно, но ни к каким разрушительным последствиям не
    приводит. Если оператор EXITM расположен вне условного оператора,
    то предупреждение не выводится.
      Оператор EXITM необходим в данной макрокоманде, так как
    ассемблер проверяет все условные операторы, даже если они не
    транслируются. В нашем случае, если операнд SOURCE пуст, оператор
    ELSE предотвращает генерацию всех других вариантов команды FLD.
    Однако, продолжая просмотр, ассемблер проверяет оператора
 
      IFE TYPE SOURCE
 
      хотя и не может сгенерировать никакого кода. Если SOURCE пусто,
    то ассемблер фиксирует синтаксическую ошибку. Вы можете не обращать
    внимания на эту ошибку, но принимать трансляцию с сообщениями об
    ошибках идет в разрез с нашими правилами. С другой стороны,
    использование оператора EXITM приводит к предупреждению "Открытое
    условие". Оно нежелательно, но это меньшее из двух зол.
 
      Заметим, что макрокоманда FLD использует ветвь ELSE чтобы
    указать на необходимость вычисления выражения в поле операнда
    только в случае непустоты этого поля. IF-выражения, содержащие
    оператор TYPE, определяют, какой тип операнда использовался при
    вызове макрокоманды. Хотя это не упоминается в Руководстве по
    Макроассемблеру, оператор TYPE возвращает значение 0, если операнд
    является не символическим именем, а константой. Выбор такого
    способа в данной макрокоманде вызван скорее соображениями
    работоспособности, чем стремлением к элегантности.

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