Работ №05. Программирование ветвлений и циклов 1



Pdf көрінісі
бет5/6
Дата15.10.2023
өлшемі427.25 Kb.
#480816
түріРешение
1   2   3   4   5   6
Р05 Ветвления и циклы

2.3. Организация циклов 
При организации циклов широко используются команды 
INC | DEC (инкремент | декремент) – добавление / 
вычитание 1 из целого числа в ячейке памяти / регистре 
общего назначения / индексном регистре. Формат 
команды: 
INC | DEC операнд 
Хотя цикл можно реализовать с помощью комбинации 
операций инкремента | декремента и условного / 
безусловного переходов, авторы языка предусмотрели 
специальные команды цикла, к примеру: 
LOOP метка_перехода 
Команда означает «повторять набор операций». Она 
выполняется следующим образом: 
• из регистра СХ вычитается 1; 
• регистр СХ сравнивается с 0; 
• если СХ = 0, то LOOP игнорируется (цикл 
оканчивается); иначе управление передается на 
метка_перехода
Другие идентичные команды цикла: 
LOOPE | LOOPZ метка_перехода 
которые означают «повторять операции, пока СХ<>0 или 
ZF не = 0». От предыдущей команды они отличаются 
условием окончания цикла: 
• СХ>0 и ZF=1 ➔ передача на метка_перехода; 
• СХ=0 или ZF=0 ➔ игнорирование LOOPE / LOOPZ. 
Таким образом, команды LOOP | LOOPE | LOOPZ 
используют регистр СХ как счетчик числа повторов 


 при их использовании необходимо до начала цикла 
(метка_перехода) в этот регистр задать нужное число 
повторов. 
Недостаток команд цикла – реализация только коротких 
переходов. Для длинных циклов нужно использовать 
комбинации команд условного / безусловного переходов. 
Рассмотрим пример в контексте подсчета количества 
нулевых, положительных и отрицательных элементов 
вектора (одномерного массива) из 1Б чисел. Пример 
описания переменных сегмента данных вектора: 
mas db -1, 0, 3, -8, 0, 9, -6, 1, 2, -5 ; заданный вектор 
len_mas =$-mas ; количество элементов в векторе 
sch_0 db 0
; счетчик нулевых элементов вектора 
sch_pol db 0 
; счетчик пол. элементов вектора 
sch_otr db 0
; счетчик отр. элементов вектора. 
Тогда фрагмент сегмента кода для подсчета элементов: 
mov cx, len_mas
; инициализация счетчика цикла 
xor si,si
 
;инициализация индексного регистра 
cycl: cmp mas[si],0
; сравниваем элемент вектора с 0 
jz zero
 
; 0-элементы считаем в блоке zero 
jg pol
 
;>0-элементы считаем в блоке pol 
inc Sch_otr
; увеличиваем счетчик элементов <0 
jmp kon_cycl 
zero: Inc Sch_0 
;увеличиваем счетчик 0-элементов 
jmp kon_cycl 
pol: Inc Sch_pol ;увеличиваем счетчик элементов >0 


kon_cycl: inc si 
; переходим к след. элементу вектора 
loop cycl
 
; завершаем цикл. 
Результат работы программы из примера: 


Достарыңызбен бөлісу:
1   2   3   4   5   6




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет