|
Описанные в предыдущем подразделе макросы можно использовать для сокращения объема программ, в которых часто повторяется одна и та же последовательность команд. Однако иногда программа содержит несколько похожих, но не идентичных последовательностей команд. Например, в листинге 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
⇐Макроопределение, макровызов и макрорасширение || Оглавление || Дополнительные возможности⇒
|