Читать «Assembler. Программирование на языке ассемблера IBM PC» онлайн - страница 172
Unknown Author
Данный модуль должен быть подсоединен к программе на этапе ее компоновки. Для этого надо вызвать компоновщик по следующему приказу (считаем, что программа одномодульна и хранится в файле Р):
LINK P.OBJ+IOPROC.OBJ, Р.ЕХЕ;
Таким образом, полный цикл обработки программы (трансляция, компоновка и счет) реализуется следующими тремя приказами ОС:
MASM P.ASM,P.OBJ,P.LST;
LINK P.OBJ+IOPROC.OBJ, Р.ЕХЕ; Р.ЕХЕ
Если бы были только процедуры из модуля IOPROC, тогда в программах пришлось бы выписывать по несколько комацд обращения к этим процедурам. Например, обращение к процедуре вывода знакового числа выглядит так:
MOV АХ,Х MOV DL,H CALL PROCOUTINT
;выводимое число ;ширина поля вывода ;вызов процедуры
Это достаточно громоздко и не очень удобно, т. к. нужно помнить о том, через какой регистр какой параметр надо передавать. Для того чтобы сделать вызовы этих процедур более короткими и наглядными, обращения ко всем этим процедурам оформлены как макросы. Например, указанные три команды описаны в виде макроса OUTINT, поэтому вместо них достаточно выписать только одну строчку - макрокоманду
OUTINT х,п
которая при трансляции программы автоматически заменится на эти команды.
Отметим, что некоторые операции (например, FINISH) столь просты, в них всего две-три команды, что их невыгодно реализовывать в виде процедур. Так вот, и эти операции описаны в виде макросов, только в этом случае макрос определяет не обращение к процедуре, а саму операцию. Описание всех этих макросов собрано в отдельном файле с названием IO.ASM (текст его также приведен ниже).
Поскольку в этом файле собраны только макроопределения, а по ним, как известно, не формируются никакие машинные команды, то данный файл не образует модуль, который можно было бы транслировать отдельно. Поэтому данный файл подключается к программе не. на- этапе компоновки, как модуль IOPROC.OBJ, а еще на этапе трансляции - по директиве INCLUDE IO.ASM. По ней в текст программы вставляются все макроопределения из файла, после чего в программе уже можно пользователя макрокомандами типа OUTINT х,п и FINISH.
Далее приводятся тексты файлов IOPROC.ASM и IO.ASM без дополнительных пояснений, поскольку все используемые в них приемы программирования так или иначе были рассмотрены в предыдущих частях книги, а кроме того, эти тексты снабжены необходимыми комментариями. Отметим лишь, что директивы .XUST и .LIST, используемые в файле IO.ASM, объясняются в разд. 14.4.
; Модуль IOPROC: Процедуры ввода-вывода v
public procnl, procoutnum, procflush, procinch, procinint
iocode segment
assume cs:iocode
; ************************************************
; ВЫВОД НА ЭКРАН
;************************************************
Перевод курсора ва новую строку экрана Обращение: call procnl Параметров нет
Procnl proc far push dx
(курсор на начало строки) (курсор на следующую строку)
push ах
mov ah,2
mov dl,13
; CR
int 21h
mov dl,10
; LF
int 21h
pop ax
pop dx
ret
procnl endp
Вывод целого числа-слова со знаком или без знака Обращение: call procoutnum На входе: ах - выводимое число