Система команд мікроконтролерів фірми Motorola

 

Вхідний контроль:

1 Які особливості має мова Асемблер порівняно з мовами програмування високого рівня?

2 Які способи адресування операндів мають мікропроцесори фірми Motorola?

3 У який спосіб зберігаються слова в комірках пам’яті, які адресують мікропроцесори фірм Intel та Motorola?

4 Вміст якого регістра змінюється у командах передавання керування?

5 Для чого використовується вміст бітів регістра ознак у командах передавання керування?

 

Способи адресування і система команд сімейства М68НС05/705

Мікроконтролери цього сімейства, відповідно до регістрової моделі і структурної схеми МК (розд. 13.1), можуть зреалізовувати набір з 65-ти команд, які виконують обробку 8-розрядних операндів. Операнди можуть розміщуватися в регістрах А, Х та пам’яті. Команди мають розмір від одного до 3-х байт: у першому байті розміщується код операції, а другий та третій забезпечують адресування операндів, тобто можуть бути команди, які не вміщують операндів. МК зреалізовує такі способи адресування:

– регістрове – операнд розміщується в регістрі А або Х;

– непряме регістрове (індексне) – за адресу операнда слугує вміст регістра Х;

– індексне зі зміщенням – адреса операнда є сумою вмісту регістра Х та 8- або 16-розрядного зміщення (число без знаку), що задано в другому та третьому байтах команди;

– пряме – адреса операнда визначається значеннями другого та третього байтів команди;

– безпосереднє – 8-розрядний операнд (число) вказується у другому байті команди;

– відносне – використовується лише в командах розгалуження. Адреса наступної команди визначається як сума поточного вмісту програмного лічильника РС і 8-розрядного зміщення (число зі знаком), яке розміщено у другому байті команди.

При використовуванні непрямого регістрового і прямого адресування можливе є звернення лише до 256-ти початкових позицій адресного простору, у котрому розміщено всі регістри МК і значна частина ОЗП. Індексне зі зміщенням адресування при використовуванні 8-розрядного зміщення дозволяє звернення до 512-ти початкових позицій адресного простору, при використовуванні 16-розрядного зміщення – до всього адресного простору, але треба, щоби максимальне значення адреси не перевищувало $1FFF. При використовуванні відносного адресування можна звертатися до комірки, розташованої на 127 позицій вище або нижче за поточну. Способи адресування, залежно від сформованої адреси, поділяються на довгі та короткі. До коротких належать способи адресування: непряме регістрове, пряме та індексне зі зміщенням при використовуванні 8-розрядного зміщення.

Всі команди, що входять до системи команд сімейства М68НС05/705, можна поділити на групи відповідно до операцій, які вони виконують. Тобто є команди пересилань, арифметичних та логічних операцій, зсувів, бітових операцій і встановлення ознак, керування програмою та процесором.

Докоманд пересилань належать команди, які виконують завантажування операндів з пам’яті до регістрів А, Х або завантажування комірок пам’яті з цих регістрів, пересилання операндів поміж регістрами А та Х, а також обнулення вмісту регістрів А, Х і комірок пам’яті, що адресуються короткими способами адресування. Перелік команд пересилань і способів подання операндів подано у табл. 13.3.

Докоманд арифметичних операційналежать команди, які виконують відповідні арифметичні операції над 8-розрядними операндами, один з котрих розміщується в акумуляторі А, а другий міститься у комірці пам’яті, адреса котрої визначається способом адресування в команді. Результат виконання операції неодмінно записується до акумулятора. Операції додавання та віднімання при виконуванні можуть використовувати значення біта перенесення С. До таких операцій також належать команди інкрементування та декрементування, котрі, відповідно, зреалізовують додавання (віднімання) 1 до (від) вмісту акумулятора, індексного регістра або комірки пам’яті.

 

Таблиця 13.3 – Перелік команд пересиланнь

Назва Мнемокод Операція Спосіб адресування
Команди завантаження регістра А LDA #opr #opr → А Безпосереднє
LDA $addr (М) → А Пряме коротке
LDA $addr (М) → А Пряме довге
LDA ,X (М) → А Непряме регістрове
LDA $addr,X (М) → А Індексне зі зміщенням коротке
LDA $addr,X (М) → А Індексне зі зміщенням довге
Команди завантаження регістра Х LDX #opr #opr → Х Безпосереднє
LDX $addr (М) → Х Пряме коротке
LDX $addr (М) → Х Пряме довге
LDX ,X (М) → Х Непряме регістрове
LDX $addr,X (М) → Х Індексне зі зміщенням коротке
LDX $addr,X (М) → Х Індексне зі зміщенням довге
Команди завантаження комірки пам’яті з регістра А STA $addr (А) → М Пряме коротке
STA $addr (А) → М Пряме довге
STA ,X (А) → М Непряме регістрове
STA $addr,X (А) → М Індексне зі зміщенням коротке
STA $addr,X (А) → М Індексне зі зміщенням довге
Команди завантаження комірки пам’яті з регістра Х STХ $addr (X) → М Пряме коротке
STХ $addr (X) → М Пряме довге
STХ ,X (X) → М Непряме регістрове
STХ $addr,X (X) → М Індексне зі зміщенням коротке
STХ $addr,X (X) → М Індексне зі зміщенням довге
Пересилання вмісту регістра А до регістра Х ТАХ (А) → Х Регістрове
Пересилання вмісту регістра Х до регістра А ТХА (X) → А Регістрове
Обнулення вмісту регістра А CLRA $00 → А Регістрове
Обнулення вмісту регістра X XLRX $00 → X Регістрове
Обнулення вмісту комірки пам’яті CLR $addr $00 → М Пряме коротке
CLR, X $00 → М Непряме регістрове
CLR $addr,X $00 → М Індексне зі зміщенням коротке

 

МК також зреалізовує операцію беззнакового множення 8-розрядних даних, які розміщуються в акумуляторі А та індексному регістрі Х; результат множення записується до пари регістрів Х:А, отже, старший байт неодмінно записується до регістра Х.

До команд арифметичних операцій також належать команди порівняння і тестування операндів. Існують дві групи таких команд: порівняння вмісту акумулятора А і вмісту комірки пам’яті та вмісту регістра Х і комірки пам’яті. Команди обох груп виконуються як віднімання від вмісту відповідного регістра вмісту комірки пам’яті, при цьому прапорці змінюються відповідно до результату, а результат не формується.

Тестування виконується для операндів, які можуть розміщуватися в пам’яті, акумуляторі та індексному регістрі. Їхнє виконування полягає у відніманні числа $00 від операнда. При цьому формуються ознаки, що відповідають самому операндові.

Команди зміни знаку (формування доповнювального коду) також належать до цієї групи. В них можуть використовуватися лише короткі способи адресування операндів.

Перелік команд арифметичних операцій подано у табл. 13.4.

 

Таблиця 13.4 – Арифметичні команди

Назва Мнемокод Операція Спосіб адресування
Додавання з перенесенням ADC opr (A)+(M)+C→A Використовуються всі способи адресування і подання операндів, як показано в табл. 13.3
Додавання ADD opr (A)+(M)→A
Віднімання з позикою SBC opr (A)–(M)–C→A
Віднімання SUB opr (A)–(M)→A
Інкрементування комірки пам’яті INC $addr (M)+1→M Пряме коротке
INC ,X Непряме регістрове
Інкрементування регістра А INCA (A)+1→A Регістрове
Інкрементування регістра Х INCX (X)+1→X Регістрове
Декрементування комірки пам’яті DEC $addr (M)–1→M Пряме коротке
DEC ,X Непряме регістрове
Декрементування регістра А DECA (A)–1→A Регістрове
Декрементування регістра Х DECX (X)–1→X Регістрове
Беззнакове множення MUL (X)×(A)→X:A Як показано в табл. 13.3

 


 

Закінчення табл. 13.4

