Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Макроязык и макрокоманды. Директивы, которые определяют символы во время трансляции Мнемоника и синтаксис Описание .asg [“]строка знаков[“], символ




Директивы, которые определяют символы во время трансляции

Мнемоника и синтаксис Описание
.asg [“]строка знаков[“], символ замены Назначает строку знаков символу замены
.endstruct Заканчивает определение структуры
символ.equ значение Приравнивает значение символу
.eval четкое выражение, символ замены Исполняет арифметику на числовом символе замены
.label символ Определяет переместимую во время загрузки метку в разделе
символ.set значение Приравнивает значение символу
.struct Начинает определение структуры
.tag структура Приписывает атрибуты структуры метке
(H) Разные директивы  
.clink [”имя раздела”] Допускает условную компоновку для текущего или указанного раздела
.emsg строка Посылает определяемые пользователем сообщения об ошибке устройству вывода; не производит объектный файл
.end Заканчивает программу
.mmsg строка Посылает определяемые пользователем сообщения устройству вывода
.newblock Снимает определение локальных меток
.wmsg строка Посылает определяемые пользователем предупреждающие сообщения устройству вывода

Ассемблер поддерживает макроязык, который дает Вам возможность создать ваши собственные команды. Это особенно полезно, когда программа выполняет частные задачи несколько раз. Макроязык позволяет Вам:

· Определить ваши собственные макрокоманды, и переопределить существующие макрокоманды.

· Упростить длинный или сложный ассемблерный код.

· Обратиться к макробиблиотекам, созданным архиватором.

· Определить условные и повторяемые блоки в пределах макрокоманд.

· Управлять строками в пределах макрокоманд.

· Управлять листингом расширения макрокоманд.

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

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

Использование макрокоманды - процесс из 3 шагов.

Шаг 1: Определение макрокоманды

Вы должны определить макрокоманды прежде, чем Вы можете использовать их в вашей программе. Имеются два метода для определения макрокоманд:

· Макрокоманды могут быть определены в начале исходного файла или в копируемом / включаемом файле.

· Макрокоманды могут также быть определены в макробиблиотеке. Макробиблиотека является собранием файлов в формате архива, созданном архиватором. Каждый элемент архивного файла (макробиблиотеки) может содержать одно макроопределение, соответствующее имени этого элемента. Вы можете обратиться к макробиблиотеке, используя.mlib директиву.

Шаг 2: Вызов макрокоманды

После того, как Вы определили макрокоманду, вызовите ее, используя имя макрокоманды как мнемонику в тексте исходной программы. Это называется вызовом макрокоманды.

Шаг 3: Расширение макрокоманды

Ассемблер разворачивает ваши макрокоманды, когда исходная программа вызывает их. Во время расширения ассемблер передает переменные аргументы параметрам макрокоманды, заменяет инструкция макровызова определением макрокоманды, затем транслирует исходный код. По умолчанию, макрорасширения печатаются в файле листинга. Вы можете выключить распечатку расширения, используя директиву.mnolist. Для получения дополнительной информации, см. раздел 5.8, Использование директив для форматирования листинга.

Когда ассемблер сталкивается с макроопределением, он размещает имя макрокоманды в таблице кодов операций (opcode table). Это переопределяет, любую предварительно определенную макрокоманду, библиотечный вход, директиву, или мнемонику команды, которые имеют то же самое имя, что и данная макрокоманда. Это позволяет Вам расширить функции директив и команд, а также добавить новые команды.

Определение макрокоманд. Вы можете определять макрокоманду где-либо в вашей программе, но Вы должны определить ее прежде, чем Вы сможете ее использовать. Макрокоманды могут быть определены в начале исходного файла, или в копируемом/включаемом файле, или в макробиблиотеке. Макроопределения могут быть вложенными, и они могут вызывать другие макрокоманды, но все элементы макрокоманды должны быть определены в том же самом файле. Макроопределение - ряд исходных инструкций в следующем формате:

имя макрокоманды. macro [параметр 1] [,..., параметр n]

· Имя макрокоманды называет макрокоманду. Вы должны поместить имя в поле метки исходной инструкции. Только первые 128 знаков имени существенны. Ассемблер размещает макро-имя во внутренней таблице кодов операций, заменяя любую команду или прежнее макроопределение, имеющее то же самое имя.

· Директива.macro идентифицирует исходную инструкцию, как первую строку макроопределения. Вы должны разместить.macro в поле кода операции.

· Параметр 1,…, параметр n - являются необязательными символами замены, которые появляются как операнды директивы.macro.

