Flat Assembler 1.64. Мануал программера | страница 24



>rept 3 counter

>{

> byte#counter db counter

>}

>Сгенерирует строки:

>byte1 db 1

>byte2 db 2

>byte3 db 3

Механизм повторения, применяемый к блокам «>rept» такой же, как тот, что используется для обработки множественных групп аргументов макросов, то есть директивы, такие как «>forward», «>common» и «>reverse» могут использоваться их обычном значении.

Итак, такой макрос:

>rept 7 num { reverse display `num }

покажет символы от 7 до 1 как текст. Директива «>local» работает так же, как внутри макросов с несколькими группами аргументов, то есть:

>rept 21

>{

> local label

> label: loop label

>}

сгенерирует уникальную метку для каждого дубликата. Символ-счетчик обычно начинает с 1, но вы можете объявить другое базовое значение, предваренное запятой, сразу же после имени счетчика. Например:

>rept 8 n:0 { pxor xmm#n,xmm#n }

Сгенерирует код, очищающий содержимое регистров SSE. Вы можете определить несколько счетчиков, разделенных запятыми, и каждый может иметь свою базу.

«>irp» итерирует один аргумент через данный список параметров. Синтаксис такой: за «>irp» следует имя аргумента, далее запятая и далее список параметров. Параметры определяются таким же образом, как в вызове стандартного макроса, то есть они должны разделяться запятыми и каждый может быть заключен между знаками «<» и «>». Так же за именем аргумента может следовать «>*» для обозначения того, что он не может иметь пустое значение. Такой блок:

>irp value, 2,3,5

>{ db value }

сгенерирует строки:

>db 2

>db 3

>db 5

«>irps» итерирует через данный список символов, за директивой должно следовать имя аргумента, далее запятая и далее последовательность любых символов. Каждый символ в последовательности, независимо от того, символы ли это имен, знаки символов или строки в кавычках, становится значением аргумента на одну итерацию. Если за запятой никаких символов не следует, то итераций не производится вообще. Этот пример:

>irps reg, al bx ecx

>{ xor reg,reg }

сгенерирует строки:

>xor al,al

>xor bx,bx

>xor ecx,ecx

Блоки, определенные директивами «>irp» и «>irps», обрабатываются так же, как макросы, то есть операнды и директивы, специфичные для макросов могут в них свободно использоваться.

2.3.6 Условный препроцессинг

При применении директивы «>match» некоторый блок кода обрабатывается препроцессором и передаётся ассемблеру, только если заданная последовательность символов совпадает с образцом. Образец идет первым, заканчивается запятой, далее идут символы, которые должны подходить под образец, и далее блок кода, заключенный в фигурные скобки, как макроинструкция.