Организовать циклическое выполнение некоторого фрагмента программы можно, к примеру, используя команды условной передачи управления или команду безусловного перехода 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 в языках высокого уровня с автоматическим уменьшением счетчика цикла. Синтаксис команды: