Справочник по языку Ассемблера IBM PC



         

Макрокоманды - часть 3


/p>

В данном случае в исходный текст программы перед началом компиляции TASM вместо строки include iomac.inc вставит строки из файла iomac.inc. Но вставленный текст будет отличаться от оригинала тем, что в нем будут отсутствовать макроопределения _outstr и _exit.

А теперь вернемся к программе из . Проанализируем ее текст, выявим повторяющиеся участки и составим для них макроопределения (листинг 2).

Листинг 2. Пример 1 создания и использования макрокоманд ;prg_3_1.asm с макроопределениями init_ds macro

;Макрос настройки ds на сегмент данных mov ax,data mov ds,ax endm

out_str macro str ;Макрос вывода строки на экран. ;На входе — выводимая строка. ;На выходе - сообщение на экране. push ax mov ah,09h mov dx,offset str int 21h pop ax endm

clear_r macro rg ;очистка регистра rg xor rg,rg endm

get_char macro ;ввод символа ;введенный символ в al mov ah,1h int 21h endm

conv_16_2 macro ;макрос преобразования символа шестнадцатеричной цифры ;в ее двоичный эквивалент в al sub dl,30h cmp dl,9h jle $+5 sub dl,7h endm

exit macro ;макрос конца программы mov ax,4c00h int 21h endm

data segment para public 'data' message db 'Введите две шестнадцатеричные цифры (буквы A,B,C,D,E,F — прописные): $' data ends

stk segment stack db 256 dup('?') stk ends

code segment para public 'code' assume cs:code,ds:data,ss:stk main proc init_ds out_str message

clear_r ax get_char mov dl,al conv_16_2 mov cl,4h shl dl,cl get_char conv_16_2 add dl,al xchg dl,al ;результат в al exit main endp code ends end main

В листинге 2 в строках , , , , , описаны макроопределения. Их назначение приведено сразу после заголовка в теле каждого макроопределения.

Все эти макроопределения можно использовать и при написании других программ. Посмотрите на модернизированный исходный текст программы из листинга 3.1 в листинге 2 (строки ). Если не обращать внимания на некоторые неясные моменты, то сам сегмент кода стал внешне более читабельным и даже можно сказать, что в нем появился какой то смысл.

Функционально макроопределения похожи на процедуры.
Сходство их в том, что и те, и другие достаточно один раз где-то описать, а затем вызывать их специальным образом. На этом их сходство заканчивается, и начинаются различия, которые в зависимости от целевой установки можно рассматривать и как достоинства и как недостатки:




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