Инструменты пользователя

Инструменты сайта


examination:asm:question29

Вопрос №29. Сравнение процедур и МО, прагматика их использования. Примеры

Функционально макроопределения похожи на процедуры. Сходство их в том, что и те, и другие достаточно один раз где-то описать, а затем вызывать их специальным образом. На этом их сходство заканчивается, и начинаются различия, которые в зависимости от целевой установки можно рассматривать и как достоинства и как недостатки:

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

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

имя_макрокоманды список_фактических_аргументов

К примеру, рассмотрим самое короткое макроопределение — clear_rg

clear_r ax

xor ax,ax

Для описания процедур вы можете использовать директиву PROC.

В режиме MASM используется следующий синтаксис:

имя PROC [[модификатор_языка] язык] [расстояние]

           [ARG список_аргументов] [RETURN список_элементов];
           
           [LOCAL список_аргументов]
           
                 [USES список_элементов]
                 
                 .
                 .
                 .
                 
        [имя] ENDP
        

Прагматика алгоритмического языка — то, что связывает программу с ее конкретной реализацией. При этом, в частности, происходит следующее :

1. Все определения становятся явными (изгоняются такие понятия, как «не определено», «определяется реализацией» и т. п.)

2.Появляются дополнительные конструкции, описатели и др., обусловленные реализацией. Они обязательно учитывают:

-особенности вычислительной машины и среды вычислений;

-особенности принятой схемы реализации языка;

-обеспечение эффективности вычислений;

-ориентацию на специфику пользователей.

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

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

examination/asm/question29.txt · Последние изменения: 2014/01/15 12:12 (внешнее изменение)