3.5.2. Макрооператоры

Макрооператор & (амперсанд) нужен для того, чтобы параметр, переданный в качестве операнда макроопределению или блоку повторений, заменялся значе­нием до обработки строки ассемблером. Так, например, следующий макрос выпол­нит команду PUSH EAX, если его вызвать как PUSHREG А:

pushreg macro letter

push e&letter&x endm

Иногда можно использовать только один амперсанд - в начале параметра, если

не возникает неоднозначностей. Например, если передается номер, а требуется

создать набор переменных с именами, оканчивающимися этим номером: irp      number, <1, 2, 3, 4>

msg&number db ?

endm

Макрооператор <> (угловые скобки) действует так, что весь текст, заключен­ный в эти скобки, рассматривается как текстовая строка, даже если он содержит пробелы или другие разделители. Как мы уже видели, этот макрооператор ис­пользуется при передаче текстовых строк в качестве параметров для макросов. Другое частое применение угловых скобок - передача списка параметров вложен­ному макроопределению или блоку повторений.

Макрооператор ! (восклицательный знак) используется аналогично угловым

скобкам, но действует только на один следующий символ, так что, если этот сим­вол - запятая или угловая скобка, он все равно будет передан макросу как часть параметра.

Макрооператор % (процент) указывает, что находящийся за ним текст являет­ся выражением и должен быть вычислен. Обычно это требуется для того, чтобы передавать в качестве параметра в макрос не само выражение, а его результат.

Макрооператор ;; (две точки с запятой) - начало макрокомментария. В отли­чие от обычных комментариев текст макрокомментария не попадает в листинг и в текст программы при подстановке макроса. Это сэкономит память при ассем­блировании программы с большим количеством макроопределений.