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

Завдання:

1. Включити файл об’явлень для мікроконтролера ATMEGA128

2. Об’явити константи:

2.1 A0 – початкове значення

2.2 DELTA – зміщення

2.3 LIMIT – граничне значення (двобайтне)

2. Проініціалізувати вказівник на стек у останню комірку внутрішньої SRAM

3. Проініціалізувати регістри початкового значення (суми), зміщення і граничного значення. При цьому врахувати, що арифметика має бути двобайтних чисел.

4. Написати підпрограму додавання двобайтних чисел - при цьому врахувати, що результат додавання двобайтних чисел може бути трьохбайтним числом.

4.1 Створити мітку підпрограми

4.2  «Заштовхати» використовувані регістри у стек

4.3. Реалізувати алгоритм додаванні двохбайтних чисел

4.4. Визначити результат виконання підпрограми

4.5. «Виштовхати» використовувані регістри зі стеку

4.6. Вийти з підпрограми

5. Визначити мітку закінчення підпрограми і зациклити виконання програми на цій мітці так, щоб програма зажди «знаходилася» у цій мітці

6. Виконати підпрограму додавання

7. Перевірити, чи результатом додавання є трьохбайтним числом. Якщо результат додавання трьохбайтне число – перейти на мітку кінця.

8. Порівняти результат суми з двохбайтною «границею» сумування. Якщо більше чи рівне – перейти на мітку кінця.

9.Повернутися на п.6, якщо результатом попереднього додавання є двобайтне число і менше за «границею» сумування.

Лабораторна робота №5 «Вивчення роботи з пам’яттю даних» Ціль роботи

  • вивчити методики запису у SRAM

  • вивчення непрямої адресації

  • вивчення методів реалізації циклів

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

- Об’явити три однобайтні константи A0 (перший елемент арифметичної прогресії), D (різниця арифметичної прогресії) і N (кількість елементів арифметичної прогресії)

- Об’явити масив з N однобайтних елементів у SRAM мікроконтролера

- Об’явити змінну розміром у три байти у якій треба буде помістити суму арифметичної прогресії

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

- Реалізувавши цикл, обнулити всі N елементів масиву

- Записати у масив елементи арифметичної прогресії користуючись такими правилами:

- першим елементом є A0

- наступні елементи формуються за правилом арифметичної прогресії

- паралельно підраховувати суму арифметичної прогресії

- умовою завершення формування елементів арифметичної прогресії і підрахунку її суми є:

- визначено N елементів арифметичної прогресії

- ще не визначено N елементів арифметичної прогресії, але наступний елемент арифметичної прогресії став двохбайтним числом

- ще не визначено N елементів арифметичної прогресії, але сума арифметичної прогресії стала трьохбайтним числом

- Записати у відповідну змінну суму K17 елементів арифметичної прогресії

- Записати у відповідну змінну кількість елементів арифметичної

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

Файл регістрів загального призначення

Файл регістрів оптимізований під розширений RISC набір інструкцій AVR-мікроконтролерів. З метою досягнення необхідної продуктивності і гнучкості файлом регістрів підтримуються наступні схеми вводу-виводу:

- Один 8-розр. операнд і один 8-розр. результат

- Два 8-розр. операнда і один 8-розр. результат

- Два 8-розр. операнда і один 16-розр. результат

- Один 16-розр. операнд і один 16-розр. результат

7

6

5

4

3

2

1

0

Адреса

Примітки

Робочі регістри загального користування

R0

$00

R1

$01

R2

$02

R13

$0D

R14

$0E

R15

$0F

R16

$10

R17

$11

R26

$1A

X-регістр (молодший байт)

R27

$1B

X-регістр (старший байт)

R28

$1C

Y-регістр (молодший байт)

R29

$1D

Y-регістр (старший байт)

R30

$1E

Z-регістр (молодший байт)

R31

$1F

Z-регістр (старший байт)

Більшість інструкцій які працюють з файлом регістрів мають безпосередній доступ до всіх регістрів, і більшість з них виконуються за один такт ядра.

