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

 

Команди безумовних переходів (БП) дозволяють перейти у програмі на команду із заданою адресою без запам’ятовування адреси повернення. Команди безумовних переходів зреалізовуються у МП МС68000 з коротким та довгим зміщеннями та різними типами адресування. Короткі зміщення становлять 28 адрес, а довгі – 216 адрес. Команда безумовного переходу JMP завантажує до програмного лічильника РС ефективну адресу ЕА, яка подається за типами адресування: прямим, непрямим регістровим зі зміщенням, з індексуванням, відносним та відносним з індексуванням. Ця ефективна адреса і є адресою команди, якій передається керування програмою.

Команда безумовного переходу BRA відрізняється від JMP способом формування нового вмісту програмного лічильника. Він формується як сума вмісту програмного лічильника РС (адреса першого байта наступної команди програми) та зміщенням Ds, яке задається у команді. Величина Ds, яка вміщує до 16-ти розрядів, задається числом зі знаком, тому нове значення РС може бути більше чи менше за його поточне значення. Якщо вміст Ds становить не більше за 8 розрядів (коротке зміщення), то він розміщується у молодшому байті першого слова команди. Якщо ж він становить 16 розрядів (довге зміщення), то задається окремим словом команди. Тому команди з коротким зміщенням займають менший обсяг пам’яті й виконуються швидше, ніж такі ж самі команди з довгим зміщенням.

Нижче наводяться приклади деяких команд безумовних переходів з різним типом адресування для МП МС68000.

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

$107008 JMP $1234

та

$107008 BRA.L $00107030

подано відповідно з коротким та довгим адресуванням.

Команди

$107030 JMP *+$10

та

$107030 BRA.S *+$10

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

Мова Асемблера МП МС68020 дозволяє використовувати команди з коротким зміщенням до 216 адрес та довгим – до 232 адрес.

Команди

$400620 JMP $400634.L

та

$400620 JMP $500020.L

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

Аналогічно будуть виконуватись команди

$400606 BRA.В *+$10,

$400606 BRA *+$10,

$400606 BRA.L *+$10

та

$ 400606 BRA.L $600000

Команди

JMP (*+ $10,PC)

та

JMP (*+ $100,PC)

використовують відносне адресування, а команди

JMP ($400610,РС,А2.W)

JMP (*+$10,РС,А2.W)

JMP ($8,РС,А2.W)

JMP (*+$1000,РС,А2.W)

JMP ($400610,ZРС,А2.W)

JMP ($400610,А2.W)

використовують непряме регістрове адресування з індексуванням.

 

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

 

Команди умовних переходів (розгалужень) Bcc мають 14 варіантів, які відрізнюються умовами. Якщо зазначена в команді умова виконується, то програма переходить на команду, адреса якої формується стосовно вмісту програмного лічильника РС, як у команді BRA; якщо – ні, то виконується наступна за командою умовного переходу команда. Як умови розгалуження використовуються 14 різних значень ознак N, Z, C, V та їхніх комбінацій. У багатьох випадках розгалуження програм виконується залежно від результату порівняння двох операндів за допомогою команди порівняння знакових та беззнакових чисел: CMP, CMPA, CMPI, CMPM, TSTтаТАS.

Порівняння операндів відбувається за їхнього віднімання згідно з табл. 12.2, внаслідок чого встановлюються ознаки N, Z, V, C. Сам результат не зберігається і значення операндів не змінюються.

Окремі команди дозволяють порівнювати операнд, що адресується ЕА, із вмістом регістра даних (команда СМР), регістра адреси (команда СМРА), безпосереднім операндом (команда СМРІ). Команда СМРМ використовується задля порівняння розташованих у пам’яті елементів двох масивів операндів, команди тестування TST та TAS є однооперандними варіантами команд порівняння.

 

Таблиця 12.2 – Команди порівняння та тестування

