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

Moveq #10, d0; завантаження номера першого ; перетворюваного біта до d0

MOVEQ #15, D1; завантаження кількості перетворюваних

; бітів до D1 (F)

BFCHG (A4) {D0: D1}; інвертування

До виконання команди BFCHG комірку пам‘яті було обнулено. Після виконання цієї команди у комірці буде число

  1. 0000 0011 1111 1111 1111 1000 0000 B=$003FFF00

  1. BFCLR ([$400700]) {#2: #10}

Команда обнулить поле у 16 бітів довжиною, починаючи зі зміщення 2 біта у довгому слові з адресою $400700.

  1. BFEXTS ($400600, A0) {D0: D1}, D2

З комірки пам‘яті за адресою ($400600 (A0)) бітове поле, починаючи зі зміщення, вказаного у D0, довжиною у кількість бітів, вказану у D1, завантажується у регістр D2 та поширює знак до 32-х бітів.

  1. BFEXTU D1 {#0: #1}, D2

Команда пересилає з регістру D1 один біт, починаючи зі зміщення 0 до регістру D2 і заповнює нулями інші розряди.

  1. BFINS D2, D3 {#2: #$10}

Якщо регістр D2 вміщує число $FFFFFFFF, а регістр D3 – усі нулі, то після виконання команди регістр D2 вміщуватиме число $FFFFFFFF, а регістр D3 – число $3FFFC000.

  1. BFSET D1 {D2: D3}

Команда встановлює одиниці у бітах числа, яке вміщується у D1, починаючи зі зміщення (D2) у кількості (D3).

  1. 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 + dsPC

Відносне

JSR <EA>

SP – 4SP, PC(SP), <dst>PC

Непряме регістрове (усі види), пряме (коротке та довге), відносне, відносне

з індексуванням

BSR ds

SP – 4SP, PC(SP), PC+dsPC

RTS

(SP)  SP, SP + 4  SP

RTR

(SP)CCR, SP+ZSP, (SP)PC, SP+4SP

Bcc ds

Якщо (сс) виконується, то PC+dsPC

DBcc, ds

Якщо (сс) не виконується, то Dn–1Dn; якщо Dn1, то PC+dsPC

Програма розв’язання задачі:

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