Flat Assembler. Мануал программера.
2.2.2 Повторение блоков инструкций.
« times» повторяет одну инструкцию указанное количество раз. За ней должно следовать числовое выражение, определяющее количество повторений, и инструкция, которую нужно повторять (опционально для того, чтобы отделить число и инструкцию, можно использовать двоеточие). Специальный символ « %», использующийся внутри инструкции, эквивалентен номеру текущего повтора. Например, « times 5 db %» определит пять байтов со значениями 1, 2, 3, 4, 5. Поддерживается также рекурсивное использование директивы « times», например, « times 3 times % db %» определит шесть байтов со значениями 1, 1, 2, 1, 2, 3.
« repeat» повторяет целый блок инструкций. За ней должно следовать числовое выражение, определяющее количество повторений. Инструкции для повторения предполагаются на следующих строках, а заканчиваться блок должен директивой « end repeat», например:
Repeat 8.
Mov byte [bx],%
Inc bx.
End repeat.
Сгенерированный код сохраняет байты со значениями от одного до восьми в памяти, адресованной регистром BX.
Количество повторений может быть равным нулю, и в таком случае инструкции не будут ассемболироваться вовсе.
« break» позволяет остановить повторение раньше и продолжить ассемблирование с первой строки после « end repeat». В сочетании с директивой « if» она позволяет остановить повторение при выполнении некоторого особого условия, например:
S = x/2.
Repeat 100.
If x/s = s.
Break.
End if.
S = (s+x/s)/2.
End repeat.
« while» повторяет блок инструкций, пока выполняется следующее за ней условие, определенное логическим выражением. Блок инструкций для повторения должен заканчиваться директивой « end while». Перед каждым повторением логическое выражение вычисляется и если его значение ложь, ассемблирование продолжается, начиная с первой строки после « end while». Также в этом случае символ « %» содержит номер текущего повторения. Директива « break» может быть использована для остановки этого типа цикла так же, как с директивой « repeat». Предыдущий пример может быть переписан с использованием « while» вместо « repeat» таким образом:
S = x/2.
While x/s.
S.
S = (s+x/s)/2.
If % = 100.
Break.
End if.
End while.
Блоки, определенные с использованием « if», « repeat» и « while» могут быть вложены в любом порядке, однако и закрыты в обратном. Директива «break» всегда останавливает обработку бока, который был начат последним либо директивой « repeat», либо « while».