
- •Українська державна академія зв’язку ім. О.С. Попова
- •Затверджено
- •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 Зміст протоколу
Moveq #10, d0; завантаження номера першого ; перетворюваного біта до d0
MOVEQ #15, D1; завантаження кількості перетворюваних
; бітів до D1 (F)
BFCHG (A4) {D0: D1}; інвертування
До виконання команди BFCHG комірку пам‘яті було обнулено. Після виконання цієї команди у комірці буде число
0000 0011 1111 1111 1111 1000 0000 B=$003FFF00
BFCLR ([$400700]) {#2: #10}
Команда обнулить поле у 16 бітів довжиною, починаючи зі зміщення 2 біта у довгому слові з адресою $400700.
BFEXTS ($400600, A0) {D0: D1}, D2
З комірки пам‘яті за адресою ($400600 (A0)) бітове поле, починаючи зі зміщення, вказаного у D0, довжиною у кількість бітів, вказану у D1, завантажується у регістр D2 та поширює знак до 32-х бітів.
BFEXTU D1 {#0: #1}, D2
Команда пересилає з регістру D1 один біт, починаючи зі зміщення 0 до регістру D2 і заповнює нулями інші розряди.
BFINS D2, D3 {#2: #$10}
Якщо регістр D2 вміщує число $FFFFFFFF, а регістр D3 – усі нулі, то після виконання команди регістр D2 вміщуватиме число $FFFFFFFF, а регістр D3 – число $3FFFC000.
BFSET D1 {D2: D3}
Команда встановлює одиниці у бітах числа, яке вміщується у D1, починаючи зі зміщення (D2) у кількості (D3).
BFTST D0 {$10: #4}
Команда тестує біти з b4 по b7. Якщо всі біти обнулено, у регістрі CCR встановлюється ознака Z=1, якщо b7 дорівнює 1, встановлюється ознака N у регістрі CCR.
2.3 Організація програмних циклів
Для організації циклів використовується команда DBсс. Вказаний у команді регістр Dn є лічильником циклів у цьому циклі. При виконанні команди DBсс спочатку перевіряється виконання умови, заданої у команді. Якщо умова виконується, то МП вибирає наступну команду програми (умовний вихід з циклу). Якщо ж умова не виконується, то вміст регістру Dn декрементується. Якщо при цьому вміст регістру Dn становить –1, то також вибирається наступна команда (цикл завершується). Якщо ж вміст Dn не дорівнює –1, то виконується перехід до команди з адресою (PC+Ds), яка є початком циклу. Команда DBсс припускає використання будь-яких умов, вказаних у таблиці 2.2. Команда організації циклу DBF реалізує безумовне виконання заданої кількості циклів, а команда DBT – безумовний вихід з циклу.
2.4 Звернення до підпрограм
Команда виклику підпрограм JSR завантажує у РС з комірки пам‘яті, адреса якої вказується у команді, адресу першої команди підпрограми. Перед цим поточний вміст РС (адреса наступної команди) запам‘ятовується у стеку. Виклик підпрограми виконується також командою BSR, яка використовує відносне адресування, аналогічно команді BRA. Повернення до програми, що викликає, після завершення підпрограми здійснюється командою RTS, яка повертає із стека РС його поточне значення, чим забезпечує перехід до виконання наступної команди програми. Як правило, перша команда підпрограми завантажує у стек поточне значення регістру SR з метою збереження ознак останнього результату. У цих випадках слід при поверненні з підпрограми використовувати команду RTR, яка відновлює поточне значення байта CCR (ознаки X, N, Z, V, C) та вміст лічильника команд РС.
Команди передавання управління наведено у таблиці 2.4.
Приклад 2.1 Написати підпрограму визначення парності або непарності кількості одиниць у байті, який міститься в регістрі.
Задача розв’язується шляхом логічного зсуву байта у циклі, наприклад, праворуч, та підрахування кількості разів, коли встановлювався прапорець перенесення С. Структурну схему алгоритму підрахування кількості одиниць зображено на рисунку 2.1.
Таблиця 2.4 – Команди передавання управління
Синтаксис асемблера |
Операція |
Адресування |
JMP <EA> |
<dst>PC |
Непряме регістрове (усі види), пряме (коротке та довге), відносне, відносне з індексуванням |
BRA ds |
PC + dsPC |
Відносне |
JSR <EA> |
SP – 4SP, PC(SP), <dst>PC |
Непряме регістрове (усі види), пряме (коротке та довге), відносне, відносне з індексуванням |
BSR ds |
SP – 4SP, PC(SP), PC+dsPC |
|
RTS |
(SP) SP, SP + 4 SP |
|
RTR |
(SP)CCR, SP+ZSP, (SP)PC, SP+4SP |
|
Bcc ds |
Якщо (сс) виконується, то PC+dsPC |
|
DBcc, ds |
Якщо (сс) не виконується, то Dn–1Dn; якщо Dn1, то PC+dsPC |
|
Програма розв’язання задачі:
EVEN: MOVE SR,D5; завантаження регістру стану у D5
CLR.L D2; обнулення D2, лічильника суми
MOVE.L #$7,D3; організація лічильника циклів у D3
MOVE.L #$09,D0; завантаження байта $9 у регістр D0
M1: LSR.B #$1,D0; зсув праворуч регістру D0 на один розряд
BCS.S M2; перехід до лічильника суми
BRA.S M3; обхід підсумовування
M2: ADDI #$1,D2; додавання 1, якщо С=1
M3: DBF D3,M1; організація повторення циклів
BTST #$0,D2; перевірка парності кількості одиниць суми у D2
BNE.S M4; число непарне?
CLR.L D2; ні, обнулення D2