Назва Мнемокод Операція Спосіб адресування
Порівняння операндів CMP opr (A)–(M) Використовуються всі способи адресування і подання операндів, як показано в табл. 13.3
CPX opr (X)–(M)
Тестування операндів TST $addr (M)–$00 Пряме коротке
TST ,X Непряме регістрове
TST $addr,X Індексне зі зміщенням коротке
TSTA (A)–$00 Регістрове
TSTX (X)–$00 Регістрове

 

Дологічних операцій,які виконує МК М68НС05/705, належать команди логічного множення (кон’юнкції), логічного додавання (диз’юнкції), виключного АБО та логічного інвертування, які виконуються з 8-розрядними операндами. Команда бітового тестування, котра також належить до цієї групи, виконує логічне множення операндів, але не формує результату. Перелік команд логічних операцій подано у табл. 13.5.

 

Таблиця 13.5 – Команди логічних операцій

Назва Мнемокод Операція Спосіб адресування
Логічне множення AND opr A (M)→A Використовуються всі способи адресування і подання операндів, як показано в табл. 13.3
Логічне додавання OR opr A (M)→A
Виключне АБО EOR opr A (M)→A
Логічна інверсія операнда COM $addr $FF–(M)→M Пряме коротке
COM ,X Непряме регістрове
COM $addr,X Індексне зі зміщенням коротке
COMA $FF–(A)→A Регістрове
COMX $FF–(X)→X Регістрове

 

До групи команд зсувів,які зреалізовує МК М68НС05/705, належать команди арифметичних, логічних та циклічних зсувів, котрі виконуються над вмістом регістрів А, Х та комірок пам’яті, що адресуються короткими способами адресування. Перелік команд зсувів та особливості їхнього виконування подано в табл. 13.6.

 


Таблиця 13.6 – Перелік команд зсувів

Назва Синтаксис Асемблера Способи адресування Операція
Арифметичний зсув ліворуч ASL $addr Пряме коротке
ASL ,X Непряме регістрове
ASL $addr,X Індексне зі зміщенням коротке
Арифметичний зсув ліворуч вмісту А ASLА Регістрове
Арифметичний зсув ліворуч вмісту Х ASLХ Регістрове
Арифметичний зсув праворуч ASR $addr Пряме коротке
ASR ,X Непряме регістрове
ASR $addr,X Індексне зі зміщенням коротке
Арифметичний зсув праворуч вмісту А ASRА Регістрове
Арифметичний зсув праворуч вмісту Х ASRХ Регістрове
Логічний зсув ліворуч LSL $addr Пряме коротке
LSL, X Непряме регістрове
LSL $addr,X Індексне зі зміщенням коротке
Логічний зсув ліворуч вмісту А LSLА Регістрове
Логічний зсув ліворуч вмісту Х LSLХ Регістрове
Логічний зсув праворуч LSR $addr Пряме коротке
LSR ,X Непряме регістрове
LSR $addr,X Індексне зі зміщенням коротке
Логічний зсув праворуч вмісту А LSRА Регістрове
Логічний зсув праворуч вмісту Х LSRХ Регістрове

 

Закінчення табл. 13.6

Назва Синтаксис Асемблера Способи адресування Операція
Циклічний зсув ліворуч ROL $addr Пряме коротке
ROL ,X Непряме регістрове
ROL $addr,X Індексне зі зміщенням коротке
Циклічний зсув ліворуч вмісту А ROLA Регістрове
Циклічний зсув ліворуч вмісту Х ROLX Регістрове
Циклічний зсув праворуч ROR $addr Пряме коротке
ROR ,X Непряме регістрове
ROR $addr,X Індексне зі зміщенням коротке
Циклічний зсув праворуч вмісту А RORA Регістрове
Циклічний зсув праворуч вмісту Х RORX Регістрове

 

Команди бітових операцій, які входять до системи команд МК М68НС05/705, встановлюють потрібне значення (0 або 1) відповідного біта bn у 8-розрядному операнді, адреса котрого вміщується у другому байті команди (використовується лише пряме адресування). Номер біта n задається в команді. До цієї групи команд також належать команди встановлення необхідного значення прапорців С та І в регістрі ознак CCR. Перелік команд бітових операцій подано в табл. 13.7.

 

Таблиця 13.7 – Команди бітових операцій

Назва Синтаксис Асемблера Операція
Встановлення потрібного значення біта з номером n = (0...7) BCLR n,$addr 0→bn
BSET n,$addr 1→bn
Встановлення потрібного значення прапорця С CLC 0→C
SEC 1→C
Встановлення потрібного значення прапорця I CLI 0→I
SEI 1→I

 

До групи команд керування програмою входять команди, які зреалізовують:

– безумовний перехід у програмі;

– умовні переходи (умовні та безумовні розгалуження);

– перехід (розгалуження) до підпрограми;

– вихід з підпрограми;

– програмне переривання;

– повернення з програми обслуговування переривання.

Перелік команд цієї групи наведено у табл. 13.8.

 

Таблиця 13.8 – Команди керування програмою

Назва Мнемокод Операція
Безумовний перехід JMP $addr (EA)корот.PC
JMP $addr (EA)довг.PC
JMP ,X (X) → PC
JMP $addr,X (X) + $addrкорот.PC
JMP $addr,X (X) + $addrдовг.PC
Умовний перехід ВСС $rel8 (PC)+2+$rel8 → PC, якщо умова виконується
Безумовне розгалуження BRA $rel8 (PC)+2+$rel8 → PC
Відсутність розгалуження BRN $rel8 (PC)+2 → PC
Розгалуження при встановленні відповідного біта n BRSET n,$addr,rel8 (PC)+2+rel8 → PC, якщо bn = 1
BRCLR n,$addr,rel8 (PC)+2+rel8 → PC, якщо bn = 0
Перехід до підпрограми JSR $addr (PC)+n → PC (PCl)→SP; SP – 1→SP (PCh)→SP; SP –1→SP (EA)→PC
JSR $addr
JSR ,X
JSR $addr,X
JSR $addr,X
Розгалуження до підпрограми BSR $rel8 (PC)+2 → PC (PCl)→SP; SP – 1→SP (PCh)→SP; SP –1→SP (PC)+2+rel8→PC
Вихід з підпрограми RTS SP+1→SP; (SP)→PCh SP+1→SP; (SP)→PCl
Програмне переривання SWI (PC)+1→PC (PCl)→SP; (SP) – 1→SP (PCh)→SP; (SP) –1→SP (X)→SP; (SP) – 1→SP (A)→SP; (SP) – 1→SP (CCR)→SP; (SP)–1→SP 1→I(CCR); Ст. байт Ve→PCh Мл. байт Ve→PCl

 


Закінчення табл. 13.8

Назва Мнемокод Операція
Вихід з програми обслуговування переривання RTI SP+1→SP; (SP)→CCR SP+1→SP; (SP)→A SP+1→SP; (SP)→X SP+1→SP; (SP)→PCh SP+1→SP; (SP)→PCl

 

Команда JMP завантажує до програмного лічильника адресу переходу, відповідно до використовуваного способу адресування.

В командах умовного переходу і розгалужень використовується лише відносний спосіб адресування. Адреса переходу формується як сума поточного вмісту програмного лічильника, збільшеного на 2 (задля звернення до наступної виконуваної команди в програмі), і 8-розрядного зміщення ($rel8) відносно початкової адреси розміщення програми, яке є числом зі знаком. Умови, що перевіряються, наведено в табл. 13.9. Команда безумовного розгалуження BRA є аналогом команди безумовного переходу з використанням відносного адресування, а команда відсутності розгалуження BRN є аналогічна до команди NOP. Вона пропускає у програмі два байти, після чого триває виконування програми. Команду BRN зручно використовувати при налагодженні програм замість команди ВСС задля виконування програми без розгалуження.

 

Таблиця 13.9 – Мнемокоди і умови виконування команд умовних переходів

Мнемокод умови СС Умова, що перевіряється Логічний вираз
NE EQ Не дорівнює (ненульовий результат) Дорівнює (нульовий результат) Z = 0 Z = 1
HI LS Вище Нижче або дорівнює (Z + C) = 0 (Z + C) = 1
HS LO Вище або дорівнює (немає перенесення) Нижче (є перенесення) C = 0 C = 1
PL MI Додатний результат Від’ємний результат N = 0 N = 1
HCC HCS Немає міжтетрадного перенесення Є міжтетрадне перенесення H = 0 H = 1
MC MS Переривання дозволено Переривання заборонено I = 0 I = 1
IH IL Відсутність запиту переривання Надходження запиту переривання IRQ# = 1 IRQ# = 0

 

