У вас вопросы?
У нас ответы:) SamZan.net

Макродирективы С помощью макросредств ассемблера можно не только частично изменять входящие в макроопре

Работа добавлена на сайт samzan.net: 2016-03-30

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 3.2.2025

9

1. Макродирективы

С помощью макросредств ассемблера можно не только частично изменять входящие в макроопределение строки, но и модифицировать сам набор этих строк и даже порядок их следования. Сделать это можно с помощью набора макродиректив (далее — просто директив). Их можно разделить на две группы: 
- директивы повторения WHILE, REPT, IRP и IRPC. Директивы этой группы предназначены для создания макросов, содержащих несколько идущих подряд одинаковых последовательностей строк. При этом возможна частичная модификация этих строк. 
- директивы управления процессом генерации макрорасширения EXITM и GOTO. Они предназначены для управления процессом формирования макрорасширения из набора строк соответствующего макроопределения. С помощью этих директив можно как исключать отдельные строки из макрорасширения, так и вовсе прекращать процесс генерации. Директивы EXITM и GOTO обычно используются вместе с условными директивами компиляции, поэтому они будут рассмотрены вместе с ними. 

Директивы WHILE и REPT

Директивы WHILE и REPT применяют для повторения определенное количество раз некоторой последовательности строк. Эти директивы имеют следующий синтаксис: 
WHILE константное_выражение
последовательность_строк
ENDM
REPT константное_выражение
последовательность строк
ENDM
Следующие две директивы, IRP и IRPC, делают этот процесс более гибким, позволяя модифицировать на каждой итерации некоторые элементы в последовательность_строк. 

Директива IRP
Директива IRP имеет следующий синтаксис: 
IRP формальный_аргумент, <строка_символов_1,...,строка_символов_N>
последовательность_строк
ENDM
Действие данной директивы заключается в том, что она повторяет последовательность_строк N раз, то есть столько раз, сколькострок_символов заключено в угловые скобки во втором операнде директивы IRP. Повторение последовательности_строк сопровождается заменой в ней формального_аргумента строкой символов из второго операнда. Так, при первой генерации последовательности_строкформальный_аргумент в них заменяется на строка_символов_1
Если есть строка_символов_2, то это приводит к генерации второй копии последовательности_строк, в которой формальный_аргументзаменяется на строка_символов_2. Эти действия продолжаются до строка_символов_N включительно. 
К примеру, рассмотрим результат определения в программе следующей конструкции: 
irp ini,<1,2,3,4,5>
db ini
endm
Макрогенератором будет сгенерировано следующее макрорасширение: 
db 1
db 2
db 3
db 4
db 5

Директива IRPC
Директива IRPC имеет следующий синтаксис: 
IRPC формальный_аргумент,строка_символов
последовательность строк
ENDM
Действие данной директивы подобно IRP, но отличается тем, что она на каждой очередной итерации заменяет формальный_аргументочередным символом из строка_символов
Понятно, что количество повторений последовательность_строк будет определяться количеством символов в строка_символов. К примеру: 
irpc rg,
push rg&x
endm
В процессе макрогенерации эта директива развернется в следующую последовательность строк: 
push ax
push bx
push cx
push dx
Директивы условной компиляции
Директива EXITM не имеет операндов, и ее действие заключается в том, что она немедленно прекращает процесс генерации макрорасширения, начиная с того места, где она встретилась в макроопределении. 
Директива ^ GOTO имя_метки переводит процесс генерации макроопределения в другое место, прекращая тем самым последовательное разворачивание строк макроопределения. Метка.

Директивы компиляции по условию
Данные директивы предназначены для организации выборочной трансляции фрагментов программного кода. Такая выборочная компиляция означает, что в макрорасширение включаются не все строки макроопределения, а только те, которые удовлетворяют определенным условиям. То, какие конкретно условия должны быть проверены, определяется типом условной директивы. 
Всего имеется 10 типов условных директив компиляции: 
- Директивы IF и IFE — условная трансляция по результату вычисления логического выражения
- Директивы IFDEF и IFNDEF — условная трансляция по факту определения символического имени
- Директивы IFB и IFNB — условная трансляция по факту определения фактического аргумента при вызове макрокоманды
- Директивы IFIDN, IFIDNI, IFDIF и IFDIFI — условная трансляция по результату сравнения строк символов
Условные директивы компиляции имеют общий синтаксис и применяются в составе следующей синтаксической конструкции: 
IFxxx логическое_выражение_или_аргументы
фрагмент_программы_1
ELSE
фрагмент_программы_2
ENDIF

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

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

INT - Команда прерывания. Формат команды: INT  тип_прерывания

Тип прерывания это номер, идентифицирующий один из 256 различных векторов, находящихся в памяти.

При исполнении команды INT микропроцессор производит следующие действия:

1. Помещает в стек значение регистра флагов;

2. Обнуляет флаг трассировки OF и флаг включения/выключения прерываний IF;

3. Помещает в стек значение регистра CS;

4. Вычисляет адрес вектора прерывания, умножая тип прерывания на 4;

5. Загружает второе слово вектора прерываний в регистр CS;

6. Помещает в стек значение регистра указателя команд IP;

7. Загружает в регистр указателя команд IP первое слово вектора прерывания.

После команды INT в стеке окажутся значения регистра флагов и регистров CS и IP. Флаги трассировки TF и прерывания IF будут равны нулю. Пара регистров CS и IP будет указывать на начальный адрес программы обработки прерывания. Затем микропроцессор начнет исполнять эту программу.

INTO - команда прерывания по переполнению. Она представляет собой команду условного прерывания. Команда инициирует прерывание лишь тогда, когда флаг переполнения OF равен единице.

IRET - команда возврата после прерывания. Действие команды то же, что и у команды RET для процедуры. Поэтому она исполняется последней при исполнении микропроцессором программы обработки прерывания. Команда IRET извлекает из стека три 16-битовых значения и загружает их в регистр указателя команд IP, регистр CS и регистр флагов.




1. Информационная система складского учёта бытовых электроприборов
2. Понятия о нефтегазоносном бассейне
3. Реферат- Роль семьи в воспитании ребёнка
4. А Шопенгауэр и Ф Ницше от классической философии к иррационализму и нигилизму
5. Тура Н
6. 29] підкреслюється що традиційні цілі маркетингу намагання отримати максимальний прибуток від кожної прове
7. на тему- Автоматизация звука [Р] в словах со стечением согласных звуков Выполнила- учитель ~ логопе.
8. Вариант 1 1. В системе законодательства Российской Федерации наивысший юридической силой обладает- А
9. 1 Визначаємо вантажний об~єм камери зберігання- 1
10. Методы проведения экспертиз при разработке управленческих решений