Загрузка...

ЛАБОРАТОРНАЯ РАБОТА 4. Создание и использование макроопределений и макрокоманд. Директивы условного ассемблирования.


ЛАБОРАТОРНАЯ РАБОТА 4

Тема 8. Создание и использование макроопределений и макрокоманд.

Директивы условного ассемблирования

Ассемблер имеет возможность создания своих макросредств. Для этого задаются: имя макроса, директива MACRO и различные команды ассемблера, которые должен генерировать данный макрос. Завершает все директива ENDM.

<NAME.>   MACRO

<тело макроопределения >

ENDM

Затем в любом месте программы, где необходимо выполнение этих команд, достаточно указать имя макроса. В результате Ассемблер сгенерирует необходимые команды.

Использование макрокоманд позволяет:

  • Упростить и сократить код программы;
  • Сделать более понятной;
  • Уменьшить число ошибок.

Макроопределение должно находиться до определения сегмента данных.

В макрокомандах могут быть параметры. В этом случае в определении макроса используются формальные параметры, а при вызове указываются фактические.

write        macro  mess

mov     ah,09h

lea       dx, mess

int        21h

endm

В программе ставится вызов макрокоманды WRITE MESSEGE.

Количество параметров может быть любое длиной не более 120 колонок через «,».

Макроопределение может содержать ссылку на другое макроопределение (макрокоманда внутри макрорасширения).

В некоторых макрокомандах требуется определить метки. Но при дублировании макроса возникает ошибка из-за повторения имен. Для универсальности используется директива LOCAL, которая указывается после директивы MACRO.

LOCAL <метка1>,<метка1>…

. . .

<метка1>:

. . .

ENDM

 

Вместо имени метки генерируются метки ??0000, ??0001, ??0002 и т.д.

Все макрокоманды можно записать в отдельный файл (имя файла любое) и подключать его к основной программе командой

INCLUDE С:\MACRO.LIB

Для исключения не нужных макрокоманд указывается команда

PURGE имя1, имя2, ….

Так как транслятор является двухпроходовым, то для обработки директивы один раз можно использовать конструкцию:

IF1

INCLUDE C:MACRO.LIB

ENDIF

 

Директивы повторения последовательности строк

while конст. выражение

последов. строк

endm

rept конст. выражение

последов. строк

endm

Директивы условного ассемблирования

IFxxx

Операторы

ELSE

Операторы

ENDIF

     IF лог.выражение

     IFE лог. выражение

Выполняет проверку выражения. IF обеспечивает ассемблирование, если выражение истинно (!=0), а IFЕ, если выражение ложно (==0).

EQ      – равно                      GT       — больше

NE      — не равно                  GE      — больше или равно

LT       — меньше                    NOT    — не равно

LE       — меньше или равно  AND, OR, XOR

 

  IFDEF идентификатор

  IFNDEF идентификатор

Команда проверяет было ли определено указанное имя. Это имя представляет собой метку, переменную или символьное имя. Директива IFDEF используется, если имя было определено, а IFNDEF, если имя не было определено.

  IFB <аргум>

  IFNB <аргум>

 

Проверяет значение заданного аргумента. IFB — если аргумент пустой. IFNB — если аргумент не пустой. Аргументами могут быть имена, числа, выражения. Скобки обязательны. Удобно использовать для проверки пустых параметров в макрокомандах (если было задано меньше параметров, то им присваивается 0).

  IFIDN <аргум1>,<аргум2>

  IFDIF <аргум1>,<аргум2>

 

Сопоставляют указанные аргум1 и аргум2. IFIDN сравнивает, если они идентичны (посимвольно совпадают), IFDIF – если, они различны. В качестве аргументов могут быть любые имена, числа, выражения. Скобки обязательно.

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ

Используя макроопределения решить следующие задачи:

  1. В киоске  продаются  газеты — 3 коп. и журнал — 20 коп. Спросить   желание   покупателя  (журнал  или  газета),  получить деньги и распечатать сдачу.
  2. Напишите программу,  которая получает строку и слово. С помощью макроса определите входит ли данное слово в строку.
  3. В продаже книг участвует ЭВМ. Составить программу, которая запрашивает стоимость книг, сумму денег, внесенную покупателем,  определяет  сдачу (если денег больше — печатает на сколько, если  равно, то печатает «спасибо», если меньше — то сколько нужно доплатить).
  4. Даны три точки A(x1, y1), В(х2, у2) и С(х3, у3). Определить, какая из них ближе к началу координат (вычисление корня квадратного выполнить приблизительно).
  5. Дана длина ребра куба. Найти площадь грани, площадь полной поверхности и объем этого куба.
  6. Составить программу, реализующую эпизод сказки: спрашивает  куда  предпочитает  пойти герой: (направо, налево, прямо) и печатает, что его ждет в каждом случае.
  7. Написать программу,  которая           спрашивала бы сокращенное имя,  а печатала бы полное. В случае незнакомого имени – печатать «Я с Вами не знакома».
  8. Ученикам 1-го  класса назначается дополнительный стакан молока       200  мл., если их вес меньше 30 кг. Ввести в программу вес  каждого  ученика,        после  взвешивания  и  рассчитать сколько молока потребуется на класс.
  9. Услуги телефонной сети оплачиваются по следующему правилу: за разговоры до А минут в месяц оплачиваются В p., а разговоры сверх установленной нормы оплачиваются из расчета С р. в минуту. Написать программу, вычисляющую плату за пользование телефоном для введенного времени разговоров за месяц.
  10. Грузовой автомобиль выехал из одного города в другой со скоростью vl км/ч. Через t ч в этом же направлении выехал легковой автомобиль со скоростью v2 км/ч. Составить программу, определяющую, догонит ли легковой автомобиль грузовой через tl ч после своего выезда.
  11. Напишите программу, в которой вводится массив целых чисел. С помощью макроса отсортируйте массив любым известным алгоритмом.
  12. Напишите программу, в которой вводятся целые числа а, b, c. Найти max{min(a, b), min(c, d)}, для чего написать макрокоманды определения max и min.
  13. Даны три точки A(x1, y1), В(х2, у2) и С(х3, у3). Определить, будут ли они расположены на одной прямой. Если нет, то вычислить <ABC.
  14. Заданы координаты трех вершин треугольника (х1, y1), (х2, у2), (х3, у3). Найти его периметр и площадь.

ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ

  1. Что такое макрокоманда и как она создается в Ассемблере.
  2. Как указывается и обрабатывается макрокоманда в программе?
  3. Использование макрокоманд с параметрами.
  4. Как создаются библиотеки макроопределений и как их подключить к программе на языке Ассемблера.
  5. Как исключить ассемблирование ненужных макроопределений.
  6. Как исключить дублирование меток в макрокоманде?
  7. Использование макрокоманд внутри макроопределений.

Директивы условного ассемблирования.

Загрузка...