ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Команди безумовних переходів

 

Безумовний перехід – це такий перехід, що передає керування завжди, коли він виконується.

Команда безумовного переходу має формат:

JMP ім'я

де “ім'я” – адреса переходу.

Як уже відзначалося, адреса переходу може мати атрибут NEAR чи FAR, бути прямою чи непрямою.

При прямому переході команда JMP займає три байти, якщо мітка “ім'я” має атрибут NEAR, і п'ять байтів, якщо вона має атрибут FAR. Наприклад команда

JMP MET1

займає три байти, якщо мітка MET1 знаходиться в тому ж сегменті, чи п'ять байтів, якщо вона знаходиться в іншому сегменті. В останньому випадку перед сегментом JMP команди повинна бути зазначена директива EXTRN MET1: FAR, а перед сегментом, що містить мітку – директива PUBLIC MET1.

Якщо адреса мітки розташована не далі –128 чи +128 байтів від адреси команди JMP, то можна зробити цю команду двобайтовою, вказавши, що її операнд має тип SHORT. Наприклад, команда

JMP SHORT MET1

займе два байти. Вона виконується за той же час, що і команда

JMP MET1

але займає в пам'яті на один байт менше.

При безумовних переходах за непрямою адресою здійснюється вибір адреси передачі керування з пам'яті або регістрів.

Розглянемо фрагмент програми, що містить переходи за непрямою адресою:

TOM: DW MET2

. . .

JMP SI ; Перехід за адресою, що міститься в регістрі SI

. . .

JMP TOM ; Перехід за адресою, що міститься в комірці TOM

. . .

MET2: ADD AX, CX

В команді переходу за непрямою адресою можуть використовуватися різні способи адресації, які далі будуть розглянуті докладніше.

 

Команди умовних переходів

 

Умовний перехід – це такий перехід, що передає керування за наявності певних умов, сформованих станом регістра прапорців, чи регістра CX.

Всі команди умовних переходів мають загальний формат

Jx ім'я

де х - модифікатор, що складається з однієї, двох чи трьох букв;

"ім'я" – адреса переходу.

Опис команд умовних переходів приведене в табл. 7.

Як видно з табл. 7 деякі з команд мають дві чи три мнемоніки, введені тільки для зручності програмування. Команди дозволяють перевірити усі відношення між знаковими і беззнаковими числами. Терміни "більше" і "менше" відносяться до знакових чисел, представлених у доповняльному коді, "вище" і "нижче" – до беззнакових. Наприклад, число BE "менше" і "вище" числа 37.

Розглянемо приклади використання команд умовних переходів після арифметичних команд.

1. Послідовність команд

ADD AL, DL

JC MVR

здійснює перехід до мітки MVR, якщо при додаванні виникає перенос.

2. Послідовність команд

SUB AX, BX

JZ BEGIN

здійснює перехід до мітки BEGIN, якщо при відніманні в регістрі AX отримали нульовий результат.

Командам умовних переходів можуть передувати будь-які команди, що змінюють стан прапорців, але частіше вони використовуються разом з командою порівняння CMP.

Подібно команді SUB команда CMP віднімає операнд-джерело від операнда-приймача і в залежності від результату встановлює відповідні прапорці. Але на відміну від команди SUB, команда CMP не змінює операндів, тобто не зберігає результат віднімання. Наприклад, послідовність команд

CMP AL, BL

JE ZERO

здійснює перехід до мітки ZERO, якщо значення регістрів AL і BL однакові.

 

Таблиця 7 - Команди умовних переходів

Мнемоніка Умова Відношення КОП Функція
JA/JNBE CF ZF=0 > Перейти, якщо вище/ не нижче або дорівнює
JAE/JNB CF=0 вище або дорівнює/ не нижче
JB/JNAE CF=1 < нижче/ не вище або дорівнює
JBE/JNA CF ZF=1 нижче або дорівнює/ не вище
JC CF=1   є перенесення
JE/JZ ZF=1 = дорівнює/ нуль
JG/JNLE (SF OF) ZF=0 > 7F більше/ не менше або дорівнює
JGE/JNL SF OF=0 7D більше або дорівнює/ не менше
JL/JNGE SF OF=1 < 7C менше/ не більше або дорівнює
JLE/JNG (SF OF) ZF=1 7E менше або дорівнює/ не більше
JNC CF=0   немає перенесення
JNE/JNZ ZF=0 не дорівнює/ не нуль
JNO OF=0   немає переповнення
JNP/JPO PF=0   7B немає паритету/ паритет непарний
JNS SF=0   немає знаку
JO OF=1   є переповнення
JP/JPE PF=1   7A є паритет/ паритет парний
JS SF=1   є знак
JCXZ (CX)=0   вміст регістра СX=0

 

У табл. 8 наведений скорочений набір команд умовних переходів, що застосовуються разом із командою CMP.

На відміну від команди JMP, яка може передати керування в будь-яке місце пам'яті, адреса мітки в командах умовних переходів повинна знаходиться не далі -128 чи +128 байтів від адреси самої команди. Якщо ж необхідно здійснити умовний перехід на більшу відстань, тоді використовують дві команди переходу.

Наприклад, послідовність команд

JNZ NEXT

JMP MORE

NEXT: . . .

при стані прапорця ZF=1 здійснює перехід до мітки MORE, що може знаходиться на відстані до 32768 байт; у противному разі перехід здійснюється до мітки NEXT.

 

Таблиця 8 - Застосування команд умовної передачі керування

в поєднанні з командою CMP

Умова переходу Наступна за CMP команда
Для чисел без знаку Для чисел зі знаком
Приймач більший джерела JA JG
Приймач дорівнює джерелу JE JE
Приймач не дорівнює джерелу JNE JNE
Приймач менший джерела JB JL
Приймач менший джерела або дорівнює йому JBE JLE
Приймач більший джерела або рівний йому JAE JGE

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти