Flat Assembler 1.64. Мануал программера | страница 19
>macro mov op1,op2,op3
>{
> if op3 eq
> mov op1,op2
> else
> mov op1,op2
> mov op2,op3
>end if
>}
Это позволяет инструкции «>mov
» иметь три операнда, но она так же все ещё может иметь два операнда, так как если макроинструкции задается меньше аргументов, чем ему требуется, оставшиеся заполняются пустыми значениями. Если заданы три операнда, то макроинструкция превратится в две ранее определенных, то есть «>mov es,ds,dx
» будет ассемблировано как «>push ds
», «>pop es
» и «>mov ds,dx
».
Если требуется создать макроинструкцию с аргументом, который содержит запятые, этот аргумент следует заключить между «><
» и «>>
». Если он содержит больше одного знака «><
», то для окончания его описания должно быть использовано такое же количество «>>
».
«>purge
» позволяет отменить последнее определение указанной макроинструкции. За директивой должно следовать одно или больше имен макроинструкций, разделенных запятыми. Если указанная макроинструкция не определена, это не вызовет ошибку. Например, после расширения синтаксиса «>mov
» вышеуказанными макроинструкциями вы можете отключить синтаксис с тремя операндами, используя директиву «>purge mov
». Следующее «>purge mov
» отключит синтаксис для сегментных регистров, а дальнейшее применение этой директивы не возымеет эффекта.
Если после директивы «>macro
» вы заключаете некоторую группу аргументов в квадратные скобки, это позволит при использовании макроинструкции задать данной группе аргументов больше значений. Любой следующий аргумент данный после последнего аргумента данной группы начнет новую группу и станет её первым членом. Поэтому после закрытия квадратных скобок не должно быть имен аргументов. Содержание макроинструкции будет обрабатываться для каждой такой группы аргументов отдельно. Простейший пример — это заключение одного имени аргумента в квадратные скобки:
>macro stoschar [char]
>{
> mov al,char
> stosb
>}
Эта макроинструкция допускает неограниченное число аргументов, и каждый будет обработан этими двумя инструкциями отдельно. Например, «>stoschar 1,2,3
» будет ассемблирован как следующие инструкции:
>mov al,1
>stosb
>mov al,2
>stosb
>mov al,3
>stosb
Существуют некоторые специальные директивы, возможные только внутри определений макроинструкций. Директива «>local
» задает локальные имена, которые будут заменены уникальными значениями каждый раз, когда используется макроинструкция. За ней должны следовать имена, разделенные запятыми. Эта директива обычно требуется для внутренних констант или меток макроинструкции. Например: