double arrow

Макроязыки

Макроязык - программное средство, позволяющее пользователю задавать в тексте программы условные эквиваленты определенных его фрагментов (макрокоманды). Макроязык состоит из:

- макроопределений, создаваемых пользователем;

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

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

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

Макрокоманда представляет собой строку, одним из компонентов которой является символическое имя макрокоманды. Имя макрокоманды может сопровождаться параметрами. Если данная строка встречается в теле исходного текста программы, то транслятор замещает ее одной или несколькими другими строками. Какими именно строками замещается макрокоманда, определяется макроопределением, которое представляет собой шаблон (описание) макрокоманды[8].

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

имя_макрокоманды macro

список формальных аргументов

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

Endm

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

1) Макроопределения могут располагайся в начале исходного текста программы до сегмента кода и данных с тем, чтобы не ухудшать читабельность программы. Этот вариант следует применять в случаях, если определяемые вами макрокоманды актуальны только в пределах одной этой программы.

2) Макроопределения могут располагаться в отдельном файле. Этот вариант подходит при работе над несколькими программами одной проблемной области. Чтобы сделать доступными эти макроопределения в конкретной программе, необходимо в начале исходного текста этой программы записать директиву include имя_файла, к примеру;

.model small

include show.inс

;в это место будет вставлен текст файла show.inc

3) Макроопределения могут располагаться в макробиблиотеке Если имеются универсальные макрокоманды, которые используются практически во всех ваших программах, то их целесообразно записав в так называемую макробиблиотеку. Сделать актуальными макрокоманды ил этой библиотеки можно с помощью все той же директивы INCLUDE. Недостаток этого и предыдущего способов в том, что в отсутствии файла с макроопределениями практически невозможно будет восстановить логику работы программы по ее исходному тексту, насыщенному макрокомандами.

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

Использование макрокоманд подобно использованию процедур и функций. Однако, команды, реализующие подпрограмму, содержатся в коде загрузочного модуля один раз, а команды, реализующие макрокоманду, включаются в программу столько раз, сколько была использована макрокоманда, т. е. при использовании макрокоманд объем программы увеличивается. При этом, выполнение процедуры или функции требует передачи управления с возвратом (пара команд типа CALL и RET), а команды макрорасширения включаются в общую последовательность команд программы, поэтому программы, использующие макрокоманды выполняются быстрее. Кроме этого, если в многофункциональной подпрограмме имеется разветвление в зависимости от значений параметров, то в загрузочный модуль включается код подпрограммы в полном объеме, даже если в конкретной программе реально используется только одна из ветвей алгоритма; в макрокоманде, в каждое макрорасширение включаются только операторы, определяемые фактическими значениями параметров команды, таким образом достигается экономия и времени и объема в макрокомандах.

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

Контрольные вопросы

1. Дать характеристику языка ассемблера.

2. Из чего состоитосновная исполнительная среда микропроцессоров с архитектурой IA-32.

3. Назначение регистров общего назначения.

4. Название и назначение сегментных регистров.

5. Название и назначение регистров признаков (флагов).

6. Охарактеризовать режимы работы процессоров с архитектурой IA32.

7.Охарактеризоватьмодели памяти, используемые процессором с архитектурой IA32.

8. Назвать аппаратные средства микропроцессоров семейства IA-32 системного уровня.

9. Структура программы на языке Ассемблер.

10. Что такое директивы? Назначение основных директив.

11. Охарактеризовать способы адресации.

12. Какие типы данных с точки зрения аппаратной поддержки поддерживает процессор?

13. Перечислить типы данных с точки зрения логической организации данных.

14. Назначение команд пересылки.

15 Назначение арифметических команд.

16. Назначение сдвиговых команд.

17. Назначение команд для организации циклов.

18.Назначение команд для работы с битами.

19. Назначение команд сравнения.

20. Назначение команд передачи управления.

21. Каким образом оформляются процедуры в Ассемблере. Какие используются директивы?

22. Какие существуют варианта размещения процедур в программе?

22. Назначение системных команд.

23. Синтаксис макроопределения.

24 Что такое макроязык?

25. Какие существуют варианта расположения макроопределения?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: