
- •1 Мета роботи
- •2 Основні положення
- •2.1 Безумовні переходи
- •2.2 Умовні переходи
- •Moveq #10, d0 ; завантаження номера першого ; перетворюваного біта до d0
- •2.3 Організація програмних циклів
- •2.4 Звернення до підпрограм
- •Bra.S m5; обхід запису числа fdh у d2
- •M5: move d5,sr; відновлення регістру стану з d5
- •3 Контрольні питання
- •4 Домашнє завдання
- •Непарні варіанти
- •Парні варіанти
- •5 Лабораторне завдання
- •6 Зміст протоколу
- •7 Список літератури
МІНІСТЕРСТВО ОСВІТИ І НАУКИ
___________________________________________________
ОДЕСЬКА НАЦІОНАЛЬНА АКАДЕМІЯ ЗВ’ЯЗКУ ім. О. С. Попова
Кафедра комп’ютерно-інтегрованих технологічних процесів і виробництв
Хіхловська І.В.
Методичні вказівки до віртуальної
лабораторної роботи № 9
Програмування МП МС68ххх фірми Motorola.
Організація розгалужених та циклічних програм.
Підпрограми
з дисципліни
“Обчислювальна техніка та мікропроцесори”
для студентів
ННІ Дистанційного та заочного навчання та
працевлаштування випускників
ННІ Інфокомунікацій та програмної інженерії
та ННІ Комп’ютерно-інтегрованих технологій,
автоматизації та логістики
Одеса 2015
УДК 004+00431+621.39(075) План НМВ 2015 р.
Укладач – ХіхловськаІ.В.
Рецензент – Ошаровська О.В.
Методичні вказівки до віртуальної лабораторної роботи №9 – Програмування МП МС68ххх фірми Motorola.Організація розгалужених та циклічних програм. Підпрограми.
Розглядаються основні принципи програмування МП фірми Motorola, складання розгалужених, циклічних програм та організація підпрограм на мові асемблер МП MC68ххх фірми Motorola. Методичний посібник вміщує 20 варіантів домашніх завдань до лабораторної роботи.
Методичні вказівки призначені насамперед для використання кейсової технології в дистанційному навчанні.
Схвалено Затверджено
на засіданні кафедри методичною радою
КІТ П і В та рекомендовано академії зв’язку
до друку Протокол № __ від __.__.15 р.
Протокол № __ від __.__.15 р.
1 Мета роботи
Метою роботи є ознайомлення зі способами організації розгалужених та циклічних програм у мікропроцесорах МС68000 та МС68020 фірми Motorola мовою асемблер, командами передавання управління та набуття навичок складання і налагоджування розгалужених та циклічних програм, а також підпрограм.
2 Основні положення
Команди передавання управління використовують, якщо треба перейти до потрібної адреси у програмі з метою організації безумовних та умовних переходів, циклів та виклику підпрограм.
2.1 Безумовні переходи
Команди безумовного переходу (БП) дозволяють перейти на задану адресу програми без запам’ятовування адреси повернення. Команди безумовних переходів зреалізовуються з коротким та довгим зміщеннями та різними типами адресування. Короткі зміщення становлять 8 бітів, а довгі – 16 або 32 біти. Команда безумовного переходу JMP завантажує у програмний лічильник РС вміст комірки пам‘яті, що адресується ефективною адресою ЕА. Цей вміст є адресою команди, якій передається управління програмою.
Наприклад, команда
JMP $ 1234. W
подана з абсолютним коротким адресуванням, яке дозволяє задавати зміщення у діапазоні $F8000…$FFFFFF.
Команди
JMP $400700. L
JMP *+ $ 100. L
подані з абсолютним довгим адресуванням і є ідентичними, якщо (РС)=$400600.
Команди
JMP ($400610, PC)
JMP (*+$10, PC)
подані з непрямим адресуванням з преіндексуванням і також є ідентичними.
Команди
JMP ($400610, PC, A2. W)
JMP (*+$10, PC, A2. W)
JMP ($8, PC, A2. W)
подані з непрямим адресуванням з індексуванням зі зміщенням у 8 розрядів.
Команди
JMP (*+$1000, PC, A2. W)
JMP ($400610, ZPC, A2. W)
JMP ($400610, A2. W)
використовують той самий спосіб адресування, але зміщення становить 16 та 32 розряди.
Безумовний перехід зреалізовується також за допомогою команди BRA, яка відрізняється від JMP способом формування нового вмісту програмного лічильника. Він утворюється як сума поточного вмісту РС (адреса наступної команди програми) та зміщення Ds, яке задається у команді. Величина Ds, яка вміщує до 16 розрядів, задається числом зі знаком, тому нове значення РС може бути більше чи менше за його поточне значення. Якщо вміст Ds становить не більше за 8 розрядів (коротке зміщення), то він розміщується у молодшому байті першого слова команди. Якщо ж він становить 16 розрядів (довге зміщення), то задається окремим словом команди. Тому команди з коротким зміщенням займають менший обсяг пам’яті й виконуються швидше, ніж такі ж самі команди з довгим зміщенням.
Наприклад,
BRA $400610
BRA.L *+$10
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;1b7 |
Регістрове або непряме регістрове з усіма модифікаціями Регістрове або непряме регістрове з усіма модифікаціями |
Рівність операндів визначається залежно від значення ознаки 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 |
Більше або дорівнює |
NV=0 |
LT |
Менше |
NV=1 |
PL |
Результат додатний |
N=0 |
MI |
Результат від’ємний |
N=1 |
GT |
Більше |
Z+(NV)=0 |
LE |
Менше або дорівнює |
Z+(NV)=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 |
|
Dn – регістрове, операнда – усі види |
BTST #Nb, <EA> |
B, L |
Z |
Nb – безпосереднє, операнда – усі види |
BSET Dn, <EA> |
B, L |
Z, 1bn |
Dn – регістрове, операнда – усі види |
BSET #Nb, <EA> |
B, L |
Z, 1bn |
Nb – безпосереднє, операнда – регістрове, непряме регістрове, відносне, відносне з індексуванням |
BCLR Dn, <EA> |
B, L |
Z, 0bn |
Dn – регістрове, операнда – регістрове, непряме регістрове, відносне, відносне з індексуванням |
BCLR #Nb, <EA> |
B, L |
Z, 0bn |
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 вказується регістр даних, то його вміст трактується як число зі знаком.
Приклади команд бітових операцій:
BFCHG D1{#6: #3}
Команда інвертує 3 біти числа, яке вміщено у регістр D1, починаючи з 6-го біта зліва.
MOVEA.L #400700,A4 ; завантаження адреси до регістру А4
CLR. L (A4) ; обнулення комірки пам‘яті за ЕА=(А4)