Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторні роботи.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
6.67 Mб
Скачать

Завдання:

Виконати інструкцію ADD.

Виконати інструкцію ADC.

Виконати інструкцію SUB.

Виконати інструкцію SBC.

Виконати інструкцію SUBI.

Виконати інструкцію SBCI.

Виконати інструкцію ADIW.

Виконати інструкцію SBIW.

Виконати інструкцію ANDI.

Виконати інструкцію ORI.

Виконати інструкцію LSL.

Виконати інструкцію LSR.

Перейти на першу команду.

Використовуючи вікна Workspace і Register дослідити виконання цих інструкцій з попередньо встановленим бітом переносу C і зі скинутим цим бітом. Встановити подібність і відмінність виконання.

Дослідити встановлення і скидання інших бітів стану мікроконтролера.

На основі отриманого досвіду запропонувати алгоритм додавання/віднімання двобайтних чисел на 8-и розрядному мікроконтролері.

Лабораторна робота №3 «Вивчення методів додавання і віднімання чотирьохбайтних чисел» Ціль роботи

  • вивчення математичних методики додавання і віднімання чисел за розміром більших з розрядність мікроконтролера

  • навчитися прогнозувати розрядність максимально можливого числа при додаванні/віднімання

Програма виконання роботи

- Об’явити дві константи A і B, розмір яких не перевищує чотири байти і одна з яких має бути гарантовано чотирибайтною величиною

- Вибрати достатню кількість регістрів для роботи і завантажити у них числа A і B (побайтно)

- Виконати додавання "

- Виконати віднімання .

- Порівняти побайтно, що

- Визначити дві мітки у програмі: у разі успішного виконання перевірки програма має перейти на мітку успіху, у разі помилкового виконання перевірки – перейти на мітку помилки

Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи

Правило прогнозування максимально-можливого результату при додаванні/відніманні

При додаванні/відніманні6 N-розрядного числа до M-розрядного числа максимально-можливим результатом може бути (MAX(N,M)+1)-розрядне число.

Вирази над константами у AVR-асемблері

AVR-асемблер включає в себе вирази над константами. Ці вирази можуть включати в себе операнди, оператори і функції. Всі вирази є 32-ої бітні для AVRASM і 64-бітні для AVRASM2

У цій лабораторній треба використати функції над константами, що зробить програму біль легкою для читання і розуміння.

AVR-асемблер (AVRASM) має такі функції, якими можна користуватися у виразах над константами

LOW(вираз)

Повертає молодший (перший) байт виразу

HIGH(вираз)

Повертає другий байт виразу

BYTE2(вираз)

То саме, що і HIGH

BYTE3(вираз)

Повертає третій байт виразу

BYTE4(вираз)

Повертає четвертий байт виразу

LWRD(вираз)

Повертає біти 0-15 виразу

HWRD(вираз)

Повертає біти 16-31 виразу

PAGE(вираз)

Повертає біти 16-21 виразу

EXP2(вираз)

Повертає 2 у степені виразу

LOG2(вираз)

Повертає цілу частину логарифму

AVRASM2 має додаткові функції INT, FRAC, Q7, Q15, ABS, DEFINED, STRLE, з описом яких можна познайомитися у Help до AVR Studio.

Директива EQU«Встановити символ рівним значенню виразу»

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

Синтаксис:

.EQU символьна мітка = вираз

Наприклад:

.EQU io_offset = 0x23

.EQU porta     = io_offset + 2

Опис деяких мнемонік інструкцій, які використовуються у цій лабораторній роботі і не були описані у описах до попередніх лабораторних робіт

BREQ – «Перейти, якщо рівне нулю»

Інструкція умовного відносного переходу. Вона перевіряє біт (Z) і здійснює перехід відносно вмістимого регістру лічильника команд (PC), якщо біт Z встановлений. Якщо ця інструкція виконується зразу після будь-яких цих інструкцій CP, CPI, SUB чи SUBI – перехід відбудеться, якщо беззнакове або знакове ціле число представлене у Rd було рівне беззнаковому або знаковому цілому числу представленому у Rr. Ця інструкція здійснює відносний перехід відносно регістра PC у будь-якому напрямку (PC – 63 ≤ PC +64). Параметр k є зміщенням відносно PC і представляється у додатковому коді. (Ця інструкція є еквівалентною інструкції BRBS 1,k)

якщо Rd = Rr (Z = 1) тоді PC ← PC + k + 1 інакше PC  ← PC + 1

Синтаксис

Операнди

Лічильник команд

BREQ k

-64 ≤ k ≤ +63

PC ← PC + k + 1

PC  ← PC + 1, якщо умова не справджується

Вплив на регістри статусу:

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

loop: ldi r1, r0

cpi r19, $10

breq loop

nop

BRNE – «Перейти, якщо не рівне нулю»

Інструкція умовного відносного переходу. Вона перевіряє біт (Z) і здійснює перехід відносно вмістимого регістру лічильника команд (PC), якщо біт Z скинутий. Якщо ця інструкція виконується зразу після будь-яких цих інструкцій CP, CPI, SUB чи SUBI – перехід відбудеться, якщо беззнакове або знакове ціле число представлене у Rd не було рівне беззнаковому або знаковому цілому числу представленому у Rr. Ця інструкція здійснює відносний перехід відносно регістра PC у будь-якому напрямку (PC – 63 ≤ PC +64). Параметр k є зміщенням відносно PC і представляється у додатковому коді. (Ця інструкція є еквівалентною інструкції BRBS 1,k)

якщо Rd ≠ Rr (Z = 1) тоді PC ← PC + k + 1 інакше PC  ← PC + 1

Синтаксис

Операнди

Лічильник команд

BRNE k

-64 ≤ k ≤ +63

PC ← PC + k + 1

PC  ← PC + 1, якщо умова не справджується

Вплив на регістри статусу:

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

loop: ldi r1, r0

cpi r19, $10

brne loop

nop

CLR – «Очистка регістру»

Очищення регістру. Ця інструкція виконує Виключаюче АБО між регістром і самим собою. результатом буде очищення всіх бітів регістру

Rd ← Rd ^ Rd

Синтаксис

Операнди

Лічильник команд

CLR Rd

0 ≤ d ≤ 31

PC ← PC + 1

Вплив на регістри статусу:

I

T

H

S

V

N

Z

C

-

-

-

0

0

0

1

-

Біт S:

S = 0. Очищається

Біт V:

V = 0. Очищається

Біт N:

N = 0. Очищається

Біт Z:

Z = 1. Встановлюється

Наприклад:

clr r18 ;Очищення (обнулення) r18

CLC – «Очистка біту переносу (C)»

Ця інструкція здійснює очистку біту переносу (C) у регістрі статусу (SREG)

C ← 0

Синтаксис

Операнди

Лічильник команд

CLC

Нема

PC ← PC + 1

Вплив на регістри статусу:

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

0

Біт C:

C = 0. біт переносу очищається

Наприклад:

clc

adc r0,r1 ; ця операція буде тотожною операції add r0,r1 зразу після виконання команди clc

CPI – «Порівняння з константою»

Ця інструкція здійснює порівняння регістра Rd і константи. Регістр при цьому не змінюється. Всі інструкції переходу з умовою можуть бути використані після цієї інструкції

Rd - K

Синтаксис

Операнди

Лічильник команд

CPI Rd,K

16 ≤ d ≤ 31, 0 ≤ K ≤ 255

PC ← PC + 1

Вплив на регістри статусу:

I

T

H

S

V

N

Z

C

-

-

<>

<>

<>

<>

<>

<>

Наприклад:

cpi r16, 3

Методика додавання/віднімання n-байтних чисел.

При додаванні/відніманні n-байтних чисел треба:

1) Спрогнозувати який максимально можливий результат (за кількістю байт) може бути.

2) Здійснювати побайтно додавання/віднімання і при цьому треба враховувати, що при додаванні можливий перенос старшого розряду у наступний байт; при відніманні можлива ситуація «позичання» старшого розряду у наступного байту. Перенос і «позичання» треба врахувати правильним підбором команд і використанням біту переносу (C) з регістру статусу (SREG)