Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Макросы и процедуры. Особенности директив повторения. Условные директивыСодержание книги
Поиск на нашем сайте
Макрокоманда - это программный инструмент, который позволяет вам создавать собственные операции ассемблера. На самом деле макро- определения относятся к механизму препроцессора. Макропроцессор позволяет определять новые коды операций для процессора. Пр: hex2ascii macro cmp al,10 sbb al,69h das endmВ использовании макрокоманды можно выделить два шага. На первом шаге макрокоманда определяется в программе. Программист присваивает ей имя и определение. Определение состоит из из операций ассемблера и команд, которые будут генерироваться каждый раз при появлении имени макрокоманды. Второй шаг - применение макрокоманды. Это происходит когда ассемблер встречает ее имя в качестве кода операции. Ассемблер заменяет это имя указанными в определении командами. Оператор MACRO является кодом псевдооперации. Эта конкретная псев- дооперация сообщает ассемблеру, что начинается определение макроко- манды. В поле имени операции указано это имя, которое программа приписывает определяемой макрокоманде, в нашем случае hex2ascii. Команды, которые будут заменять макрокоманды, следуют за строкой заголовка. Наконец, ключевое слово ENDM указывает ассемблеру на конец определения. Текст между операторами MSCRO и ENDM называется телом макрокоманды. Макрокоманду можно сравнить с подпрограммой. Подпрограмма - это участок программы, определяемый в единственном месте программы, Программа может передать управление подпрограмме из любой своей точки. Использование подпрограмм экономит время написания и объем памяти, занимаемый программой. Вместо того, чтобы каждый раз переписывать команды подпрограммы, когда необходимо ее выполнение, вы вставляете ее вызов. Подпрограмма выполняет свою определенную функцию, и управление возвращантся в точку вызова. Макрокоманда точно также определяется в ассемблируемой программе в единственном месте. После того, как макрокоманда определена, ее можно привлечь в любой точке транслируемой программы. Использование макрокоманды экономит время составления программ и место, занимаемое исходным файлом. Разница между макрокомандой и подпрограммой заключается в моменте их использования. Макрокоманда является операцией текстовой обработки. Она определяется и "выполняется" во время ассемблирования. Выполнение макрокоманды состоит в замене имени макрокоманды текстом, составляющим тело макрокоманды. Подпрограмма же хотя и определяется при ассемблировании, но выполняется не раньше, чем сама программа. Мы будем говорить, что макрокоманда выполняется при ассемблировании, а подпрограмма - во время выполнения программы. Директивы компиляции по условию Данные директивы предназначены для организации выборочной трансляции фрагментов программного кода. Такая выборочная компиляция означает, что в макрорасширение включаются не все строки макроопределения, а только те, которые удовлетворяют определенным условиям. То, какие конкретно условия должны быть проверены, определяется типом условной директивы. Введение в язык ассемблера этих директив значительно повышает его мощь. 1. Директивы IF и IFE — условная трансляция по результату вычисления логического выражения. 2. Директивы IFDEF и IFNDEF — условная трансляция по факту определения символического имени. 3. Директивы IFB и IFNB — условная трансляция по факту определения фактического аргумента при вызове макрокоманды. 4. Директивы IFIDN, IFIDNI, IFDIF и IFDIFI — условная трансляция по результату сравнения строк символов. Условные директивы компиляции имеют общий синтаксис и применяются в составе следующей синтаксической конструкции: IFxxx логическое_выражение_или_аргументыфрагмент_программы_1 ELSEфрагмент_программы_2ENDIFЗаключение некоторых фрагментов текста программы — фрагмент_программы_1 и фрагмент_программы_2 — между директивами IFxxx, ELSE и ENDIF приводит к их выборочному включению в объектный модуль. Какой именно из этих фрагментов — фрагмент_программы_1 или фрагмент_программы_2 — будет включен в объектный модуль, зависит от конкретного типа условной директивы, задаваемого значением xxx, и значения условия, определяемого операндом (операндами) условной директивы логическое_выражение_или_аргумент(ы). Синтаксические конструкции, соответствующие директивам условной компиляции, могут быть вложенными друг в друга Директивы IF и IFE Синтаксис этих директив следующий: IF(E) логическое_выражениефрагмент_программы_1 ELSEфрагмент_программы_2ENDIFОбработка этих директив макроассемблером заключается в вычислении логического_выражения и включении в объектный модуль фрагмент_программы_1 или фрагмент_программы_2 в зависимости от того, в какой директиве IF или IFE это выражение встретилось:
Директивы IFDEF и IFNDEF Синтаксис этих директив следующий: IF(N)DEF символическое_имяфрагмент_программы_1 ELSEфрагмент_программы_2ENDIFДанные директивы позволяют управлять трансляцией фрагментов программы в зависимости от того, определено или нет в программе некоторое символическое_имя. Директива IFDEF проверяет, описано или нет в программе символическое_имя, и если это так, то в объектный модуль помещается фрагмент_программы_1. В противном случае, при наличии директивы ELSE, в объектный код помещается фрагмент_программы_2. Действие IFNDEF обратно IFDEF. Если символического_имени в программе нет, то транслируется фрагмент_программы_1. Если оно присутствует, то при наличии ELSE транслируется фрагмент_программы_2. Если ELSE отсутствует, а символическое_имя в программе определено, то часть программы, заключенная между IFNDEF и ENDIF, игнорируется. В качестве примера рассмотрим ситуацию, когда в объектный модуль программы должен быть включен один из трех фрагментов кода. Какой из трех фрагментов будет включен в объектный модуль, зависит от значения некоторого идентификатора switch:
Директивы IFB и IFNB Синтаксис этих директив следующий: IF(N)B аргументфрагмент_программы_1 ELSEфрагмент_программы_2ENDIFДанные директивы используются для проверки фактических параметров, передаваемых в макрос. При вызове макрокоманды они анализируют значение аргумента, и в зависимости от того, равно оно пробелу или нет, транслируется либо фрагмент_программы_1, либо фрагмент_программы_1. Какой именно фрагмент будет выбран, зависит от кода директивы:
В качестве типичного примера применения этих директив предусмотрим строки в макроопределении, которые будут проверять, указывается ли фактический аргумент при вызове соответствующей макрокоманды: show macro regifb display 'не задан регистр'exitmendif...endmЕсли теперь в сегменте кода вызвать макрос show без аргументов, то будет выведено сообщение о том, что не задан регистр и генерация макрорасширения будет прекращена директивой exitm.
|
||||
|
Последнее изменение этой страницы: 2017-02-06; просмотров: 504; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.16 (0.009 с.) |