Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кофанов_ЦП, ч. 2 (КЛ_ел.варіант).docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
3.69 Mб
Скачать

4 Система команд мк avr

4.1 Виконання команди

Розглянемо для прикладу команду ADD Rd,Rr додавання змісту регістрів Rd і Rr із записом результату до регістра Rd (стисле позначення операції: Rd ← Rd + + Rr). З частини розрядів слова команди на виходах регістра IR, які містять код операції (КОП), у дешифраторі команд і пристрої керування виробляються керувальні сигнали, що надходять до всіх пристроїв операційного блоку і визначають дії, необхідні для виконання команди. Процес її виконання протягом, наприклад, такту Т2 (рис. 5,б) умовно можна поділити на три стадії.

Рис. 6. Схема виконання команди

На першій стадії з частини розрядів слова команди, які визначають адреси операндів, у дешифраторах DCA, DCB здійснюється вибір регістрів-джерел Rd, Rr: активні рівні з'являються тільки на виходах d, r дешифраторів. Сигналами дозволу OEN виходи Q[7..0] вибраних регістрів Rd і Rr з’єднуються з шинами, а виходи всіх інших регістрів РФ перебувають у третьому стані, отже, від'єднані від шин. Вихідні шини регістрів масивами демультиплексорів DMXd і DMXr з'єднуються з шинами А, В і відповідними входами АЛП. Для цього на адресні входи а демультиплексорів подаються керувальні сигнали протилежного рівня.

На другій стадії відбувається виконання операції в АЛП. Керувальним сигналом вибору (селекції) операції S[] АЛП налаштовується у даному випадку на виконання операції додавання, тобто стає восьмирозрядним суматором. З огляду на те, що АЛП є комбінаційним пристроєм, результат операції (сума) утримується в шині даних (ШД), поки на його входах присутні доданки.

На останній, третій стадії здійснюється запис результату операції до регістра-приймача Rd (акумулятора). Для цього керувальним сигналом на вході дозволу проходження синхросигналу цього регістра ena до нього записуються дані з ШД.

4.1 Пряма регістрова адресація

Якщо адреси операндів містяться безпосередньо в слові команди (тобто в полях слова команди вказуються номери комірок з приступних областей адресного простору), адресація є прямою (безпосередньою). Залежно від області адресного простору даних, до якого відбувається звертання, розрізняють різновиди прямої адресації. До регістрів РФ і РВВ застосовується лише пряма адресація.

Адресація одного РЗП використовується, коли в команді здійснюється звертання до одного операнда. На рис. 7,а показано формат команди з такою адресацією: слово команди містить поля для КОП і номера d регістра Rd (поля КОП і операндів тут і далі умовно показано суцільними, хоч насправді їх біти в слові команди можуть перемежатися). Пряма адресація одного РЗП використовується, зокрема, у командах одномісних арифметичних (наприклад, Increment – інкремент, приріст на одиницю) і логічних (наприклад, Complement – обернення, інверсія) операцій. На рис. 7,а операцію позначено зірочкою: слово даних береться з регістра Rd, над ним виконується дія і результат знов повертається до цього регістра.

Рис. 13. Пряма регістрова адресація до одного РЗП (а) та до двох РЗП (б)

Адресація двох РЗП використовується, якщо другий операнд команди перебуває в РЗП (як зазначалося, один з операндів завжди міститься в РФ). Така адресація (рис. 7,б) дозволяє, зокрема, копіювати дані з одного до іншого РЗП (Move – переміщувати) та здійснювати більшість арифметичних (наприклад, Add – додати) і логічних операцій. Команди арифметичних і логічних операцій можуть виконуватися тільки над даними, що містяться в РФ, тому в таких командах використовується лише пряма адресація до одного або двох РЗП. При цьому регістр Rd є і джерелом, і приймачем (див. рис. 7а,б), тобто виконує функції акумулятора. У решті команд над даними здійснюється лише їх пересилання між РФ та іншими об’єктами.