Команди розгалуження при встановленні відповідного біта n BRSET і BRCLR перевіряють значення цього біта в операнді, визначеному за допомогою 8-розрядного прямого адресування. Зміщення в цих командах ($rel8) визначається відносно початкової адреси розміщення програми.

Команди переходу і умовного переходу до підпрограм JSR та BSR зберігають у стеку адресу команди повернення до головної програми і завантажують до програмного лічильника РС початкову адресу підпрограм, котра визначається за допомогою прямого, індексного чи індексного зі зміщенням адресування. За виконування команди JSR адреса, що завантажується до стека, має бути більшою за вміст регістра РС на 1, 2 або 3, залежно від способу адресування. За використовування індексного адресування це є 1, за індексного адресування з 8-розрядним зміщенням чи короткого прямого – 2 і за адресування з 16-розрядним зміщенням і довгого прямого – 3. В команді BSR використовується відносне адресування. При поверненні до головної програми вміст регістра РС відновлюється зі стека.

Команда програмного переривання SWI до завантаження початкової адреси підпрограми обслуговування програмного переривання зберігає в стеку: значення програмного лічильника РС, акумулятора А, індексного регістра Х та регістра ознак CCR. Потім встановлює значення біта дозволу переривання І = 1 і побайтно завантажує до програмного лічильника значення вектора переривань Ve. Команда повернення відновлює всі значення, які було завантажено до стека.

До команд керування процесором належать команди, які подано у табл. 13 10.

 

Таблиця 13.10 – Команди керування процесором

Назва Мнемокод Операція
Встановлення початкового значення вказівника стека RSP $00FFSP
Відсутність операцій NOP (PC)+1 → PC
Перехід до режиму очікування WAIT Зупинення процесора 0→ І
Перехід до режиму зупину STOP Зупинення генератора тактових імпульсів 0→ І

 

Команда встановлення початкового значення вказівника стека завантажує адресу $00FF до регістра SP.

Команди WAIT та STOP переводять МК до режиму енергозберігання з можливістю повернення до нормального режиму, для чого при їхньому виконуванні встановлюються значення ознаки дозволу переривань І = 0.

 

Контрольні питання:

1 Які прапорці виставляються при виконуванні арифметичних операцій?

2 Які прапорці виставляються при виконуванні логічних операцій?

3 Які способи адресування використовуються в мові Асемблер МК фірми Motorola?

4 У який спосіб поділяються способи адресування залежно від сформованої адреси? Чим вони відрізнюються?

5 За допомогою яких команд можна виконувати завантаження регістра акумулятора?

6 Які способи адресування можна використовувати задля зберігання вмісту індексного регістра Х в пам’яті?

7 Чим відрізнюється використовування команд CMP та TEST?

8 Наведіть приклади виконування команд ASRA та LSRA з операндом, який дорівнює $82 на 2 розряди, і поясніть результати.

9 До якого регістра буде завантажено адресу переходу при виконуванні команди JMP ,Х?

10 У який спосіб формується адреса нового вмісту програмного лічильника РС при виконуванні команди BRSET n,$addr,rel18?

 

Контрольні питання підвищеної складності:

1 Які дії відбуваються в МК при виконуванні команди програмного переривання SWI?

2 Які дії відбуваються в МК при виконуванні команди повернення з програми обслуговування переривання RTI?

3 Які умови можуть використовуватись у команді умовного переходу ВСС?

4 Які команди додавання операндів у мові Асемблер МК фірми Motorola Ви знаєте? Чим вони відрізнюються одна від одної?

5 Чим різняться команди SBC і SUB? Поясніть на прикладі.

6 В яких регістрах розміщуються операнди при виконуванні команди MUL і де розміщується результат після її виконання?