На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 1 / Структуры как параметры подпрограмм Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Структуры как параметры подпрограмм

Мы ввели структуры, как способ решения задачи по написанию универсальной процедуры вызова подпрограмм. Разрешите вернуться к этой проблеме. Наилучший вариант передачи параметров подпрограмме - через адрес структуры. В качестве примера передадим данные нашей подпрограмме в одном из элементов списка чисел, определенного при рассмотрении структур. Адреса всегда состоят из сегмента и смещения. Таким образом, макро, вызывающее подпрограмму и передающее параметры, будет выглядеть так:



            @FcnCall  MACRO  Fnctn,StrucAddr   ;адрес подпрограммы и
                                               ;структуры
                     push   offset  StrucAddr
                     push   segment StrucAddr
                     call   Fnctn

Иногда случается, что Вам необходимо ассемблировать команду, которую ассемблер не поддерживает. Такое необходимо в ранних версиях MASM, где из-за ошибки не ассемблируется конкретный тип команды перехода. Подобная проблема может также возникнуть при работе на новом процессоре, некоторые команды которого MASM еще не поддерживает. Один из путей решения этой проблемы заключается в использовании макро, которое ассемблирует данные, как если бы выполнялась команда из Руководства фирмы Intel. Например, следующее макро имитирует выполнение команды ближнего перехода.



            @JmpShort  MACRO  destin
                    db        0EBh  ;1-ый байт команды перехода
                    n = destin - *  ;вычислить расстояние перехода
                    IFE       (n LE 255)  ;в байт поместится?
                      db      n           ;расстояние перехода
                    ELSE
                      .ERR         ;выдать сообщение об ошибке
                      %OUT Ошибка в макро @JumpShort.
                    ENDIF          ;конец проверки условия
                    db         90h   ;3-ий байт команды
                                     ;короткого перехода
                    ENDM

Такой пример был выбран для простоты. При создании более сложных команд необходимы и более сложные макросы. Чтобы подбодрить Вас, сообщим, что некоторые программисты создавали полные кроссассемблеры, используя немногим больше, чем описано в данном методе.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz