Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Порядок виконання роботи




Цикли

Для чого використовуються цикли? Вони служать для роботи з масивами, перевірки стану портів вводу-виводу до отримання певного стану, очистки блоків пам’яті, читання рядків з клавіатури та виводу їх на екран і т.д. Цикли – це головний засіб, який використовується для виконання дій які повторюються. Тому використовуються вони досить часто, настільки часто, що у наборі інструкцій процесора 8086 передбачено фактично декілька інструкцій циклів: LOOP, LOOPNE, LOOPE та JSXZ.

Давайте роздивимось спочатку інструкцію LOOP. Припустимо, ми хочемо вивести 17 символів текстової строки TestString. Це можна зробити наступним чином:

 

TestString DB ‘Це перевірка…’

 

mov cx,17

mov bx,OFFSET TestString

PrintStringLoop:

mov dl,[bx]; отримати наступний

; символ

inc bx; посилка на наступний

; символ

mov ah,2; функція DOS виводу на екран

int 21h; визвати DOS для виводу

; символу

dec cx; зменшити лічильник довжини

; рядка

jnz PrintStringLoop; обробити наступний символ, якщо він є.

 

Але ж є кращій спосіб. Можливо ви пам’ятаєте, що раніше ми говорили о том, що регістр СХ корисно буває використовувати для організації циклів. Інструкція:

 

loop PrintStringLoop

 

робить теж саме, що й інструкції:

 

dec cx

jnz PrintStringLoop

 

однак виконується вона скоріше та займає на один байт менше.

Кожний раз, коли вам потрібно організувати цикл, доки значення лічильника не буде дорівнювати 0, запишіть початкове значення лічильника у СХ та використовуйте інструкцію LOOP.

Як же будуються цикли з більш складною умовою завершення, ніж зворотній відлік значення лічильника? Для таких випадків передбачені інструкції LOOP та LOOPNE.

Інструкція LOOPE працює також, як інструкція LOOP, тільки цикл при її виконанні буде завершуватися (тобто перестануть виконуватися переходи), якщо регістр СХ прийме значення 0 чи флаг нуля буде встановлений у значення 1 (треба пам’ятати про те, що флаг нуля встановлюється у значення 1, якщо результат останньої арифметичної операції був нульовим або два операнди у останній операції зрівняння не збігались). Аналогічно, інструкція LOOPNE завершує виконання циклу, якщо регістр СХ прийняв значення 0 або флаг нуля скинутий (має нульове значення).

Інструкція LOOPE звісна також, як інструкція LOOPZ, інструкція LOOPNE – як інструкція LOOPNZ, також як інструкції JE еквівалентна інструкція JZ (це інструкції – синоніми).

Є ще одна інструкція циклу. Це інструкція JCXZ. Інструкція JCXZ здійснює перехід тільки в тому випадку, якщо значення регістру СХ дорівнює 0. Це дає зручний спосіб перевіряти регістр СХ перед початком циклу. Наприклад, у наступному фрагменту програми, при зверненні до якого регістр ВХ вказує на байт, які потрібно обнулити, інструкція JCXZ використовується для пропуску тіла циклу у тому разі, якщо регістр СХ має значення 0:

 

jcxz SkipLoop; якщо СХ має значення 0,;то нічого робити не треба

ClearLoop:

 

mov BYTE PTR [si],0; встановити наступний байту

; значення 0

inc si; посилка на наступний байт, що

; очищується

SkipLoop:

 

Чому бажано пропустити виконання циклу, якщо значення регістру СХ дорівнює 0? Тому що у протилежному випадку значення СХ буде зменшено до величини 0FFFFh та інструкція LOOP здійснить перехід на вказану мітку. Після цього цикл буде виконуватися 65535 разів. Ви ж бажали, щоб значення регістру СХ, рівне 0, вказувало, що треба обнулити 0 байт, а не 65536. Інструкція JCXZ дозволяє вам у цьому випадку швидко виконати потрібну перевірку.

Отримати індивідуальне завдання у викладача (варіанти наведені у додатку А).

Розрахувати корені квадратного рівняння.




Поделиться с друзьями:


Дата добавления: 2015-04-25; Просмотров: 486; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.