Синтаксис Асемблера Розрядність Операції Адресування
CMP <EA>,Dn CMPA <EA>,An CMPI #Im,<EA>     CMPM (Ay)+,(Ax)+ B, W, L W, L B, W, L     B, W, L Dn – <scr> An – <scr> <dst> – Im     <dst> – <scr> <scr> – усі, Dn – регістрове <scr> – усі, An – регістрове Im – безпосереднє, <EA> – регістрове, непряме регістрове з усіма модифікаціями або пряме, коротке чи довге Обидва операнди подаються з постінкрементуванням
TST <EA> TAS <EA> B, W, L <dst> – 0     <dst>–0;1®b7 Регістрове або непряме регістрове з усіма модифікаціями Регістрове або непряме регістрове з усіма модифікаціями

 

При виконуванні цих команд встановлюються ознаки N, Z, відповідно зі знаком і значенням (дорівнює чи не дорівнює 0) операнда, що адресується ЕА. Команда TAS після тестування встановлює у 1 старший біт операнда b7. Виконання цієї команди не можна перервати запитанням прямого доступу до пам’яті. Команда TAS використовується у мультипроцесорних системах задля встановлення семафора – спеціального біта, який дозволяє чи забороняє різним МП доступ до окремих блоків спільної пам’яті. Команда СМР2 є властива тільки МП МС68020, вона перевіряє перебування операнда у регістрі даних або адреси в регістрі адреси у зазначених в команді межах. Нижня границя LB обирається з комірки з адресою ЕА, верхня UB – з наступної. Якщо операнд дорівнює LB або UB, то Z = 1, якщо не дорівнює, то Z = 0. Якщо операнд перебуває у заданих межах, С = 0, якщо виходить, то С = 1.

Рівність операндів визначається залежно від значення ознаки Z: умови EQ та NE. Якщо порівнюються числа без знаку, то їхні відносні значення: вище (>), вище або дорівнює (>=), нижче (<), нижче або дорівнює (<=) – визначаються відповідно з умовами HI, HS, LO, LS. Як мнемокоди умов “вище або дорівнює” (HS) та нижче (LO) можна використовувати відповідно СС та CS.

Якщо порівнюються числа зі знаком, їхні відносні значення визначаються умовами GT, GE, LT, LE. Решта умов визначається знаком результату (PL, MI) та наявністю або відсутністю переповнення (VS, VC). Слід зауважити, що процесор МС680х0 не встановлює прапорець парності чи непарності кількості одиниць у результаті, який достатньо широко використовується, наприклад, при перевірці результату в обчислювальній техніці. Тому нижче наводиться підпрограма штучного формування цієї ознаки.

У запис команд умовного переходу мовою Асемблер мнемокод відповідної умови вводиться замість символу cc. Наприклад, B + EQ = BEQ – мнемокод команди розгалуження, якщо операнди дорівнюють один одному; B + MI = BMI – мнемокод команди розгалуження за від‘ємного результату. Види умов, які використовуються у командах розгалужень, наводяться в табл. 12.3.

 

Таблиця 12.3 – Види умов

Символи мови Умова, що перевіряється Значення ознак
NE Не дорівнює (ненульовий результат) Z = 0
EQ Дорівнює (нульовий результат) Z = 1
HI Вище C + N = 0
LS Нижче або дорівнює C + N = 1
HS (або СС) Вище або дорівнює (перенесення немає) С = 0
LO (або CS) Нижче (перенесення є) С = 1
GE Більше або дорівнює NÅV = 0
LT Менше NÅV = 1
PL Результат додатний N = 0
MI Результат від’ємний N = 1
GT Більше Z + (NÅV) = 0
LE Менше або дорівнює Z + (NÅV) = 1
VC Переповнення немає V = 0
VS Переповнення є V = 1
T Розгалуження є
F Розгалуження немає

 

Умови Т та F використовуються у складі команд DBF – безумовне виконання заданої кількості циклів та DBT– безумовний вихід з циклу.