Flat Assembler 1.64. Мануал программера | страница 11
>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
».
2.2.3 Адресные пространства
«>org
» устанавливает адрес, по которому следующий за ней код должен появиться в памяти. За ней должно следовать числовое выражение, указывающее адрес. Эта директива начинает новое адресное пространство, следующий код сам по себе никуда не двигается, но все метки, определенные в нем и значение символа «>$
» изменяются как если бы он был бы помещен по этому адресу. Тем не менее обязанность поместить во время выполнения код по правильному адресу лежит на программисте.