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

Організація циклу за допомогою команди jmp (Другий спосіб)

Команда jmp передає управління у вказану точку того ж або іншого програмного сегмента. Адреса повернення не зберігається. Команда не впливає на прапори процесора.

Команда jmp має п’ять різновидів:

1. перехід прямої короткий (у межах - 128 ... + 127 байтів);

2. перехід прямої ближній (в межах поточного програмного сегменту);

3. перехід прямої дальній (у інший програмний сегмент);

4. перехід непрямий ближній;

5. перехід непрямий дальній.

Всі різновиди переходів мають одну і ту ж мнемоніку jmp, хоча і розрізняються коди операцій. У багатьох випадках транслятор може визначити вид переходу по контексту, в тих же випадках, коли це неможливо, слід використовувати атрибутні оператори (short - прямий короткий перехід; near ptr - прямий ближній перехід; far ptr - прямий дальній перехід; word ptr - непрямий ближній перехід; dword ptr - непрямий дальній перехід).

Команда

Призначення

Процесор

JMP мітка

Безумовний перехід

8086

. model tiny

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

. code

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

org 100h

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

begin:

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

label1:

; створюємо мітку

mov ah,9

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

mov dx,offset String

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

int 21h

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

jmp Label1

; перехід на строку з міткою Label1

add cx,12

; подати до значення регістра cx число 12

dec cx

; зменшити значення регістра cx на 1

ret

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

string db "PRIVET",13,10,'$'

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

end begin

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

В результаті роботи програми буде зациклений блок рядків (6) - (10) (Виведення рядка PRIVET численна кількість разів) Рядки (10) - (11).

Організація циклу за допомогою команди dec і jnz (Третій спосіб)

За допомогою цих операторів можна створювати цикли, які будуть працювати швидше оператора Loop. Комбінована робота команд DEC і JNZ зменшує вміст регістра CX на 1 і виконує перехід на мітку, якщо в CX не дорівнює нулю.

Команда DEC, крім того, встановлює прапорець нуля у регістрі прапорців в стан 0 або 1. Команда JNZ потім перевіряє цю установку.

Аналогічно командам JMP і LOOP операнд в команді JNZ містить значення відстані між кінцем команди JNZ і адресою переходу (Label 1), яке додається до командного покажчику. Ця відстань повинна бути в межах від - 128 до +127 байт.

. 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 "виведення строки"

dec cx

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

jnz Label1

; умовний перехід на строку з міткою Label1

ret

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

string db 'priver ',13,10, '$'

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

end begin

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