Пример. Определение, вызов и расширение макрокоманды. Код определяет макрокоманду sadd4 с четырьмя параметрами r1, r2, r3, r4.

1 sadd4.macro r1,r2,r3,r4

2 sadd4 r1, r2,r3, r4

4 r1 = r1 + r2 + r3 + r4

5.endm

Макровызов: следующий код вызывает макрокоманду sadd4 с четырьмя параметрами:

11 00000000 sadd4 A0,A1,A2,A3

Макробиблиотеки. Один из способов определения макрокоманд - создание макробиблиотеки. Макробиблиотека - собрание файлов, которые содержат макроопределения. Вы должны использовать архиватор, чтобы собрать эти файлы, или элементы, в одном файле (называемом архивом). Каждый элемент макробиблиотеки содержит одно макроопределение. Файлы в макробиблиотеке должны быть не оттранслированными исходными файлами. Имя макрокоманды и имя элемента должны быть одинаковыми, а расширение имени файла с макрокомандой должно быть.asm.

Например:

Макрокоманда Имя файла в макробиблиотеке
simple simple.asm
add3 add3.asm

Вы можете обращаться к макробиблиотеке, используя.mlib директиву ассемблера. Синтаксис:. mlib имя файла

Когда ассемблер сталкивается с.mlib директивой, он открывает названную (в имени файла) библиотеку и создает таблицу содержания библиотеки. Ассемблер вводит имена индивидуальных элементов библиотеки в таблицы кодов операций в качестве библиотечных входов; это переопределяет любые существующие коды операции или макрокоманды, которые имеют то же самое имя. Если одна из этих макрокоманд вызывается, ассемблер извлекает вход библиотеки и загружает его в таблицу макрокоманд.

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

Рекурсивные и вложенные макрокоманды. Макроязык поддерживает рекурсивные и вложенные макровызовы. Это означает, что Вы можете вызывать другие макрокоманды внутри макроопределения. Вы можете вкладывать макрокоманды глубиной до 32 уровней. Когда Вы используете рекурсивные макрокоманды, Вы вызываете макрокоманду из ее собственного определения (макрокоманда вызывает саму себя).

Когда Вы создаете рекурсивные или вложенные макрокоманды, Вы должны обратить особое внимание на аргументы, которые Вы передаете макропараметрам, потому что ассемблер использует динамический обзор параметров. Это означает, что вызываемая макрокоманда использует окружающую среду макрокоманды, из которой она вызвана.

Следующие директивы могут использоваться с макрокомандами. Директивы.macro,.mexit,.endm и.var допустимы только с макрокомандами; оставшиеся директивы - общие директивы языка ассемблера.

Создание макрокоманд:

Мнемоника и синтаксис Описание
.endm Завершает макроопределение
имя.macro [параметр 1] [,..., параметр n] Определяет макрокоманду с указанным именем
.mexit Выполняет переход к.endm
.mlib имя файла Указывает библиотеку, содержащую макроопределения

Управление символами замены:

Мнемоника и синтаксис Описание
.asg [“]строка знаков[“] Назначает знаковую строку символу замены
.eval четкое выражение, символ замены Исполняет арифметику на числовом символе замены
.var символ 1 [, символ 2,..., символ n] Определяет локальные символы макрокоманды

Условная трансляция:

Мнемоника и синтаксис Описание
.break [четкое выражение] Прерывает трансляцию повторяемого блока (необязательная)
.endif Заканчивает условную трансляцию
.endloop Заканчивает трансляцию повторяемого блока
.else Необязательный условный блок
.elseif четкое выражение Необязательный условный блок
.if четкое выражение Начинает условную трансляцию
.loop [четкое выражение] Начинает трансляцию повторяемого блока

Создание сообщений во время трансляции:

Мнемоника и синтаксис Описание
.emsg Посылает сообщение об ошибке стандартному устройству вывода
.mmsg Посылает сообщение стандартному устройству вывода
.wmsg Посылает предупреждение стандартному устройству вывода

Форматирование листинга:

Мнемоника и синтаксис Описание
.fclist Разрешает распечатку ложных условных блоков (по умолчанию)
.fcnolist Подавляет распечатку ложных условных блоков
.mlist Разрешает распечатку макрокоманды (по умолчанию)
.mnolist Подавляет распечатку макрокоманды
.sslist Разрешает распечатку расширений символов замены
.ssnolist Подавляет листинг расширений символов замены (по умолчанию)



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


Дата добавления: 2014-10-17; Просмотров: 427; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.