Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Макрокоманды




 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ:

1. Для выполнения лабораторной работы вы должны войти в каталог группы из панели NORTON. Каждый студент должен иметь в каталоге группы свой личный каталог. Все программы должны создаваться и записываться в личном каталоге студента.

2. Для создания макрокоманды (макроса) задаются имя макроса, директива MACRO, различные ассемблерные команды, которые должен генерировать данный макрос, и для завершения макроопределения - директива ENDM. Затем в любом месте программы, где необходимо выполнение определенных в макрокоманде команд, достаточно закодировать имя макроса. В результате ассемблер сгенерирует необходимые команды.

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

- упростить и сократить исходный текст программы;

- сделать программу более понятной;

- уменьшить число возможных ошибок кодирования;

 

Примерами макрокоманд могут быть операции ввода-вывода, связанные с инициализацией регистров и выполнением прерываний, преобразование ASCII двоичного форматов данных, арифметические операции над длинными полями, обработка строковых данных, деление с помощью вычитания.

3. Макроопределение должно находиться до определения сегмента. Рассмотрим пример простого макроопределения по имени INIT1, которое инициализирует сегментные регистры для ЕХЕ-программы:

 

INIT1 MACRO;Начало

ASSUME CS:CSEG,DS:DSEG,SS:STACK,ES:DSEG;

PUSH DS;Тело

SUB AX,AX;макро-

PUSH AX;опре-

MOV AX,DSEG;деле-

MOV DS,AX;ния

MOV ES,AX;

ENDM;Конец

 

Директива MACRO указывает ассемблеру, что следующие команды до директивы ENDM являются частью макроопределения. Имя макрокоманды - INIT1, хотя здесь возможны другие правильные уникальные ассемблерные имена. Директива ENDM завершает макроопределение. Семь команд между директивами MACRO и ENDM составляют тело макроопределения.

Имена, на которые имеются ссылки в макроопределении - CSEG, DSEG и STACK - должны быть определены где-нибудь в другом месте программы. Макрокоманда INIT1 может использоваться в кодовом сегменте там, где необходимо инициализировать регистры.

4. Для того, чтобы макрокоманда была более гибкой и могла принимать любые имена сегментов можно определить эти имена как формальные параметры:

 

INIT2 MACRO CSNAME,DSNAME,SSNAME;Формальные параметры

ASSUME CS:CSNAME,DS:DSNAME,SS:SSNAME,ES:DSNAME

PUSH DS

SUB AX,AX

PUSH AX

MOV AX,DSNAME

MOV DS,AX

MOV ES,AX

ENDM;Конец макроопределения

 

Формальные параметры в макроопределении указывают ассемблеру на соответствие их имен любым аналогичным именам в теле макроопределения. Все три формальные параметра CSNAME,DSNAME и SSNAME встречаются в директиве ASSUME, а параметр DSNAME еще и в последующей команде MOV. Формальные параметры могут иметь любые правильные ассемблерные имена, не обязательно совпадающие с именами

в сегменте данных.

Теперь при использовании макрокоманды INIT2 необходимо указать в качестве параметров действительные имена трех сегментов в соответствующей последовательности. Например, следующая макрокоманда содержит три параметра, которые соответствуют формальным параметрам в исходном макроопределении:

 

Макроопределение: INIT2 MACRO CSNAME,DSNAME,SSNAME (форм. парам.)

 

Макрокоманда: INIT2 CSEG,DSEG,STAK (параметры)

 

Так как ассемблер уже определил соответствие между формальными параметрами и операторами в макроопределении, то теперь ему остается подставить параметры макрокоманды в макрорасширении:

 

- Параметр 1: CSEG ставится в соответствие с CSNAME в макроопределении. Ассемблер подставляет CSEG вместо CSNAME в директиве ASSUME.

- Параметр 2: DSEG ставится в соответствие с DSNAME в макроопределении. Ассемблер подставляет DSEG вместо двух DSNAME: в директиве ASSUME и в команде MOV.

- Параметр 3: STAC ставится в соответствие с SSNAME в макроопределении. Ассемблер подставляет STAC вместо SSNAME в директиве ASSUME.

5. Для пояснения назначения макроопределения в нем могут находится комментарии. Cимвол точка с запятой указывает на строку комментария, как показано в следующем макроопределении PROMPT:

 





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 582 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2443 - | 2199 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.