4.2 Звертання до регістрів вводу-виводу

Рис. 14. Порт вводу-виводу (а) та функції (б) і формат (в) його пристроїв в адресному просторі регістрів вводу-виводу

Рис. 15. Загальна схема звертання до регістрів вводу-виводу

Через порти вводу-виводу (ПВВ) здійснюється приймання цифрових сигналів від зовнішніх пристроїв у МК і, навпаки, передавання їх від МК у зовнішні пристрої. Виводи (контакти) МК з’єднано з драйверами порту – двоспрямованими буферами (на рис. 14,а для прикладу наведено порт В), в яких кожен розряд порту може бути індивідуально запрограмований на введення чи виведення інформації і забезпечується підвищення навантажувальної здатності. Так, навантажувальна здатність за струмом сягає не менше 20 мА на лінію порту, що дозволяє безпосередньо з'єднувати виводи МК, наприклад, зі світлодіодами.

До будь-якого програмованого порту, наприклад, порту В, можна звертатися за трьома адресами (рис. 6,б). Через те, що драйвер є комбінаційний пристрій, кожний розряд якого містить двоспрямований магістральний елемент із трьома станами виходу (див. [N], рис. 4.9,в), сигнал, що визначає напрямок передачі даних у кожному розряді, має зберігатися в регістрі цього порту DDRB. Змінити напрямок передачі в окремих розрядах можна в будь-який час. Для цього до регістра DDRB з шини даних ШД слід записати нове слово керування напрямком. Дані, які потрібно передати з ШД до виводів МК, записуються до регістра PORTB і зберігаються в ньому (наприклад, світлодіоди будуть світитися і по знятті даних з ШД). Так само з регістра PORTB можна будь-коли зчитати дані в ШД. Програмно дані можна зчитати безпосередньо з буферу виводів PINB порту В (до цього буферу звертання таке саме, як і до регістрів, тому в довідковій літературі часто його називають регістром PINB).

Рис. 16. Пряма адресація до регістрів вводу-виводу

Кількість ПВВ і входів/виходів у них залежить від моделі МК (до 7 портів і 53 загальної кількості контактів), причому деякі моделі мають непрограмовні виводи, здатні працювати лише як входи або як виходи. У непрограмовному виводі МК, що функціонує як вхід, є лише буфер PINB і не міститься регістрів PORTB і DDRB. На рис. 6,в для прикладу наведено формат шестирозрядного порту В вводу-виводу для МК, в якого 5 контактів є двоспрямованими входами-виходами та 1 контакт (старший розряд) є входом.

Усі РВВ поділяються на службові регістри МК і регістри обслуговування периферійних пристроїв, серед них і ПВВ. До будь-якого РВВ, у т. ч. до одного з трьох регістрів певного порту, можна звернутися через адресний простір регістрів вводу-виводу (див. рис. 7,в) командами IN, OUT пересилання даних між цим РВВ і одним з 32-х РЗП. При цьому вибір потрібного регістра здійснюється аналогічно рис. 5,а (схема з одним дешифратором). Як і до РФ, передбачено також спосіб звертання до РВВ як до комірок ОЗП, при якому адреса регістра збільшується на $20 (див. рис. 3,б).

Адресація РВВ (рис. 16) дозволяє звертатися до будь-якого з цих регістрів як до комірки за її номером Р з основного адресного простору РВВ (див. рис. 3,в), тобто Р = $00 … $3F. Для цього використовуються дві команди: IN – введення даних у регістр-приймач Rd (у складі РФ) з регістра Р (у складі РВВ) та OUT – виведення даних з регістра-джерела Rr у регістр Р (на рис. 7,в і далі адреса у квадратних дужках означає вміст цієї комірки, тобто [P] – вміст регістра з номером Р). За допомогою прямої адресації РВВ здійснюється обмін даними між РФ і портами та низкою керувальних регістрів.

