Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л-р-6_укр.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
123.39 Кб
Скачать

Лабораторна робота №6 команди пересилки даних. Ознайомлення з роботою циклів

Мета роботи: ознайомитися зі структурою та реалізацією циклів в програмі.

Короткі теоретичні відомості

Цикли, що дозволяють виконати деяку ділянку програми багаторазово, в будь-якій мові є однією з найбільш уживаних конструкцій. У системі команд МП 86 цикли реалізуються, головним чином, за допомогою команди loop (петля), хоча є й інші способи організації циклів. У більшості випадках число кроків в циклі визначається вмістом регістра СХ, тому максимальне число кроків складає 64 К.

Організація циклічних переходів, як на мовах високого рівня, так і мовою assembler являє собою чудовий засіб, що дозволяє значно знизити код виконуваної програми.

У загальному вигляді будь цикл записується в асемблері як умовний перехід.

Організація циклу за допомогою команди loop (Перший спосіб)

Команда loop (анг. петля) виконує декремент вмісту регістра СХ (лічильник), і якщо воно не дорівнює 0, здійснює перехід на вказану мітку вперед або назад в тому ж програмному сегменті в діапазоні - 128 ... + 127 байт. Зазвичай мітка поміщається перед першою пропозицією тіла циклу, а команда loop є останньою командою циклу. Вміст регістра СХ розглядається як ціле число без знака, тому максимальне число повторень групи включених в цикл команд складає 65536 (якщо перед входом у цикл СХ = 0). Команда не діє на прапорці процесора.

Команда

Призначення

Процесор

LOOP мітка

Організація циклів

8086


Простий приклад організації циклічного переходу (з лічильником в регістрі cx) на мові Assembler:

. model tiny

; модель пам’яті, в якій сегменти коду, даних і стека об’єднані.

. code

; сегмент кода, який містить дані.

org 100h

; початок СОМ-файла

begin:

; мітка початку кода програми

mov cx,10

; завантажуємо в (регістр-лічильник) CX кількість повторів (відлік буде йти від 10 до 0)

Label1:

; створюємо мітку (Label - мітка).

mov ah,9

; поміщаємо номер функції DOS "виведення рядка (9)" в регістр АН.

mov dx, offset String

;поміщає в регістр DX зсув мітки String щодо початку сегменту даних

int 21h

; функція DOS "виведення строки"

loop Label1

; оператор loop зменшує на одиницю CX і, якщо він не дорівнює нулю, переходить на мітку Label1 (рядок 6)

ret

; функція DOS "завершити програму"

string db 'privet $'

; cтрока, яка містить дані для виведення

end begin

; мітка завершення кода програми

У рядку (5) завантажуємо в CX кількість повторів (відлік буде йти від 10 до 0). У рядку (6) створюємо мітку (Label - мітка). Далі (рядки (7) - (9)) виводимо повідомлення. І в рядку (10) оператор loop зменшує на одиницю CX і, якщо він не дорівнює нулю, переходить на мітку Label1 (рядок (6)). Таким чином, рядок буде виведена на екран десять разів. Коли програма перейде на рядок (11), регістр CX буде дорівнює нулю.