Главная | Обратная связь
МегаЛекции

Організація циклу за допомогою команди 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 ; мітка завершення кода програми

 

Програма для практики

Напишемо програму, яка виводить на екран всі ASCII-символи (16 строк по 16 символів в строчці).

. model tiny ; модель пам'яті, в якій сегменти коду, даних і стека об'єднані.
. code ; сегмент коду, який містить дані.
org 100h ; початок СОМ-файла
begin: ; мітка початку кода програми
mov cx,256 ; задаємо значення лічильника (256 символів)
mov dl,0 ; перший символ - з кодом 00
mov ah,2 ; номер функції DOS "виведення символу"
cloop: int 21h ; виклик DOS
inc dl ; збільшення DL на 1 – наступний символ
test dl,0Fh ; якщо DL не кратний 16
jnz continue_loop; ; продовжити цикл,
push dx ; інакше: зберегти поточний символ
mov dl,0Dh ; вивести CR
int 21h ; виклик DOS
mov dl,0Ah ; вивести LF
int 21h ; виклик DOS
pop dx ; відновити поточний символ
continue_loop: ; мітка
loop cloop ; продовжити цикл
ret ; завершення СОМ-файла
end begin ; мітка завершення кода програми

 



Тут за допомогою команди LOOP оформляється цикл, що виконується 256 раз (значення регістра СХ на початку циклу). Регістр DL містить код символу, який дорівнює нулю на початку циклу і збільшується кожного разу на 1 командою INC DL. Якщо значення DL відразу після збільшення на 1 кратне 16, воно тимчасово зберігається в стеку і на екран виводяться символи CR і LF, що виконують перехід на початок нового рядка. Перевірка виконується командою TEST DL, 0Fh - результат операції AND над DL і 0Fh буде нулем, тільки якщо молодші чотири біта DL дорівнюють нулю, що і відповідає кратності шістнадцяти.

 

Зміст звіту

3.1 Титульний лист.

3.2 Індивідуальний варіант завдання.

3.3 Тестові набори даних і передбачувані результати.

3.4 Текст програми до налагодження.

3.5 Список помилок, виявлених при налагодженні.

3.6. Результати виконання тестів.

3.7. Роздруківка лістингу компіляції налагодженої програми із зазначенням роботи кожного рядка.

 

Завдання для виконання

4.1 Виконайте всі приклади, що містяться в описі даної лабораторної роботи.

4.2 Проаналізуйте роботу програми прикладу для практики.

4.3 Вивчити умови організації циклічних переходів на мові Асемблера.

4.4 Напишіть програму, що виводить на екран слово "!!!! Hello!!!!" використовуючи команди циклічних переходів (3 варіанти).

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

4.6 Програму ассемблюйте в файл типу *. Com або *. Exe (на вибір);

 

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

5.1 Організація циклу за допомогою команди loop?

5.2 Значимість регістра cx?

5.3 Максимальне число повторень команд циклу визначається регістром сх?

5.4 Організація циклу за допомогою команди jmp?

5.5. Різновиди команди jmp?

5.6. Організація циклу за допомогою команд dec і jnz?

Таблиця 1 – Варіанти завдань

№ вар. Дані для виведення № вар. Дані для виведення
Циклический переход Перемикання задач в програмах
Різновиди команди jmp Формат використовуваних елементів
Організація циклу за допомогою Елементи каталогів і таблиць сторінкових перетворень
Отримайте заданий від викладача Сегмент стану задачі TSS
Лабораторная работа Базові формати
Однокристальный процессор і8080 Формати даних FPU
Графічне позначення і призначення виводів Формати даних MMX і 3Dnow, SIMD
Побудова модуля ЦП на основі і8086 Класифікація та побудова пам’яті
Організація пам’яті і програмна модель і80286 Одноразові та багаторазові ПЗП
Архітектура 32-розрядних МП Флеш пам’ять
Особливості архітектури МП і386 ОЗП- ПЗП динамічного типу.
Пакетний режим передачі даних Принцип організації кеш пам’яті
МП Pentium Принцип організації стекової пам’яті.
Методи і правила формування адреси Техніка модульного програмування
Сторінковий механізм формування фізичної адреси Команди завантаження
Засоби підтримки мультизадачності РІС-контролери

 





Рекомендуемые страницы:




Читайте также:


Воспользуйтесь поиском по сайту:
©2015- 2020 megalektsii.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.