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».