Ассемблер имеет макросредства, которые определяются программистом. Для этого задаются имя макроса, директива МАСRO. Завершается макроопределение директивой ENDM.
<имя макроопр.> MACRO
<тело макроопред., состоящее из операторов >
ENDM < конец макроопред.>.
Затем в любом месте программы, где необходимо выполнение этих команд кодируется имя макроса. В результате Ассемблер сгенерирует необходимые команды.
Пример: init1 macro
mov ah,09h
lea dx, message
int 21h
endm
В макрокомандах могут использоваться параметры. Рассмотрим для сравнения с предыдущим следующий пример:
init2 macro mess
mov ah,09h
lea dx, mess
int 21h
endm
При использовании макроопределения нужно будет задавать фактические параметры. При этом одно и тоже макроопределение будет выводить на экран разные сообщения, которые будут передаваться через формальный параметр mess. Количество параметров может быть любое и задается через ‘,’.
В программе вызов макроса будет в следующем виде: init2 message1
Макросы лучше собирать в библиотеки и хранить на магнитном диске. Для имени этого файла можно использовать любое имя, например: MACRO.LIB. Подключается этот файл с помощью директивы INCLUDE. В начале текста программы нужно задать директиву:
INCLUDE C:MACRO.LIB
Ненужные макроопределения необходимо отключать. Они перечисляются в директиве PURGE < имена макросов > через запятую.
Можно из одного макроопределения вызывать другое макроопределение.
Если в макроопределении есть метки, то при многократном использовании может возникнуть ошибка при дублировании метки. Для универсальности макроопределения используется директива LOCAL, которая кодируется после директивы MACRO:
LOCAL <имя метки>.
При этом генерируется метка с номером ??0000, ??0001 и т.д.
Так как транслятор является двухпроходовым, то для обработки директивы один раз можно использовать конструкцию:
IF1
INCLUDE C:MACRO.LIB
ENDIF
В Ассемблере существуют директивы повторения, которые повторяют блок операторов до директивы ENDM
N=0
REPT 5
N=N+1
DB N
ENDM
Неопределенные повторения IRP N, <args>
IRP N, <12345>
DB N
ENDM
Генерирует байты DB 1, DB 2, DB 3, DB 4, DB 5.
Для управления выполнением блока операторов по условию используются условные директивы.
IF xx (условие)
ELSE (необязательно)
ENDIF (конец)
IF выражение — если выражение !=0
IFE выражение — если выражение ==0
IF1 обработка при первом проходе
IF2 обработка при втором проходе
IFDEF идентификатор — если определен
IFNDEF идентификатор — если неопределен
IFB <аргум> — если пустой символ
IFNB <аргум> — если не пустой символ
IFIDN <аргум1>,<аргум2> — если две строки идентичны
IFDIF <аргум1>,<аргум2> — если две строки неидентичны
ВЫПОЛНЕНИЕ РАБОТЫ:
1. Выполните индивидуальное задание.
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ
Используя макроопределения решить следующие задачи:
1.8. В киоске продаются газеты — 3 коп. и журнал — 20 коп. Спросить желание покупателя (журнал или газета), получить деньги и распечатать сдачу.
2.9. В соревнованиях участвуют 3 спортсмена. Ввести в программу их результаты и определить лучший.
3.10. Напишите программу, которая получает строку и слово. С помощью макроса определите входит ли данное слово в строку.
4.11. В продаже книг участвует ЭВМ. Составить программу, которая запрашивает стоимость книг, сумму денег, внесенную покупателем, определяет сдачу (если денег больше — печатает на сколько, если равно, то печатает «спасибо», если меньше — то сколько нужно доплатить).
5.12. Составить программу, реализующую эпизод сказки: спрашивает куда предпочитает пойти герой: (направо, налево, прямо) и печатает, что его ждет в каждом случае.
6.13. Написать программу, которая спрашивала бы сокращенное имя, а печатала бы полное. В случае незнакомого имени — печатать «Я с Вами не знакома».
7.14. Ученикам 1-го класса назначается дополнительный стакан молока 200 мл., если их вес меньше 30 кг. Ввести в программу вес каждого ученика, после взвешивания и рассчитать сколько молока потребуется на класс.
ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ
1. Что такое макрокоманда и как она создается в Ассемблере.
2. Использование макрокоманд с параметрами.
3. Как создаются библиотеки макроопределений и как их подключить к программе на языке Ассемблера.
4. Как исключить ассемблирование ненужных макроопределений.
5. Макрокоманды, имеющие в своем определении переходы на метки. Исключение дублирования меток.
6. Использование макрокоманд внутри макроопределений7
7. Директивы, используемые при создании макроопределений.
СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ:
1. Абель П. «Язык Ассемблера для IBM PC и программирования»
М.: Высшая школа, 1992 — 447 c.
2. Джордейн Р. «Справочник программиста персональных компьютеров типа IBM PC, XT и AT» М.: Финансы и статистика, 1992. — 544 с.
3. П.Нортон, Р.Уилтон «IBM PC и PS/2. Руководство по программированию» М.: Радио и связь, 1994г. — 336 с.
4. Г.В.Майко «Ассемблер для IBM PC» Одесса, 1996г.
Создание и использование макроопределений и макрокоманд. Библиотеки макроопределений.
05 Мар, 2009