Рис. 17. Загальна схема звертання до ОЗП за опосередкованої адресації

4.3 Адресація до ОЗП

Пряма адресація призначена для доступу до всього адресного простору статичного ОЗП (СОЗП, SRAM) даних, який може вміщувати до 64 К комірок (див. рис. 3,б), тобто адреса має займати 16 біт. Цим і зумовлений формат команди (рис. 18,а). Кожна команда займає в ЗП пам'яті два слова по 16 біт кожне (4 байт разом). Перше слово містить КОП і адресу РЗП, а в другому розташована адреса комірки, до якої потрібно звернутися. Для цього використовуються дві команди: LDS (Load Direct from SRAM) – завантажити безпосередньо (прямо) із СОЗП (для передачі даних із пам'яті у регістр-приймач Rd у складі РФ) та STS (Store Direct to SRAM) – записати (запам’ятати) безпосередньо (прямо) у СОЗП (для передачі даних з регістра-джерела Rr у складі РФ у пам'ять).

Пряма адресація ОЗП потребує команди з двох слів, що, як зазначалося, сповільнює її виконання. Щоб спростити формат команд звертання до адресного простору ОЗП, вживається опосередкована (непряма) адресація. При опосередкованій адресації слово команди містить КОП і адресу лише РЗП. Адреса комірки ОЗП довжиною 2 байт не міститься безпосередньо в слові команди, а вказується опосередковано – вона перебуває в індексному регістрі Z (див. рис. 5,б) або в індексних регістрах Y чи X (якщо останні передбачено для даного типу МК). Залежно від того, які маніпуляції виконуються зі змістом індексних регістрів під час формування адреси, розрізняють 4 різновиди опосередкованої адресації.

Проста опосередкована адресація ніяких дій зі змістом індексного регістра не передбачає. Звертання відбувається до комірки ОЗП, адреса якої перебуває в індексному регістрі (рис. 18,б). Для цього використовуються команди: LD Rd,Z (Load indirect) – завантажити опосередковано (непрямо) та ST Z,Rr (Store indirect) – записати (запам’ятати) опосередковано (непрямо), якими здійснюється передача даних із пам'яті у регістр-приймач Rd та у зворотному напрямку з регістра-джерела Rr у пам'ять. Така сама пара команд може застосовуватися також для індексних регістрів Y та X (їх назви фігурують у мнемокоді команди замість Z).

Рис. 18. Адресація до ОЗП – пряма (а) та опосередкована: проста (б), зі зміщенням (в), з переддекрементом (г) та з постінкрементом (ґ)

Опосередкована адресація зі зміщенням (відносна опосередкована адресація) відрізняється від простої тим, що адреса комірки ОЗП, до якої відбувається звертання, зміщується відносно тій, що перебуває в індексному регістрі, на величину константи, заданій у команді. Таке зміщення здійснюється підсумовуванням змісту індексного регістра і цієї константи (рис. 18,в). Поле константи займає у слові команди 6 біт, отже зміщення адреси можна здійснити в межах ± (0 … 31) комірок. Відносна опосередкована адресація використовується в командах LDD Rd,Z+q (Load indirect with Displacement) – завантажити опосередковано (непрямо) зі зміщенням та STD Z+q,Rr (Store indirect with Displacement) – записати (запам’ятати) опосередковано (непрямо) зі зміщенням. Така сама пара команд може застосовуватися також для індексного регістра Y.

Опосередкована адресація з переддекрементом полягає в тому, що спочатку зміст індексного регістра зменшується на одиницю, а відтак здійснюється звертання за отриманою адресою (рис. 18,г). Відносна адресація з переддекрементом використовується в командах LD Rd,–Z (Load indirect and Pre-Decrement) – завантажити опосередковано (непрямо) з попереднім декрементом та ST –Z,Rr (Store indirect and Pre-Decrement) – записати (запам’ятати) опосередковано (непрямо) з попереднім декрементом. Така сама пара команд може застосовуватися також для індексних регістрів Y, Х.

Опосередкована адресація з постінкрементом полягає в тому, що спочатку здійснюється звертання за адресою комірки, що перебуває в індексному регістрі, а відтак його зміст збільшується на одиницю (рис. 8,г). Відносна адресація з постінкрементом використовується в командах LD Rd,Z+ (Load indirect and Post-Increment) – завантажити опосередковано (непрямо) з наступним інкрементом та ST Z+,Rr (Store indirect and Post-Increment) – записати (запам’ятати) опосередковано (непрямо) з наступним інкрементом. Така сама пара команд може застосовуватися також для індексних регістрів Y, Х.

4.4 Звертання до стекової пам'яті

Галуження програми. Як зазначалося, звертання до ЗП програм (див. рис. 4) здійснюється через лічильник команд PC. За нормального виконання програми з надходженням тактових імпульсів зміст РС інкрементується (збільшується на одиницю)

Рис. 19. Галуження програми

Стек. На час виконання підпрограм і обслуговування переривань потрібно зберігати адреси комірок ЗП програм, а також дані, записані до регістрів РФ. Для такого тимчасового зберігання адрес і даних використовується спеціальна область пам'яті, що називається стеком. Стек може бути реалізований апаратно (у всіх МК родини Tiny) або програмно (у всіх МК родин Mega).

Апаратний стек виконується у вигляді окремої пам'яті,

Рис. 20. Апаратний стек (а) і схеми введення до стека (б), введення із втратою даних (в) та виведення зі стека (г)

Програмний стек. Проте в більшості МК стек реалізується програмно – для нього відводиться частина ОЗП. Для прикладу на рис. 21,а наведено ОЗП обсягом 256 байт, частину якого займає стек. Область даних в ОЗП заповнюється за адресами, починаючи з молодших (згори донизу), а область стека – за адресами, починаючи зі старших (знизу догори), і головним є те, щоб ці області не перекривалися.

Рис. 21. Програмний стек (а), покажчик стека (б), загальна схема звертання до стека (в) і схеми введення до стека (г) та виведення зі стека (ґ)

Особливістю стекової пам'яті є її спрощена адресація, яка здійснюється спеціальним регістром – покажчиком стека (див. рис. 1) SP (Stack Pointer). Для програмної організації стека достатньо до його покажчика SP завантажити адресу основи (дна) стека, а в подальшому програмне звертання до стека зводиться до автоматичної зміни адреси його комірки на одиницю (рис. 5,б), тобто не потрібно адресувати кожну комірку окремо.

Введення слів до стека (рис. 21,г) починається з його основи, адреса якої записана до покажчика SP, а після введення зміст SP автоматично декрементується (тобто введення здійснюється з постдекрементом), так що покажчик завжди вказує на вільну комірку вгорі. З огляду на те, що комірки стека є однобайтові, а адреси ЗП програм – двобайтові, для запису однієї адреси, наприклад, А1 до двох комірок стека потрібно двічі декрементувати зміст SP: спочатку вводиться старший байт (СБА1), а відтак молодший (МБА1). Так само в два заходи, які виконуються автоматично, вводиться друга адреса А2 і т. д.

Зчитування слів зі стека (рис. 21,ґ) здійснюється у зворотному порядку. Спочатку зміст SP інкрементується (тобто виведення здійснюється з переддекрементом), а відтак слово виводиться, отже виведення однієї адреси з двох комірок стека відбувається в два прийоми. Такий порядок запису-зчитування LIFO (Last In – First Out, останнім увійшов – першим вийшов) означає, що останнє записане слово зчитується першим. (Термін стек постав від слова "купка" – така магазинна пам'ять нагадує купку тарілок, під час використання якої знімається верхня, що була покладена останньою, відтак наступна під нею і т. д.). В інших типах МП існують також стеки з протилежним порядком запису-зчитування (перевернений стек).