Ассемблер имеет макросредства, которые определяются програм-мистом. Для этого задаются имя макроса, директива МАС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
Для управления выполнением блока операторов по условию ис-пользуются условные директивы.
IF xx (условие)
ELSE (необязательно)
ENDIF (конец)
IF выражение — если выражение !=0
IFE выражение — если выражение ==0
IF1 обработка при первом проходе
IF2 обработка при втором проходе
IFDEF идентификатор — если определен
IFNDEF идентификатор — если неопределен
IFB <аргум> — если пустой символ
IFNB <аргум> — если не пустой символ
IFIDN <аргум1>,<аргум2> — если две строки идентичны
IFDIF <аргум1>,<аргум2> — если две строки неидентичны
ВЫПОЛНЕНИЕ РАБОТЫ:
1. Выполните индивидуальное задание.
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ
Используя макроопределения решить следующие задачи:
1. В киоске продаются газеты — 3 коп. и журнал — 20 коп.
Спросить желание покупателя (журнал или газета), получить деньги и распечатать сдачу.
2. В соревнованиях участвуют 3 спортсмена. Ввести в программу их результаты и определить лучший.
3. Напишите программу, которая получает строку и слово. С помощью макроса определите входит ли данное слово в строку.
4. В продаже книг участвует ЭВМ. Составить программу, кото-рая запрашивает стоимость книг, сумму денег, внесенную покупате-лем, определяет сдачу (если денег больше — печатает на сколько, если равно, то печатает «спасибо», если меньше — то сколько нуж-но доплатить).
5. Составить программу, реализующую эпизод сказки: спраши-вает куда предпочитает пойти герой: (направо, налево, прямо) и печатает, что его ждет в каждом случае.
6. Написать программу, которая спрашивала бы сокращенное имя, а печатала бы полное. В случае незнакомого имени — печатать «Я с Вами не знакома».
7. Ученикам 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г.
Ст. преподаватель
кафедры ПОВТ И.А.Васюткина
