Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_1-3.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
998 Кб
Скачать
☆

1.4 Команда порівняння cmp

У теоретичній частині роботі №1 був розглянутий регістр стану процесора Intel 8086, його структура та розташування бітів. Прикладом команди, яка змінює прапори регістра стану, є команда асемблера CMP. Формат команди:

{позначка} CMP [операнд1], [операнд2]

Команда зрівнює два операнда та, не змінюючи їх, впливає на прапори AF, CF, OF, PF, SF, ZF. Як операнди можуть бути використані регістри процесора, комірки пам’яті, безпосередні дані. Тому команда CMP ефективно використовується разом з командами умовного переходу, результат виконання яких безпосередньо залежить від значень прапорів регістра стану. Саме ці команди і будуть розглядатися далі.

1.5. Команди умовного переходу в мові асемблер

Асемблер підтримує велику кількість команд умовного переходу, які здійснюють передачу керування у програмі залежно від вмісту регістра стану. Зміст головних з них: здійснити перехід на позначку-операнд, якщо результат операції нуль (або не нуль), якщо одне число більше (менше) другого, якщо результат є додатним (від’ємним), парним (непарним), якщо є (немає) перенесення.

Завдання для перевірки №6: Чи пам’ятаєте Ви, як визначається парність числа у теорії інформації та програмуванні і чим це визначення суттєво відрізняється від визначення парності в арифметиці?

Часто-густо команди умовного переходу використовуються після команди CMP. Загальний формат команд умовного переходу такий:

{позначка} [код команди] [позначка-операнд]

Аналогічно командам JMP та LOOP, комп’ютерний код команди умовного переходу містить значення відстані між кінцем команди та адресою передачі керування. Ця відстань, як і для команди LOOP, мусить відповідати межам найкоротшої адресації (тип SHORT), а при виході за ці межі транслятор видає повідомлення «Relative jump out of rang».

При розгляді команд умовного переходу слід відзначити, що використання тієї чи іншої команди залежить від типу даних, що зрівнюються. Розглядаючи у попередній роботі представлення від’ємних чисел, ми з’ясували, що від’ємні та великі додатні числа комп’ютер представляє однаково, і вся відповідальність по визначенню знака числа лежить на програмістові. Насправді, як визначити яке з чисел більше - E8H чи 15H? Результат залежить від того, як розглядати число E8H - як додатне чи як від’ємне. Тому у мові асемблер існує дві групи операцій умовного переходу - для знакових та для беззнакових даних (табл. 17, 18). У табл. 19 наведені команди для особливих арифметичних перевірок. Якщо команда допускає два різних написання, то вони наведені через символ / (прямий слеш).

Таблиця 17. Переходи для знакових даних

Мнемоніка команди

Що виконує

Прапори, що перевіряються

JE / JZ

Перехід, якщо рівно (нуль)

ZF

JNE / JNZ

Перехід, якщо не рівно (не нуль)

ZF

JG / JNLE

Перехід, якщо більше (не менше або рівно)

ZF, SF, OF

JGE / JNL

Перехід, якщо більше або рівно (не менше)

SF, OF

JL / JNGE

Перехід, якщо менше (не більше або рівно)

SF, OF

JLE / JNG

Перехід, якщо менше або рівно (не більше)

ZF, SF, OF

Таблиця 18. Переходи для беззнакових даних

Мнемоніка команди

Що виконує

Прапори, що перевіряються

JE / JZ

Перехід, якщо рівно (нуль)

ZF

JNE / JNZ

Перехід, якщо не рівно (не нуль)

ZF

JA / JNBE

Перехід, якщо вище (не нижче або рівно)

ZF, CF

JAE / JNB

Перехід, якщо вище або рівно (не нижче)

CF

JB / JNAE

Перехід, якщо нижче (не вище або рівно)

CF

JBE / JNA

Перехід, якщо нижче або рівно (не вище)

CF, AF

Таблиця 19. Особливі арифметичні перевірки

Мнемоніка команди

Що виконує

Прапори, що перевіряються

JS

Перехід, якщо є знак (від’ємне)

SF

JNS

Перехід, якщо немає знаку (додатне)

ZF

JC

Перехід, якщо є перенесення

CF

JNC

Перехід, якщо немає перенесення

CF

JO

Перехід, якщо є переповнення

OF

JNO

Перехід, якщо немає переповнення

OF

JP / JPE

Перехід, якщо паритет парний

PF

JNP / JPO

Перехід, якщо паритет непарний

PF

Зазначимо, що команди переходу за умовою «рівно або нуль» однакові для знакових та беззнакових даних.

Оскільки регістр СХ є дуже важливим і використовується процесором як лічильник, існує окрема команда JCXZ, яка здійснює передачу керування за позначкою, якщо в регістрі CX міститься число 0. Приклад використання команд умовного та безумовного переходів та циклу:

A10: MOV SUM, CX

ADD SUM, AX

JP A11

SUB AX,CX

JMP A12

A11: ADD AX,BX

A12: CMP AX,100

JG A13;

LOOP A10

A13: NOP

RET

Завдання для перевірки №7: Опишіть алгоритм, що реалізований у наведеному прикладі, за допомогою тезових формуліровок.

Завдання для перевірки №8: Перепишіть приклад, наведений у розділі «Команда циклу LOOP» не використовуючи команду циклу, а реалізуючи циклічний процес через команди умовного та безумовного переходів. Порівняйте, яка з програм є простішою і містить менше асемблерних команд.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]