4.1. Определение простых макросов
Использую >EQU
можно делать наиболее простые замены в исходном тексте при обработке препроцессором. Большими возможностями обладают макросы. Командой >MACRO
можно создавать собственные инструкции.
Синтаксис:
>macro name
>{
>; тело макроса
>}
Когда препроцессор находит директиву >macro
, он определяет макрос с именем >name
. Далее, встретив в исходном тексте строку, начинающуюся с >name
, препроцессор заменит >name
на тело макроса — то, что указано в определении между скобочками >{
и >}
. Имя макроса может быть любым допустимым идентификатором, а тело макроса — всё, что угодно, за исключением символа >}
, который означает завершение тела макроса.
Например:
>macro a
>{
> push eax
>}
>xor eax, eax
> a
будет заменено на:
>xor eax, eax
>push eax
Или:
>macro a
>{
> push eax
>}
>macro b
>{
> push ebx
>}
>b
>a
получим:
>push ebx
>push eax
Разумеется, макросы не обязательно оформлять так, как выше, можно делать и так:
>macro push5 {push dword 5}
>push5
получим:
>push dword 5
Или:
>macro push5 {push dword 5
>}
с тем же самым результатом. Скобочки можете размещать как хотите.
Макросы могут быть вложенными один в другой. То есть, если мы переопределим макрос, будет использовано последнее определение. Но если в теле нового определения содержится тот же макрос, то будет использовано предыдущее определение. Посмотрите пример:
>macro a {mov ax, 5}
>macro a
>{
> a
> mov bx, 5
>}
>macro a
>{
> a
> mov cx, 5
>}
>a
в результате получим:
>mov ax, 5
>mov bx, 5
>mov cx, 5
Или такой пример:
>macro a {1}
>a
>macro a {
> a
> 2 }
>a
>macro a {
> a
> 3 }
>a
получим:
>1
>1
>2
>1
>2
>3