![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Команды реализуют описанные далее действия.
1. Декремент регистра СХ.
2. Сравнение регистра СХ с нулем и анализ состояния флага нуля ZF:
ü если (СХ) > 0 и ZF = 0, управление передается на метку перехода;
ü если (СХ) = 0 или ZF = 1, управление передается на следующую после LOOP команду.
Команды LOOPE/LOOPZ и LOOPNE/LOOPNZ по принципу своей работы являются взаимнообратными. Они расширяют действие команды LOOP тем, что дополнительно анализируют флаг ZF. Это дает возможность организовать досрочный выход из цикла, используя этот флаг в качестве индикатора. Типичное применение этих команд связано с операцией поиска определенного значения в последовательности или со сравнением двух чисел.
Недостаток команд организации цикла LOOP, LOOPE/LOOPZ и LOOPNE/LOOPNZ заключается в том, что они реализуют только короткие переходы (от -128 до +127 байт). Для работы с длинными циклами придется использовать команды условного перехода и команду JMP
Пример. Подсчет нулевых байтов с использованием команд управления циклом
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
xor ax,ax
xor si,si
jcxz exit
cycl:
cmp mas[si],0
jne ml
inc al
ml:
inc si
loop cycl
exit:
mov ax,4c00h
int 21h
end start
У команды JCXZ осталась только одна функция – не допустить выполнения «пустого» цикла, поэтому несколько изменилось ее место в тексте программы: теперь она стоит перед меткой начала цикла cycl. Изменение и контроль содержимого регистра СХ в процессе выполнения каждой итерации выполняет команда LOOP.
Дата публикования: 2014-12-08; Прочитано: 512 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!