ФІРМИ MOTOROLA
12.1 Мова програмування Асемблер МП фірми Motorola
Вхідний контроль:
1 Який формат мають типові команди мови Асемблер-86?
2 Де у форматі команди пересилань мови Асемблер-86 є джерело, а де приймач?
3 У який спосіб у командах мови Асемблер-86 зазначається розрядність операндів?
4 У яких системах числення може бути подано операнди у командах мови Асемблер-86?
5 Які способи адресування підтримують МП фірми Intel?
Мова Асемблер МП сімейства М 680 Х 0 є спільна для МП МС 68000 як базової моделі та подальших моделей і використовує формат двоадресної типової команди.
Формат типової двоадресної команди подано на рис. 12.1.
COP | Rn | OPM | MODE | REG |
Рисунок 12.1 – Формат типової двоадресної команди
Поле COP визначає код виконуваної операції, поле Rn вміщує номер регістра – n, в якому зберігається операнд “приймач”, OPM – розрядність і розміщення результату; поля MODE та REG – спосіб адресування і розміщення операнда “джерело”.
Якщо виконується адресування з індексуванням, код команди вміщує друге слово, формат котрого наведено на рис. 12.2.
D/A | Xn | W/L | d 8 |
Рисунок 12.2 – Формат другого слова команди при адресуванні
з індексуванням
Поле D/A визначає тип регістра, який використовується в якості індексного. За D/A = 0 в якості індексного використовується один з регістрів даних, а за D/A = 1 – регістр адреси.
Поле Xn вміщує номер регістра, який використовується в якості індексного.
Поле W/L визначає розрядність індексу. За W/L = 0 в якості індексу використовуються 16 молодших розрядів індексного регістра з поширенням знаку до 32-х розрядів. За W/L = 1 за індекс слугує 32-розрядний вміст індексного регістра.
Поле d 8 вміщує 8-розрядне зміщення, подане у доповнювальному коді.
Деякі способи адресування потребують доповнення кодів команди, які розглянуто. Приміром, за безпосереднього адресування код команди доповнюється одним чи двома словами, які вміщують безпосередній операнд Im8, Im16 або Im 32. Якщо при адресуванні операнда “джерело” чи “приймач” використовується 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, й, окрім того, додаткові типи непрямого регістрового адресування з індексуванням.