Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга_Вычисл техн и микропроц_2 автора_130709.doc
Скачиваний:
9
Добавлен:
07.05.2019
Размер:
5.26 Mб
Скачать

9.3.5 Команди організації циклів

Вхідний контроль:

  1. Які види циклічних програм Ви знаєте?

  2. В чому полягає різниця між арифметичним та ітераційним циклами?

  3. В якому регістрі організується програмний лічильник циклів?

  4. Наведіть приклади організації циклів будь-якою мовою високого рівня.

  5. Покажіть на прикладах, як задається кількість повторень циклів будь-якою мовою високого рівня.

До команд управління циклом відносяться:

  • команди організації циклу з лічильником ЕСХ/СХ;

  • команди організації циклу з лічильником ЕСХ/СХ з можливістю дострокового виходу з циклу за додатковою умовою.

До першої групи відносяться команди:

JCXZ (Jump if CX=Zero) перехід, якщо СХ дорівнює 0;

JECXZ (Jump if ECX=Zero)перехід, якщо ЕСХ дорівнює 0.

Операндом в усіх командах слугує зміщення (мітка), за допомогою якого визначається адреса переходу.

Команди перевіряють вміст відповідного лічильника і якщо його вміст дорівнює 0, відбувається перехід на вказане у команді зміщення (мітку), а якщо не дорівнює, то виконується наступна команда.

До команд другої групи відносяться команди:

LOOP (LOOP control by register CX) – управління циклом за вмістом регістра СХ;

LOOPE/LOOPZ (LOOP control by register CX not equal 0 and ZF=1) – управління циклом за вмістом регістра СХ з урахуванням значення прапорця ZF;

LOOPNE/LOOPNZ (LOOP control by register CX not equal 0 and ZF=0) – управління циклом за вмістом регістра СХ з урахуванням значення прапорця ZF.

Команда LOOP <адреса> забезпечує умовний перехід для циклічного виконання ділянки програми. Кількість повторень циклу визначається вмістом регістра ЕСХ/СХ. Усі різновиди команди LOOP автоматично виконують декремент вмісту ЕСХ/СХ і зупиняють виконання циклу, якщо вміст лічильника дорівнює 0.

Команди LOOPE/LOOPZ є різновидами однієї команди, так само як і команди LOOPNE/LOOPNZ. Алгоритм виконання цих команд однаковий. Команди декрементують вміст ЕСХ/СХ й аналізують його вміст і значення прапорця ZF, якщо вміст ЕСХ/СХ дорівнює 0, то виконується наступна за LOOPхх команда, якщо вміст ЕСХ/СХ дорівнює 1, то виконується перехід до початку циклу. Якщо значення ZF = 0, то команди LOOPE/LOOPZ виконують вихід з циклу, а команди LOOPNE/LOOPNZ повертаються до початку циклу. Для значення ZF = 1 команди виконується навпаки. Команди LOOPNE/LOOPNZ можливо використовувати для пошуку першого нульового елементу у рядку даних, якщо безпосередньо перед цією командою виконати порівнювання елемента з 0, а команди LOOPE/LOOPZ для пошуку першого ненульового елемента.

Контрольні питання:

  1. Які групи команд управління циклом Ви знаєте?

  2. Що слугує операндом у командах управління циклом?

  3. Як виконується декремент вмісту регістра-лічильника CX у програмі при використанні команд JCXZ і LOOP?

  4. Які прапорці перевіряє команда LOOPЕ?

Контрольні питання підвищеної складності:

    1. Для чого використовується мітка в командах передачі управління?

    2. Яка команда буде виконуватися після виконання команди LOOPNZ М1

M1: MOV AX,DX

LOOPNZ М1

NOP,

якщо до її виконання в регістрі СХ було записано число 0001Н?

    1. Як можливо використовувати команди LOOPE/LOOPZ при обробленні рядків даних?

    2. Скільки разів буде виконуватись команда LOOPE М1, якщо до початку циклу в регістр СХ був записаний нуль?

    3. Наведіть фрагмент програми, в якому вихід з циклу здійснювався б за умовою JPO M1.