- •3 Модуль
- •11 Мікропроцесорні системи на універсальних мп фірми motorola
- •11.2 Побудова мпс на 16-розрядних мікропроцесорах фірми Motorola
- •11.2.1 Підсистема центрального процесорного елемента mc68000
- •11.2.2 Розподіл адресного простору мпс
- •11.2.3 Організація підсистеми пам’яті
- •11.2.4 Організація підсистем введення-виведення
- •11.4 Побудова мпс на 32-розрядних мікропроцесорах фірми Motorola
- •11.4.1 Підсистема центрального процесорного елемента
- •11.4.2 Розподіл адресного простору мпс
- •11.4.3 Організація підсистеми пам’яті мпс
- •11.4.4 Організація підсистеми введення-виведення
- •11.4.5 Підключення співпроцесора
- •12 Програмування універсальних мп
- •12.1 Мова Асемблер програмування мп фірми Motorola
- •Непряме регістрове адресування з постіндексуванням
- •Непряме регістрове адресування з преіндексуванням
- •Непряме відносне адресування з індексуванням
- •12.2 Система команд мп мс680х0 (Для самостійного вивчення)
- •12.2.1 Команди пересилань
- •12.2.2 Команди арифметичних операцій
- •12.2.3 Команди логічних операцій
- •12.2.4 Команди зсувів
- •12.2.5 Команди безумовних переходів
- •12.2.6 Команди умовних переходів
- •12.2.7 Команди організації програмних циклів
- •12.2.8 Команди звернення до підпрограм
- •12.3 Побудова програм з різною структурою мовою Асемблер
- •12.3.1 Лінійні програми
- •12.3.2 Розгалужені та циклічні програми. Підпрограми
- •12.4 Створення програмного забезпечення мпс на мп фірми Motorola
- •Список рекомендованої літератури
- •4 Модуль
- •13 Мікропроцесорні системи на мікроконтролерах фірми motorola та їхнє програмування
- •13.1 Типові мікроконтролери фірми Motorola
- •Сімейство 68нс16/916
- •13.2 Система команд мікроконтролерів фірми Motorola
- •13.3 Налаштовування вбудованих засобів мікроконтролерів
- •14 Risc-процесори фірми motorola
- •14.1 Risc-процесори PowerPc
- •14.2 Risc-процесори ColdFire
- •14.3 Система команд risc-мікропроцесорів сімейства PowerPc
- •15 Архітектура та принципи побудови процесорів цифрового оброблення сигналів
- •15.1 Основні напрямки цифрового оброблення сигналів (цос)
- •15.2 Узагальнена архітектура процесорів сімейства dsp563xx
- •15.3 Організація циклічного буфера в dsp
- •15.4 Програмна реалізація цифрового фільтра сіх
- •16 Мпс на мікроконтролерах, мікропроцесорах та dsp
- •Список рекомендованої літератури
12 Програмування універсальних мп
ФІРМИ MOTOROLA
12.1 Мова Асемблер програмування мп фірми Motorola
Вхідний контроль:
Який формат мають типові команди мови Асемблер-86?
Де у форматі команди пересилань мови Асемблер-86 є джерело, а де приймач?
В який спосіб у командах мови Асемблер-86 зазначається розрядність операндів?
У яких системах числення може бути подано операнди у командах мови Асемблер-86?
Які способи адресування підтримують МП фірми Intel?
Мова Асемблер МП сімейства М680Х0 є спільна для МП МС68000 як базової моделі і подальших моделей і використовує формат двоадресної типової команди.
Формат типової двоадресної команди подано на рис. 12.1.
-
15
12
11
9
8
6
5
3
2
0
COP
Rn
OPM
MODE
REG
Рисунок 12.1 – Формат типової двоадресної команди
Поле COP визначає код виконуваної операції, поле Rn вміщує номер регістра – n, в якому зберігається операнд “приймач”, OPM – розрядність і розміщення результату; поля MODE та REG – спосіб адресування і розміщення операнда “джерело”.
Якщо виконується адресування з індексуванням, код команди вміщує друге слово, формат котрого наведено на рис. 12.2.
-
15
14
12
11
10
8
7
0
D/A
Xn
W/L
000
d8
Рисунок 12.2 – Формат другого слова команди при адресуванні
з індексуванням
Поле D/A визначає тип регістра, який використовується в якості індексного. За D/A = 0 в якості індексного використовується один з регістрів даних, а за D/A = 1 – регістр адреси.
Поле Xn вміщує номер регістра, який використовується в якості індексного.
Поле W/L визначає розрядність індексу. За W/L = 0 в якості індексу використовуються 16 молодших розрядів індексного регістра з поширенням знаку до 32-х розрядів. За W/L = 1 за індекс служить 32-розрядний вміст індексного регістра.
Поле d8 вміщує 8-розрядне зміщення, яке подано у доповнювальному коді.
Деякі способи адресування потребують доповнення кодів команди, які розглянуто. Приміром, при безпосередньому адресуванні код команди доповнюється одним чи двома словами, які вміщують безпосередній операнд Im8, Im16 або Im32. Якщо при адресуванні операнда “джерело” чи “приймач” використовується 16-розрядне зміщення або використовується абсолютна адреса, яка має розмір слово (Abs.W) або подвійне слово (Abs.L), то код команди доповнюється відповідними словами.
У загальному вигляді типова двоадресна команда мови Асемблер МП МС68000 має вигляд
COP.х <src>,<dst>,
де СОР – мнемокод відповідної команди, замість х ставиться символ, який визначає розрядність операндів: В – байт, W – слово (16 розрядів), L – довге слово (32 розряди); якщо символ розрядності є відсутній, то за умовчанням операнд є слово. Операнди умовно позначаються як <src> – джерело, <dst> – приймач, який слугує за власне приймач результату операції. При записуванні конкретних команд замість <src> та <dst> зазначаються символічні адреси операндів мовою Асемблера відповідно до способу їхнього адресування. За безпосереднього адресування замість <src> зазначається число, перед яким ставиться префікс #.
Операнди, адреси та зміщення у командах можуть подаватись у системах числення, які зазначаються символами:
& – десяткова система,
% – двійкова система,
@ – вісімкова система,
$ – шістнадцяткова система,
символи розміщують перед даними.
За відсутності символу, який зазначає систему числення, дане сприймається як десяткове число.
Мікропроцесор МС68000 виконує читання з пам’яті 16-розрядних операндів, так само як їхній запис до пам’яті, навіть коли у команді зазначено в якості операнда байт; у циклі звернення до пам’яті обирається слово, молодший байт якого використовується як операнд. Довге слово обирається за два послідовних цикли шини, причому першими обираються старші 16 розрядів. Отже, адреси команд чи даних, що їх формує МП, мають бути парними.
Мікропроцесори МС68000 та старші моделі використовують такі способи адресування операндів:
регістрове (операнд у регістрі даних чи адреси), наприклад
МOVЕ.В D1,D0
MOVЕA.L A2,A3;
непряме регістрове (операнд у комірці пам’яті, яка є адресована вмістом регістра адреси), наприклад
MOVЕ (A0),D1
непряме регістрове з постінкрементом (операнд у комірці пам’яті, адресу якої розміщено в адресному регістрі і після виконання команди нарощується на 1, 2 чи 4 залежно від довжини зазначеного операнда), наприклад
MOVЕ D3,(A1)+ ; Вміст А1 після виконання команди
; нарощується на 2
непряме регістрове з предекрементом (операнд у комірці пам’яті, адресу якої розміщено в адресному регістрі і перед виконанням команди зменшується на 1, 2 чи 4 залежно від довжини зазначеного операнда), наприклад
MOVЕ.L -(A1),D2 ; Вміст A1 перед виконанням команди
; зменшується на 4
непряме регістрове зі зміщенням (операнд у комірці пам’яті, адреса якої є алгебраична сума вмісту регістра адреси та 16-розрядного зміщення, яке задається у команді), наприклад
MOVЕ.B -$A(A0),D3 ; Для МП МС68000
MOVЕ.В ($44,А3),D4 ; Для старших моделей
непряме регістрове з індексуванням (операнд у комірці пам’яті, адреса якої є сума вмісту регістра адреси, індексного регістра та зміщення, заданого у команді), наприклад
CLR.B $40(A0,D3.W) ; Для МП МС68000
CLR ($1234,A2,D3.L) ; Для старших моделей
пряме (операнд у комірці пам’яті, адреса якої задається числом зі знаком, прямо зазначеним у команді), наприклад
JMP $1234 ; Для МП МС68000
MOVЕ.B D0,-$07FF.W ; Для старших моделей ефективна адреса
; становить $FFF801
відносне (операнд у комірці пам’яті, адреса якої є сума поточного вмісту програмного лічильника РС та заданого у команді зміщення); поточний вміст РС, який використовується для обчислення відносної адреси, дорівнює адресі першого слова виконуваної команди плюс 2, наприклад
JMP *+$10 ; Для МП МС68000
JMP (*+$10,PС) ; Для старших моделей
відносне з індексуванням (операнд у комірці пам’яті, адреса якої є сума вмісту РС, індексного регістра та зміщення, заданого у команді), наприклад
СLR $10(PC,A2.W) ; Для старших моделей
СLR ($1000,PC,A2.W) ; Для старших моделей
безпосереднє (значення операнда задано безпосередньо у команді), наприклад
MOVЕQ #$40,D3 ; Швидке завантаження
MOVЕQ #64,D3 ; безпосередньо заданого операнда у D3
МП сімейства М680Х0 підтримують усі способи адресування, що і МП МС68000, й окрім того, додаткові типи непрямого регістрового адресування з індексуванням.