Реклама:

Описанные в предыдущем подразделе макросы можно использовать для сокращения объема программ, в которых часто повторяется одна и та же последовательность команд. Однако иногда программа содержит несколько похожих, но не идентичных последовательностей команд. Например, в листинге 7.6 первая последовательность меняет местами значения переменных Р и Q, а вторая - переменных R и S.

Листинг 7.6. Смена значений двух пар переменных без использования макроса

MOV ЕАХ.Р MOV EBX.Q MOV Q.EAX MOV Р.ЕВХ

MOV EAX.R MOV EBX.S MOV S.EAX MOV R.EBX

Для работы с такими почти идентичными последовательностями предусмотрены макроопределения, предлагающие формальные параметры, и макровызовы, в которых формальные параметры заменяются фактическими параметрами. Фактические параметры помещаются в поле операндов макровызова. В листинге 7.7. представлена программа из листинга 7.6, в которую включен макрос с двумя параметрами. Символы Р1 и Р2 - это формальные параметры. Во время расширения макроса каждый символ Р1 внутри тела макроса заменяется первым фактическим параметром, а символ Р2 - вторым фактическим параметром. Пример:

CHANGE P.Q

В этом макровызове Р - это первый фактический параметр, a Q - второй фактический параметр. Таким образом, программы в листингах 7.6 и 7.7 идентичны.

Листинг 7.7. Смена значений двух пар переменных с использованием макроса

CHANGE MACRO Р1.Р2 MOV ЕАХ,PI MOV EBX.P2 MOV P2.EAX MOV Pl.EBX ENDM

CHANGE P,Q CHANGE R,S

Макроопределение, макровызов и макрорасширение || Оглавление || Дополнительные возможности