Простейшая команда препроцессора.
Синтаксис:
name1 equ name2
Это команда говорит препроцессору, что необходимо заменить все последующие
name1
на name2
.
Например:
count equ 10 ; это команда препроцессора
mov ecx, count
преобразуется в:
mov ecx, 10
Ещё пример:
mov eax, count
count equ 10
mov ecx, count
преобразуется в:
mov eax, count
mov ecx,10
потому что препроцессор заменит
count
только после директивы equ
.
Даже это работает:
10 equ 11
mov ecx, 10
после обработки препроцессором, получим:
mov ecx, 11
Обратите внимание,
name1
может быть любым идентификатором. Идентификатор — это всего лишь набор символов, завершаемый пробелом (space), символом табуляции (tab), концом строки (EOL), комментарием ;
, символом переноса строки \
или оператором, включая операторы ассемблера и/или специальные символы вроде ,
или }
.
name2
может быть не только единичным идентификатором, берутся все символы до конца строки. name2
может и отсутствовать, тогда name1
будет заменен на пустое место.
Например:
10 equ 11, 12, 13
db 10
получим:
db 11, 12, 13
Можно заставить препроцессор прекратить заменять идентификаторы, определённые директивой
EQU
. Это делает директива RESTORE
.
Синтаксис:
restore name1
name1
— это идентификатор определённый ранее в директиве EQU
. После этой команды name больше не будет заменяться на name2
.
Например:
mov eax, count
count equ 10
mov eax, count
restore count
mov eax, count
получим:
mov eax, count
mov eax, 10
mov eax, count
Обратите внимание, что для определений сделанных директивой
EQU
работает принцип стека. То есть, если мы два раза определим один и тот же идентификатор используя EQU
, то после однократного использования RESTORE
значение идентификатора будет соответствовать определённому первой директивой EQU
.
Например:
mov eax, count
count equ 1
mov eax, count
count equ 2
mov eax, count
count equ 3
mov eax, count
restore count
mov eax, count
restore count
mov eax,count
restore count
mov eax,count
получим:
mov eax, count
mov eax, 1
mov eax, 2
mov eax, 3
mov eax, 2
mov eax, 1
mov eax, count
Если попытаться выполнить
RESTORE
большее количество раз, чем было сделано EQU
, никаких предупреждений выдано не будет. Значение идентификатора будет неопределенно.
Например:
mov eax, count
restore count
mov eax, count
получим:
mov eax, count
mov eax, count