Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_раб_4_Хихловская.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
165 Кб
Скачать
☆

2.2 Умовні переходи

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

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

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

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

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

Синтаксис асемблера

Розрядність

Операції

Адресування

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

8

<dst> – 0

<dst>–0;1b7

Регістрове або непряме регістрове

з усіма модифікаціями

Регістрове або непряме регістрове

з усіма модифікаціями

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

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

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

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

Мнемокод

Умова, що перевіряється

Значення cc

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

Розгалуження є

1

F

Розгалуження немає

0

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

До команд, що встановлюють прапорці, належать також команди бітових операцій, які наводяться у таблиці 2.3. Ці команди встановлюють значення ознаки Z відповідно зі значенням тестованого біта bn в операнді, що адресується <ЕА>. Якщо операнд розміщено у регістрі даних, він трактується як довге слово, якщо у комірці пам’яті, – як байт. Номер тестованого біту задається вмістом регістра Dn або безпосереднім операндом Nb. Значення Z=1 встановлюється, якщо тестований біт bn=0, і Z=0, якщо bn=1.

Команда BTST зберігає значення тестованого біта незмінним, команда BSET після тестування встановлює значення bn=1, а команда BCLR – значення bn=0. Команда BCHG інвертує значення біта bn після тестування.

Вказані команди можуть виконуватися на МП МС68000 та МС68020.

У МП68020 введено також нову групу команд, яка виконує операції з бітовими полями, довжиною до 32-х бітів. Для обрання бітового поля <bf> у команді вказується ефективна адреса ЕА операнда, зміщення 0f, яке визначає номер молодшого (першого) біта в полі <bf>, а також розмір поля Wf (кількість бітів у полі). При виконанні кожної з цих команд у регістрі CCR встановлюються ознаки N, Z, які характеризують вміст вказаного поля <bf>: ознака N набирає

Таблиця 2.3 – Команди бітових операцій

Синтаксис асемблера

Розрядність

Операції

Адресування

BTST Dn, <EA>

B, L

 Z

Dn – регістрове,

операнда – усі види

BTST #Nb, <EA>

B, L

Z

Nb – безпосереднє,

операнда – усі види

BSET Dn, <EA>

B, L

Z, 1bn

Dn – регістрове,

операнда – усі види

BSET #Nb, <EA>

B, L

Z, 1bn

Nb – безпосереднє,

операнда – регістрове,

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

BCLR Dn, <EA>

B, L

Z, 0bn

Dn – регістрове,

операнда – регістрове,

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

BCLR #Nb, <EA>

B, L

Z, 0bn

Nb – безпосереднє,

операнда – регістрове,

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

BCHG Dn, <EA>

B, L

Z, bn

Dn – регістрове,

операнда – регістрове,

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

BCHG #Nb, <EA>

B, L

Z, bn

Nb – безпосереднє,

операнда – регістрове,

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

значення старшого біта поля, ознака Z=1 встановлюється, якщо усі біти поля мають значення 0. Ознаки С та V обнулюються, Х не змінюється. Після встановлення ознак команда BFCHG інвертує значення бітів у полі <bf>, команда BFCLR заповнює поле нулями, команда BFSET – одиницями. Команда BFTST тільки встановлює ознаки і не змінює значення бітів. Команди BFEXTS та BFEXTU завантажують обране бітове поле у регістр Dn з розширенням його до 32-х розрядів знаком або нулями. Команда BFINS виконує обернену процедуру і пересилає Wf молодших розрядів з регістра Dn у вказане бітове поле. Команда BFFFO визначає Nb – номер першого біта у полі <bf>, який має значення 1, і заносить цей номер у регістр Dn.

Значення зміщення й розміру поля {0f: Wf} можуть задаватися у команді безпосередньо числами або вказуватися вмістом регістрів даних як 0f та Wf, наприклад, {D1: D2} або {10: D3}. Значення Wf повинні перебувати у діапазоні 0…31, а Wf=0 визначає розмір поля 32-го біта. Значення 0F, яке задається безпосередньо, також повинно бути у діапазоні 0…31. Якщо для визначення 0f вказується регістр даних, то його вміст трактується як число зі знаком.

Приклади команд бітових операцій:

  1. BFCHG D1{#6: #3}

Команда інвертує 3 біти числа, яке вміщено у регістр D1, починаючи з 6-го біта зліва.

  1. MOVEA.L #400700,A4; завантаження адреси до регістру А4

CLR. L (A4); обнулення комірки пам‘яті за ЕА=(А4)