Кожен регістр має свою адресу в області пам'яті даних, для чого відведено там перші 32 комірки пам’яті. Не дивлячись на те, що вони фізично не розміщені у області SRAM, дана архітектура пам'яті забезпечує високу гнучкість доступу до регістрів, наприклад, регістри-вказівники X, Y і Z можуть бути встановлені для fадресування будь-якого регістру в файлі.

X-регістр (R26:R27), Y-регістр (R28:R29) і Z-регістр (R30:R31)

Регістри R26 … R31 володіють деякими додатковими функціями ніж для загально цільового використання. Дані регістри є 16-розр. вказівниками18 для непрямої адресації в межах пам'яті даних.

15

XH

XL

0

X - регістр

7

0

7

0

R27 ($1B)

R26 ($1A)

15

YH

YL

0

Y - регістр

7

0

7

0

R29 ($1D)

R28 ($1C)

15

ZH

ZL

0

Z - регістр

7

0

7

0

R31 ($1F)

R30 ($1E)

У різних режимах адресації дані адресні регістри виконують функції фіксованого зсуву, автоматичного інкрементування і автоматичного декрементування.

Про організацію пам’яті даних і способи адресації AVR-мікроконтролера дивіться опис лабораторної роботи № 4 «Програмування з допомогою підпрограм. Стек».

Директива DEF«Встановлення символьного значення вибраному регістрові»

Ця директива дозволяє перевизначити через набіл символів. Визначений набір символів можна використовувати у подальшій програмі (нижче від перевизначення) для звертання до даного регістра. Конкретний регістр може мати декілька символьних імен, які відносяться до нього. Символьне ім’я може бути перевизначене пізніше у програмі.

Синтаксис:

.DEF Символьне ім’я = Регістр

Наприклад:

.DEF temp = R16

Це корисно!

Для зручності використання AVR Studio при написанні програм для різних мікроконтролерів, у яких регістри вводу/виводу чи розширених регістрів вводу/виводу, а також деяких перепозначень регістрів регістрового файлу (зокрема X, Y і Z), абсолютні адреси яких у різних мікроконтролерах можуть бути різні, але назва і функціональне призначення є однакова – розробниками AVR Studio у папці \Program Files\Atmel\AVRTools\AVRAssembler\Аppnotes\ знаходяться *.inc файли у яких директивами EQU і DEF19 описані визначені всі регістри і відповідні біти регістрів, а такоє здійснено деякі визначення.

Зокрема, для X, Y і Z існує таке перевизначення:

;*****************************************************************************

; CPU Register Declarations

;*****************************************************************************

.def XL20 = r26 ; X pointer low

.def XH = r27 ; X pointer high

.def YL = r28 ; Y pointer low

.def YH = r29 ; Y pointer high

.def ZL = r30 ; Z pointer low

.def ZH = r31 ; Z pointer high

Тому для того, щоб звернутися до, на приклад, регістру R26, як до молодшого байту X-регістра, можна використовувати позначення XL, якщо відповідний описовий файл включений у проект.

Для того, щоб включити у проект визначення регістрів мікроконтролера ATMEGA128 треба в проект включити m128def.inc файл.

Директива BYTE«Резервування байту (байтів) для змінної»

Ця директива резервує комірку(и) у пам’яті SRAM і EEPROM. Для того, щоб була можливість звертатися до цього зарезервованого ресурсу пам’яті перед BYTE - директивою повинна передувати мітка. Ця директива має один параметр – кількість байт для резервування. Ця директива не може використовуватися у області Пам’яті Програм (додаткова інформація міститься у директивах CSEG, DSEG і ESEG). Зверніть увагу, що параметр (кількість байт для резервування) обов’язково має бути присутнім. Директива не виконує разом з резервуванням стартової ініціалізації цієї області пам’яті.

Синтаксис:

LABEL: .BYTE константний вираз

Наприклад:

var1: .BYTE 1 ; резервування одного байту для змінної var1

array: .BYTE N ; резервування оN байт для змінної (масиву однобайтних величин) array

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

BRBC – «Перейти, якщо біт у Регістрі Статусу (SREG) очищений»

Інструкція умовного відносного переходу. Вона перевіряє один (визначений) біт у регістрі SREG і здійснює перехід відносно вмістимого регістру лічильника команд (PC), якщо цей біт очищений. Ця інструкція здійснює відносний перехід відносно регістра PC у будь-якому напрямку (PC – 63 ≤ PC +64). Параметр k є зміщенням відносно PC і представляється у додатковому коді.

якщо SREG(s) = 0 тоді PC ← PC + k + 1 інакше PC  ← PC + 1

Синтаксис

Операнди

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

BRBC s,k

0 ≤ s ≤ 7, -64 ≤ k ≤ +63

PC ← PC + k + 1

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

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

cpi r20, 5

brbc 1 noteq

noteq: nop

BRBS – «Перейти, якщо біт у Регістрі Статусу (SREG) встановлений»

Інструкція умовного відносного переходу. Вона перевіряє один (визначений) біт у регістрі SREG і здійснює перехід відносно вмістимого регістру лічильника команд (PC), якщо цей біт встановлений. Ця інструкція здійснює відносний перехід відносно регістра PC у будь-якому напрямку (PC – 63 ≤ PC +64). Параметр k є зміщенням відносно PC і представляється у додатковому коді.

якщо SREG(s) = 1 тоді PC ← PC + k + 1 інакше PC  ← PC + 1

Синтаксис

Операнди

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

BRBS s,k

0 ≤ s ≤ 7, -64 ≤ k ≤ +63

PC ← PC + k + 1

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

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

cpi r20, 5

brbs 1 eq

eq: nop

BRCC – «Перейти, якщо біт переносу очищений»

Інструкція умовного відносного переходу. Вона перевіряє біт (C) і здійснює перехід відносно вмістимого регістру лічильника команд (PC), якщо біт C очищений. Ця інструкція здійснює відносний перехід відносно регістра PC у будь-якому напрямку (PC – 63 ≤ PC +64). Параметр k є зміщенням відносно PC і представляється у додатковому коді. (Ця інструкція є еквівалентною інструкції BRBС 0,k)

якщо С = 0 тоді PC ← PC + k + 1 інакше PC  ← PC + 1

Синтаксис

Операнди

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

BRCC k

-64 ≤ k ≤ +63

PC ← PC + k + 1

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

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

add r22, r23

brcc nocarry

nocarry: nop

BRCS – «Перейти, якщо біт переносу встановлений»

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

якщо С = 1 тоді PC ← PC + k + 1 інакше PC  ← PC + 1

Синтаксис

Операнди

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

BRCS k

-64 ≤ k ≤ +63

PC ← PC + k + 1

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

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

add r22, r23

brcs carry

carry: nop

BRVC – «Перейти, якщо біт переповнення очищений»

Інструкція умовного відносного переходу. Вона перевіряє біт (V) і здійснює перехід відносно вмістимого регістру лічильника команд (PC), якщо біт V очищений. Ця інструкція здійснює відносний перехід відносно регістра PC у будь-якому напрямку (PC – 63 ≤ PC +64). Параметр k є зміщенням відносно PC і представляється у додатковому коді. (Ця інструкція є еквівалентною інструкції BRBС 3,k)

якщо V = 0 тоді PC ← PC + k + 1 інакше PC  ← PC + 1

Синтаксис

Операнди

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

BRVC k

-64 ≤ k ≤ +63

PC ← PC + k + 1

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

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

add r22, r23

brvc noover

noover: nop

BRVS – «Перейти, якщо біт переповнення встановлений»

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

якщо V = 1 тоді PC ← PC + k + 1 інакше PC  ← PC + 1

Синтаксис

Операнди

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

BRVS k

-64 ≤ k ≤ +63

PC ← PC + k + 1

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

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

add r22, r23

brvs over

over: nop

DEC – «Декрементація»

Віднімання одиниці ( - 1) від вмістимого регістра Rd і поміщення результату у той самий регістр Rd.

Піт переносу (C) регістра SREG не змінюється цією операцією, тому дозволено DEC інструкцію використовувати для зміни лічильника циклу для ітераційних обчислень.

Для операцій з без знаковими числами тільки BREQ і BRNE інструкції-переходи можуть бути використані після DEC інструкції. Якщо використовуються числа у додатковому коді, то всі інструкції-переходи (знакові) можуть використовуватися після DEC інструкції.

Rd ← Rd - 1

Синтаксис

Операнди

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

DEC Rd

0 ≤ d ≤ 31

PC ← PC + 1

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

I

T

H

S

V

N

Z

C

-

-

-

<>

<>

<>

<>

-

Біт S:

S = N ^ V. Використовується для тестування знаку результату.

Біт V:

Встановлюється, якщо у додатковому коді відбулося переповнення, у іншому випадку – скидається. Переповнення числа у додатковому коді відбувається тоді і тільки тоді, коли Rd мало значення $80 перед виконанням цієї операції.

Біт N:

Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.

Біт Z:

Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.

Наприклад:

ldi r17,$10 ;Завантаження константи в r17

loop: add r1,r2 ;Додавання r2 до r1

dec r17 ;Декрементація r17

brne loop ;Перехід на мітку loop, якщо r17≠0

nop

INC – «Інкрементація»

Додавання одиниці ( + 1) до вмістимого регістра Rd і поміщення результату у той самий регістр Rd.

Піт переносу (C) регістра SREG не змінюється цією операцією, тому дозволено INC інструкцію використовувати для зміни лічильника циклу для ітераційних обчислень.

Для операцій з без знаковими числами тільки BREQ і BRNE інструкції-переходи можуть бути використані після INC інструкції. Якщо використовуються числа у додатковому коді, то всі інструкції-переходи (знакові) можуть використовуватися після INC інструкції.

Rd ← Rd + 1

Синтаксис

Операнди

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

INC Rd

0 ≤ d ≤ 31

PC ← PC + 1

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

I

T

H

S

V

N

Z

C

-

-

-

<>

<>

<>

<>

-

Біт S:

S = N ^ V. Використовується для тестування знаку результату.

Біт V:

Встановлюється, якщо у додатковому коді відбулося переповнення, у іншому випадку – скидається. Переповнення числа у додатковому коді відбувається тоді і тільки тоді, коли Rd мало значення $7F перед виконанням цієї операції.

Біт N:

Встановлюється, якщо MSB встановлений, у іншому випадку – скидається.

Біт Z:

Встановлюється, якщо результатом є число $00, у іншому випадку – скидається.

Наприклад:

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

loop: inc r22 ; Інкрементація r22

сpi r22, $4F ;Порівняння r22 з константою $4F

brne loop ;Перехід на мітку loop, якщо r22≠$4F (результат віднімання не нуль)

nop

LD – «Завантаження у регістр з пам’яті даних методом непрямої адресації, використовуючи X - регістр»

Ця інструкція завантажує один байт, використовуючи непряму адресацію, з пам’яті даних у регістр. Область пам’яті даних складається з регістрового файлу загального користування, області регістрів воду/виводу, розширених регістрів вводу/виводу (додатково в деяких AVR – мікроконтролерах), внутрішньої SRAM, зовнішньої SRAM (додатково в деяких AVR – мікроконтролерах).

Адреса даних вказується у X – регістрі (16-розрядному) вказівнику з регістрового файлу загального користування. Оскільки X – регістр 16-и розрядний, то ця команда може про адресувати 64 кБайт адресного простору пам’яті даних.

X – регістр може або бути залишений без змін операцією з відносною адресацією, або бути post – інкрементованим, або pre – декрементованим. Ці особливості є особливо зручними для доступу до масивів. зверніть увагу, що тільки молодший байт X – регістра обновлюється у мікроконтролерах з пам’яттю даних меншою за 256 байт. Для таких мікроконтролерів старший байт регістра-вказівника не використовується інструкцією і може бути використаним для інших задач.

Операція

Коментар

Rd ← (X)

X: Без змін

Rd ← (X)

X ← X + 1

X: Post – інкрементується

X ← X - 1

Rd ← (X)

X: Pre – декрементується

Синтаксис

Операнди

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

LD Rd,X

0 ≤ d ≤ 31

PC ← PC + 1

LD Rd,X+

0 ≤ d ≤ 31

PC ← PC + 1

LD Rd,-X

0 ≤ d ≤ 31

PC ← PC + 1

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

Пр.1

ldi r27, $01 ;У старший байт X – регістра поміщаємо число $01

ldi r26, $0 ;У молодший байт X – регістра поміщаємо число $00

ld r0, X+ ;У r0 поміщається вмістиме комірки $100, X – регістр стає $101

ld r1, X ;У r1 поміщається вмістиме комірки $101, X – регістр не змінюється

ld r2, -X ; X – регістр стає $100 У r2 поміщається вмістиме комірки $100

Пр2.

.INCLUDE "m128def.inc"

.CSEG

ldi XL, low(var1)

ldi XH, high(var2)

ld r0, X+

ld r1, X

ld r2, -X

...

.DSEG

var1: .byte 5

LD (LDD) – «Завантаження у регістр з пам’яті даних методом непрямої адресації, використовуючи Y - регістр»

Ця інструкція завантажує один байт, використовуючи непряму адресацію зі зміщенням або без зміщення, з пам’яті даних у регістр. Область пам’яті даних складається з регістрового файлу загального користування, області регістрів воду/виводу, розширених регістрів вводу/виводу (додатково в деяких AVR – мікроконтролерах), внутрішньої SRAM, зовнішньої SRAM (додатково в деяких AVR – мікроконтролерах).

Адреса даних вказується у Y – регістрі (16-розрядному) вказівнику з регістрового файлу загального користування. Оскільки Y – регістр 16-и розрядний, то ця команда може про адресувати 64 кБайт адресного простору пам’яті даних.

Y – регістр може або бути залишений без змін операцією з відносною адресацією, або бути post – інкрементованим, або pre – декрементованим. Ці особливості є особливо зручними для доступу до масивів. зверніть увагу, що тільки молодший байт X – регістра обновлюється у мікроконтролерах з пам’яттю даних меншою за 256 байт. Для таких мікроконтролерів старший байт регістра-вказівника не використовується інструкцією і може бути використаним для інших задач.

Операція

Коментар

Rd ← (Y)

Y: Без змін

Rd ← (Y)

Y ← Y + 1

Y: Post – інкрементується

Y ← Y - 1

Rd ← (Y)

Y: Pre – декрементується

Rd ← (Y + q)

Y: Без змін, q – це зміщення (зсув)

Синтаксис

Операнди

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

LD Rd,Y

0 ≤ d ≤ 31

PC ← PC + 1

LD Rd,Y+

0 ≤ d ≤ 31

PC ← PC + 1

LD Rd,-Y

0 ≤ d ≤ 31

PC ← PC + 1

LDD Rd, Y+q

0 ≤ d ≤ 31, 0 ≤ q ≤ 63

PC ← PC + 1

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

Пр.1

ldi r27, $01 ;У старший байт Y – регістра поміщаємо число $01

ldi r26, $0 ;У молодший байт Y – регістра поміщаємо число $00

ld r0, Y+ ;У r0 поміщається вмістиме комірки $100, Y – регістр стає $101

ld r1, Y ;У r1 поміщається вмістиме комірки $101, Y – регістр не змінюється

ld r2, -Y ; Y – регістр стає $100 У r2 поміщається вмістиме комірки $100

ldd r3, Y+2 ; У r3 поміщається вмістиме комірки $102

Пр2.

.INCLUDE "m128def.inc"

.CSEG

ldi YL, low(var1)

ldi YH, high(var2)

ld r0, Y+

ld r1, Y

ld r2, -Y

ldd r3, Y+2

...

.DSEG

var1: .byte 5

LD (LDD) – «Завантаження у регістр з пам’яті даних методом непрямої адресації, використовуючи Z - регістр»

Ця інструкція завантажує один байт, використовуючи непряму адресацію зі зміщенням або без зміщення, з пам’яті даних у регістр. Область пам’яті даних складається з регістрового файлу загального користування, області регістрів воду/виводу, розширених регістрів вводу/виводу (додатково в деяких AVR – мікроконтролерах), внутрішньої SRAM, зовнішньої SRAM (додатково в деяких AVR – мікроконтролерах).

Адреса даних вказується у Z – регістрі (16-розрядному) вказівнику з регістрового файлу загального користування. Оскільки Z – регістр 16-и розрядний, то ця команда може про адресувати 64 кБайт адресного простору пам’яті даних.

Z – регістр може або бути залишений без змін операцією з відносною адресацією, або бути post – інкрементованим, або pre – декрементованим. Ці особливості є особливо зручними для доступу до масивів. зверніть увагу, що тільки молодший байт X – регістра обновлюється у мікроконтролерах з пам’яттю даних меншою за 256 байт. Для таких мікроконтролерів старший байт регістра-вказівника не використовується інструкцією і може бути використаним для інших задач.

Операція

Коментар

Rd ← (Z)

Z: Без змін

Rd ← (Z)

Z ← Z + 1

Z: Post – інкрементується

Z ← Z - 1

Rd ← (Z)

Z: Pre – декрементується

Rd ← (Z + q)

Z: Без змін, q – це зміщення (зсув)

Синтаксис

Операнди

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

LD Rd,Z

0 ≤ d ≤ 31

PC ← PC + 1

LD Rd,Z+

0 ≤ d ≤ 31

PC ← PC + 1

LD Rd,-Z

0 ≤ d ≤ 31

PC ← PC + 1

LDD Rd, Z+q

0 ≤ d ≤ 31, 0 ≤ q ≤ 63

PC ← PC + 1

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

Пр.1

ldi r27, $01 ;У старший байт Z – регістра поміщаємо число $01

ldi r26, $0 ;У молодший байт Z – регістра поміщаємо число $00

ld r0, Z+ ;У r0 поміщається вмістиме комірки $100, Z – регістр стає $101

ld r1, Z ;У r1 поміщається вмістиме комірки $101, Z – регістр не змінюється

ld r2, -Z ; Z – регістр стає $100 У r2 поміщається вмістиме комірки $100

ldd r3, Z+2 ; У r3 поміщається вмістиме комірки $102

Пр2.

.INCLUDE "m128def.inc"

.CSEG

ldi YL, low(var1)

ldi YH, high(var2)

ld r0, Z+

ld r1, Z

ld r2, -Z

ldd r3, Z+2

...

.DSEG

var1: .byte 5

LDS – «Завантаження з пам’яті даних методом прямої адресації»

Ця інструкція завантажує один байт з пам’яті даних у регістр. Область пам’яті даних складається з регістрового файлу загального користування, області регістрів воду/виводу, розширених регістрів вводу/виводу (додатково в деяких AVR – мікроконтролерах), внутрішньої SRAM, зовнішньої SRAM (додатково в деяких AVR – мікроконтролерах).

16-и бітна адреса має бути доступною. Доступ до пам’яті є обмежений 64 кБайт - ним простором

Rd ← (k)

Синтаксис

Операнди

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

LDS Rd,k

0 ≤ d ≤ 31, 0 ≤ k ≤ 65535

PC ← PC + 2

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

Пр.1

lds r2, $FF00 ;Завантажити у r2 вмістиме комірки пам’яті даних по абсолютній адресі $FF00

Пр2.

.INCLUDE "m128def.inc"

.CSEG

lds r2, array ;Завантажити у r2 вмістиме 0-ого елемента масиву array

lds r3, (array +3) ;Завантажити у r3 вмістиме 3-ого елемента масиву array

...

.DSEG

array: .byte 5

ST – «Запис у пам’ять даних з регістра методом непрямої адресації, використовуючи X - регістр»

Ця інструкція записує один байт, використовуючи непряму адресацію, з регістра у пам’ять даних. Область пам’яті даних складається з регістрового файлу загального користування, області регістрів воду/виводу, розширених регістрів вводу/виводу (додатково в деяких AVR – мікроконтролерах), внутрішньої SRAM, зовнішньої SRAM (додатково в деяких AVR – мікроконтролерах).

Адреса вказується у X – регістрі (16-розрядному) вказівнику з регістрового файлу загального користування. Оскільки X – регістр 16-и розрядний, то ця команда може про адресувати 64 кБайт адресного простору пам’яті даних.

X – регістр може або бути залишений без змін операцією з відносною адресацією, або бути post – інкрементованим, або pre – декрементованим. Ці особливості є особливо зручними для доступу до масивів. зверніть увагу, що тільки молодший байт X – регістра обновлюється у мікроконтролерах з пам’яттю даних меншою за 256 байт. Для таких мікроконтролерів старший байт регістра-вказівника не використовується інструкцією і може бути використаним для інших задач.

Операція

Коментар

(X) ← Rr

X: Без змін

(X) ← Rr

X ← X + 1

X: Post – інкрементується

X ← X - 1

(X) ← Rr

X: Pre – декрементується

Синтаксис

Операнди

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

ST X, Rr

0 ≤ r ≤ 31

PC ← PC + 1

ST X+, Rr

0 ≤ r ≤ 31

PC ← PC + 1

ST –X, Rr

0 ≤ r ≤ 31

PC ← PC + 1

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

Пр.1

ldi r27, $01 ;У старший байт X – регістра поміщаємо число $01

ldi r26, $0 ;У молодший байт X – регістра поміщаємо число $00

st X+, r0 ;У r0 записуємо до комірки $100, X – регістр стає $101

st X, r1 ;У r1 r0 записуємо до комірки $101, X – регістр не змінюється

st -X, r2 ; X – регістр стає $100 У r2 r0 записуємо до комірки $100

Пр2.

.INCLUDE "m128def.inc"

.CSEG

ldi XL, low(var1)

ldi XH, high(var2)

st X+, r0

st X, r1

st –X, r2

...

.DSEG

var1: .byte 5

ST (STD) – «Запис у пам’ять даних з регістра методом непрямої адресації, використовуючи Y - регістр»

Ця інструкція записує один байт, використовуючи непряму адресацію зі зміщенням або без зміщення, з регістра у пам’ять даних. Область пам’яті даних складається з регістрового файлу загального користування, області регістрів воду/виводу, розширених регістрів вводу/виводу (додатково в деяких AVR – мікроконтролерах), внутрішньої SRAM, зовнішньої SRAM (додатково в деяких AVR – мікроконтролерах).

Адреса даних вказується у Y – регістрі (16-розрядному) вказівнику з регістрового файлу загального користування. Оскільки Y – регістр 16-и розрядний, то ця команда може про адресувати 64 кБайт адресного простору пам’яті даних.

Y – регістр може або бути залишений без змін операцією з відносною адресацією, або бути post – інкрементованим, або pre – декрементованим. Ці особливості є особливо зручними для доступу до масивів. зверніть увагу, що тільки молодший байт X – регістра обновлюється у мікроконтролерах з пам’яттю даних меншою за 256 байт. Для таких мікроконтролерів старший байт регістра-вказівника не використовується інструкцією і може бути використаним для інших задач.

Операція

Коментар

(Y) ← Rr

Y: Без змін

(Y) ← Rr

Y ← Y + 1

Y: Post – інкрементується

Y ← Y - 1

(Y) ← Rr

Y: Pre – декрементується

(Y + q) ← Rr

Y: Без змін, q – це зміщення (зсув)

Синтаксис

Операнди

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

ST Y, Rr

0 ≤ r ≤ 31

PC ← PC + 1

ST Y+, Rr

0 ≤ r ≤ 31

PC ← PC + 1

ST -Y, Rr

0 ≤ r ≤ 31

PC ← PC + 1

STD Y+q, Rr

0 ≤ r ≤ 31, 0 ≤ q ≤ 63

PC ← PC + 1

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

Пр.1

ldi r27, $01 ;У старший байт Y – регістра поміщаємо число $01

ldi r26, $0 ;У молодший байт Y – регістра поміщаємо число $00

st Y+, r0 ;У r0 записуємо до комірки $100, Y – регістр стає $101

st Y, r1 ;У r1 записуємо до комірки $101, Y – регістр не змінюється

st –Y, r2 ; Y – регістр стає $100 У r2 записуємо до комірки $100

std Y+2, r3 ; У r3 записуємо до комірки $102

Пр2.

.INCLUDE "m128def.inc"

.CSEG

ldi YL, low(var1)

ldi YH, high(var2)

st Y+, r0

st Y, r1

st –Y, r2

st Y+2, r3

...

.DSEG

var1: .byte 5

ST (STD) – «Запис у пам’ять даних з регістра методом непрямої адресації, використовуючи Z - регістр»

Ця інструкція записує один байт, використовуючи непряму адресацію зі зміщенням або без зміщення, з регістра у пам’ять даних. Область пам’яті даних складається з регістрового файлу загального користування, області регістрів воду/виводу, розширених регістрів вводу/виводу (додатково в деяких AVR – мікроконтролерах), внутрішньої SRAM, зовнішньої SRAM (додатково в деяких AVR – мікроконтролерах).

Адреса даних вказується у Z – регістрі (16-розрядному) вказівнику з регістрового файлу загального користування. Оскільки Z – регістр 16-и розрядний, то ця команда може про адресувати 64 кБайт адресного простору пам’яті даних.

Z – регістр може або бути залишений без змін операцією з відносною адресацією, або бути post – інкрементованим, або pre – декрементованим. Ці особливості є особливо зручними для доступу до масивів. зверніть увагу, що тільки молодший байт X – регістра обновлюється у мікроконтролерах з пам’яттю даних меншою за 256 байт. Для таких мікроконтролерів старший байт регістра-вказівника не використовується інструкцією і може бути використаним для інших задач.

Операція

Коментар

(Z) ← Rr

Z: Без змін

(Z) ← Rr

Z ← Z + 1

Z: Post – інкрементується

Z ← Z - 1

(Z) ← Rr

Z: Pre – декрементується

(Z + q) ← Rr

Z: Без змін, q – це зміщення (зсув)

Синтаксис

Операнди

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

ST Z, Rr

0 ≤ r ≤ 31

PC ← PC + 1

ST Z+, Rr

0 ≤ r ≤ 31

PC ← PC + 1

ST -Z, Rr

0 ≤ r ≤ 31

PC ← PC + 1

STD Z+q, Rr

0 ≤ r ≤ 31, 0 ≤ q ≤ 63

PC ← PC + 1

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

Пр.1

ldi r27, $01 ;У старший байт Z – регістра поміщаємо число $01

ldi r26, $0 ;У молодший байт Z – регістра поміщаємо число $00

st Z+, r0 ;У r0 записуємо до комірки $100, Z – регістр стає $101

st Z, r1 ;У r1 записуємо до комірки $101, Z – регістр не змінюється

st –Z, r2 ; Z – регістр стає $100 У r2 записуємо до комірки $100

std Z+2, r3 ; У r3 записуємо до комірки $102

Пр2.

.INCLUDE "m128def.inc"

.CSEG

ldi YL, low(var1)

ldi YH, high(var2)

st Z+, r0

st Z, r1

st –Z, r2

st Z+2, r3

...

.DSEG

var1: .byte 5

STS – «Запис у пам’ять даних регістра методом прямої адресації»

Ця інструкція записує один байт з регістра у пам’ять даних. Область пам’яті даних складається з регістрового файлу загального користування, області регістрів воду/виводу, розширених регістрів вводу/виводу (додатково в деяких AVR – мікроконтролерах), внутрішньої SRAM, зовнішньої SRAM (додатково в деяких AVR – мікроконтролерах).

16-и бітна адреса має бути доступною. Доступ до пам’яті є обмежений 64 кБайт - ним простором.

(k) ← Rr

Синтаксис

Операнди

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

STS k, Rr

0 ≤ r ≤ 31, 0 ≤ k ≤ 65535

PC ← PC + 2

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

I

T

H

S

V

N

Z

C

-

-

-

-

-

-

-

-

Наприклад:

Пр.1

sts r2, $FF00 ;Записати r2 до комірки пам’яті даних по абсолютній адресі $FF00

Пр2.

.INCLUDE "m128def.inc"

.CSEG

sts array, r2 ; Записати r2 до вмістимого 0-ого елемента масиву array

sts (array +3), r3 ; Записати r3 до вмістимого 3-ого елемента масиву array

...

.DSEG

array: .byte 5