Справочник по языку Ассемблера IBM PC

       

Директивы WHILE и REPT


Директивы WHILE и REPT применяют для повторения определенное количество раз некоторой последовательности строк.
Эти директивы имеют следующий синтаксис:

WHILE константное_выражение последовательность_строк ENDM

REPT константное_выражение последовательность строк ENDM

Обратите внимание, что последовательность повторяемых строк в обеих директивах ограничена директивой ENDM.

При использовании директивы WHILE макрогенератор транслятора будет повторять последовательность_строк до тех пор, пока значение константное_выражение не станет равно нулю. Это значение вычисляется каждый раз перед очередной итерацией цикла повторения (то есть значение константное_выражение

должно подвергаться изменению внутри последовательность_строк

в процессе макрогенерации).

Директива REPT, подобно директиве WHILE, повторяет последовательность_строк столько раз, сколько это определено значением константное_выражение. Отличие этой директивы от WHILE состоит в том, что она автоматически уменьшает на единицу значение константное_выражение после каждой итерации.

В качестве примера рассмотрим листинг 4, в котором демонстрируется применение директив WHILE и REPT для резервирования области памяти в сегменте данных. Имя идентификатора и длина области задаются в качестве параметров для соответствующих макросов def_sto_1 и def_sto_2.

Листинг 4. Использование директив повторения ;prg_13_3.asm def_sto_1 macro id_table,ln:=

;макрос резервирования памяти длиной len. ;Используется WHILE id_table label byte len=ln while len db 0 len=len-1 endm endm def_sto_2 macro id_table,len ;макрос резервирования памяти длиной len id_table label byte rept len db 0 endm endm

data segment para public 'data' def_sto_1 tab_1,10 def_sto_2 tab_2,10 data ends ;сегменты команд и стека в этой программе необязательны end



Заметьте, что счетчик повторений в директиве REPT

уменьшается автоматически после каждой итерации цикла. Проанализируйте результат трансляции листинга 13.3.

Таким образом, директивы REPT и WHILE удобно применять для “размножения” в тексте программы последовательности одинаковых строк без внесения в эти строки каких-либо изменений.

Следующие две директивы, и , делают этот процесс более гибким, позволяя модифицировать на каждой итерации некоторые элементы в последовательность_строк.



Содержание раздела