[Назад] [Далее]

3.5.1. Блоки повторений

Простейший блок повторений REPT (не поддерживается WASM) выполняет ассемблирование участка программы заданное число раз. Например, если требуется создать массив байтов, проинициализированный значениями от 0 до 0FFh, это можно сделать путем повтора псевдокоманды DB следующим образом:

hexnumber = 0
hextable       label   byte           ; Имя массива
               rept    256            ; Начало блока
               db      hexnumber      ; Эти две строки ассемблируются
hexnumber = hexnumber+1               ; 256 раз.
               endm

Блоки повторений, так же как макроопределения, могут вызываться с параметрами. Для этого используются директивы IRP и IRPC:

               irp       параметр,<значение1,значение2...>
                 ...
               endm

               irpc      параметр,строка
                 ...
               endm

Блок, описанный директивой IRP, будет вызываться столько раз, сколько значений указано в списке (в угловых скобках), и при каждом повторении будет определена метка с именем параметр, равная очередному значению из списка. Например, следующий блок повторений сохранит в стек регистры AX, BX, CX и DX:

               irp       reg,<ax,bx,cx,dx>
               push      reg
               endm

Директива IRPC (FORC в WASM) описывает блок, который выполняется столько раз, сколько символов содержит указанная строка, и при каждом повторении будет определена метка с именем параметр, равная очередному символу из строки. Если строка содержит пробелы или другие символы, отличные от разрешенных для меток, она должна быть заключена в угловые скобки. Например, следующий блок задает строку в памяти, располагая после каждого символа строки атрибут 0Fh (белый символ на черном фоне), так что эту строку впоследствии можно будет скопировать прямо в видеопамять.

               irpc      character,<строка символов>
               db        ’&character&’,0Fh
               endm

В этом примере используются амперсанды, чтобы вместо параметра character было подставлено его значение даже внутри кавычек. Амперсанд — это один из макрооператоров — специальных операторов, которые действуют только внутри макроопределений и блоков повторений.


п»ї
"target=_blank><\/a>") //-->