ОРГАНИЗАЦИЯ ЦИКЛОВ

Организовать циклическое выполнение некоторого фрагмента программы можно, к примеру, используя команды условной передачи управления или команду безусловного перехода JMP.

Например, подсчитаем количество нулевых байтов в области mas.

model small

.stack 100h

.data

len equ 10 ;количество элементов в mas

mas db 1,0,9,8,0,7,8,0,2,0 ;инициализируем массив

.code

start :

mov ax,@data

mov ds, ax

mov сx, len ;длину поля mas в сх

xor ax,ax ;обнуляем ax

xor si,si ;обнуляем si

cycl :

jcxz exit ;проверка сх на 0, если 0, то выход

cmp mas[si],0 ;сравнить элемент mas с 0

jne ml ;если не равно 0, то на ml

inc al ;в al - счетчик нулевых элементов

ml:

inc si ;перейти к следующему элементу

dec сх ;уменьшить сх на 1

jmp cycl ;переход на метку cycl

exit :

mov ax,4c00h

int 21h

end start

Цикл организован тремя командами, JCXZ, DEC и JMP . Команда JCXZ выполняет здесь две функции: предотвращает выполнение «пустого» цикла (когда счетчик цикла в СХ равен нулю) и отслеживает окончание цикла после обработки всех элементов поля mas. Команда DEC после каждой итерации цикла уменьшает значение счетчика в регистре СХ на 1.

Команда LOOP также позволяет организовать циклы (loops), подобные циклам for в языках высокого уровня с автоматическим уменьшением счетчика цикла. Синтаксис команды: