
- •1 Загальні відомості
- •6 Відладка програми
- •7 Налаштування параметрів імітатора
- •ATmega128, aTmega128l 8-розрядний avr-мікроконтролер з внутрішньосистемною програмованою флеш-пам'яттю ємністю 128 кбайт Особливості:
- •Короткий огляд
- •Завдання:
- •Лабораторна робота №2 «Вивчення математичних і логічних операцій і їх вплив на біти-стану мікроконтролера» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Лабораторна робота №3 «Вивчення методів додавання і віднімання чотирьохбайтних чисел» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Завдання:
- •Лабораторна робота №5 «Вивчення роботи з пам’яттю даних» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Лабораторна робота №6 «Вивчення операцій порівняння і реалізація циклічних операцій» Ціль роботи
- •Програма виконання роботи
- •Додатковий теоретичний матеріал необхідний для виконання лабораторної роботи
- •Завдання:
- •Завдання:
- •Завдання:
- •Часові діаграми таймера-лічильника 0
- •Опис регістрів 8-розрядного таймера-лічильника 0
- •Асинхронна робота таймера-лічильника 0
- •Дільник частоти таймера-лічильника 0 Дільник частоти таймер-лічильника 0
- •Завдання:
- •Завдання:
- •Набір інструкцій
Завдання:
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