Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пособие HCS12 & Elvis II v.7.01

.pdf
Скачиваний:
219
Добавлен:
03.05.2015
Размер:
4.14 Mб
Скачать

ADDB opr16,r ;Запись команды ADDB с индексной адресацией со ;смещением в 16 бит в общем виде.

STAB $10FE,X ;Сохранить содержимое аккумулятора B в ячейку памяти

;с адресом (X) + 4350.

STAB $A345,X ;Сохранить содержимое аккумулятора B в ячейку памяти ;с адресом (X) + 41797 (что эквивалентно (X) - 23739).

Косвенная индексная адресация [IDX2] со смещением в 16 бит

При данном способе адресации число перед запятой в поле операнда означает смещение адреса для ячейки памяти, в которой хранится конечный адрес расположения операнда. Т.е. инструкция указывает на область памяти, которую нужно не обработать, а извлечь из неё адрес целевой ячейки.

Примеры:

LDAA

[opr16,r]

;Запись команды LDAA с косвенной индексной адресацией со

LDAA

[,X]

 

;смещением в 16 бит в общем виде.

;Загрузить в аккумулятор А содержимое ячейки памяти, адрес

LDAA

[12,X]

;которой хранится в ячейках памяти с адресами (X) и (X) + 1.

;Загрузить в аккумулятор А содержимое ячейки памяти, адрес

 

 

;которой хранится в ячейках памяти с адресами (X) + 12 и (X) + 13.

Индексная адресация IDX с автоматическим изменением указателя

Данный режим индексной адресации позволяет одним из четырёх способов автоматически изменять значение указателя с помощью соответствующих включений в команду. Индексный регистр может быть инкрементирован или декрементирован на целое число как до, так и после выполнения основной инструкции. В качестве указателя могут выступать ячейки X, Y или SP. При этом их автоматическая корректировка не влияет на регистр PC.

CPU12 позволяет автоматически изменять регистр-указатель в диапазонах чисел -8..-1 и +1..+8. Синтаксис необходимых расширений для команд можно найти в табл. 1.2 Использование таких дополнений позволяет сократить время исполнения программы, нежели то же самое было бы описано отдельными командами. Также с помощью такого режима адресации удобно обрабатывать цепочки данных (массивы) в памяти.

Если запущена на выполнение команда LEAS, LEAX или LEAY с использованием рассматриваемого способа адресации, то операция сначала изменяет содержимое регистра-указателя, а затем формирует в нём же конечное значение. Т.е. предварительное изменение адреса будет отражаться на результате исполнения команды, а последующее – нет.

 

Примеры:

 

LDAB 3,Y-

;Загрузить в аккумулятор B содержимое ячейки памяти, адресом

 

 

;которой является содержимое индексного регистра Y.

STAA 1,-SP

;После выполнения действий уменьшить значение Y на 3.

;Эквивалент команды PSHA.

STX

2,-SP

;Эквивалент команды PSHX.

LDX

2,SP+

;Эквивалент команды PULX.

LDAA 1,SP+

;Эквивалент команды PULA.

21

Индексная адресация IDX со смещением в аккумуляторе

При таком способе адресации эффективный адрес вычисляется путём сложения значения регистра-указателя и беззнакового смещения в одном из аккумуляторов. Содержимое базового индексного регистра при этом не изменяется. В качестве него могут выступать X, Y, SP или PC. Аккумулятором со смещением может быть A, B или 16разрядный D.

Пример:

 

LDAA B,X

;Загрузить в аккумулятор A содержимое ячейки памяти с адресом

 

;(B) + (X). Содержимое обоих аккумуляторов при выполнении

 

;команды не меняется.

Косвенная индексная адресация [D,IDX] со смещением в аккумуляторе D

При таком режиме индексной адресации к значению аккумулятора D прибавляется значение базового индексного регистра, чтобы сформировать адрес области памяти, которая содержит указатель на конечную ячейку. Т.е. операнд команды ссылается не на сам объект данных, а на его адрес.

Пример:

 

JMP [D,PC]

;Перейти по адресу, который, в свою очередь, хранится в ячейке

 

;с адресом (D) + (PC).

1.4. Система команд

Исходный текст программы на языке Ассемблера состоит из строк, каждая из которых соответствует одной команде. В табл. 1.3 представлен формат командной строки Ассемблера для МК семейства НСS12. Командная строка состоит из четырех полей:

Поле метки заполнять не обязательно. При необходимости в нём указывается символьное имя адреса данной команды, на который можно осуществлять ссылки в программе. Если поле метки заполнено, то метка отделяется от поля команды двоеточием

ипробелом либо просто пробелом.

Вполе команды указывается синтаксис выполняемой операции. Поле команды отделяется от поля операнда как минимум одним пробелом.

Поле операнда заполняется в соответствии с форматом команды. Операнды могут быть представлены в численном или символическом виде или в виде выражения (математической формулы). Символьные имена должны быть заданы в виде меток или с помощью специальных директив Ассемблера.

Поле комментариев (не обязательно) отделяется от остальных полей точкой с запятой.

Комментарии служат для пояснения функции соответствующей операции при выполнении данной программы.

Табл. 1.3. Формат командной строки ассемблера CPU12

Поле метки

Поле команды

Поле операнда

Поле комментариев

М1:

ADDA

#$А4

;Сложить содержимое аккумулятора

 

 

 

;А с числом $00А4

 

 

 

22

1.4.1. Команды загрузки и пересылки данных

Команды этой группы осуществляют перемещение данных между ячейками памяти и регистрами центрального процессора (табл. 1.3). Отличительная особенность команд загрузки и пересылки – установка признаков нуля Z и знака N в соответствии со значением перемещаемого числа.

В этом подразделе, если не указано иначе, r означает регистр X, Y или SP.

Табл. 1.4. Команды загрузки и пересылки данных

 

Синтаксис

Операция

Выполняемое

Способ

Влияние на

 

действие

адресации

признаки

 

 

 

 

 

 

 

 

 

CLR

adr

Стереть данные в ячейке

М ← 0

EXT

 

CLR

opr,r

памяти

М ← 0

IDX, IDX1, IDX2

 

CLR

[opr,r]

 

М ← 0

[IDX2]

N = V = C = 0

CLR

[D,r]

 

М ← 0

[D,IDX]

Z=1

CLRA

 

Стереть содержимое

А ← 0

INH

 

CLRB

 

аккумулятора

В ← 0

INH

 

LDAA

#opr

Загрузить в аккумулятор

 

IMM

 

LDAA

adr

А константу или

 

DIR, EXT

N,Z = var

LDAA

opr,r

содержимое ячейки

A ← (M)

IDX, IDX1, IDX2

V = 0

LDAA

[opr,r]

памяти

 

[IDX2]

 

LDAA

[D,r]

 

 

[D,IDX]

 

LDAB

#opr

Загрузить в аккумулятор

 

IMM

 

LDAB

adr

B константу или

 

DIR, EXT

N,Z = var

LDAB

opr,r

содержимое ячейки

B ← (M)

IDX, IDX1, IDX2

V = 0

LDAB

[opr,r]

памяти

 

[IDX2]

 

LDAB

[D,r]

 

 

[D,IDX]

 

LDD

#opr

Загрузить в двойной

 

IMM

 

LDD

adr

аккумулятор D константу

(A : B) ← (M :

DIR, EXT

N,Z = var

LDD

opr,r

или содержимое двух

M+1)

IDX, IDX1, IDX2

V = 0

LDD

[opr,r]

ячеек памяти

 

[IDX2]

 

LDD

[D,r]

 

 

[D,IDX]

 

LDX

#opr

Загрузить в регистр Х

 

IMM

 

LDX

adr

константу или

 

DIR, EXT

N,Z = var

LDX

opr,r

содержимое двух ячеек

Х ← (M : M+1)

IDX, IDX1, IDX2

V = 0

LDX

[opr,r]

памяти

 

[IDX2]

 

LDX

[D,r]

 

[D,IDX]

 

 

 

 

LDY

#opr

Загрузить в регистр Y

 

IMM

 

LDY

adr

константу или

 

DIR, EXT

N,Z = var

LDY

opr,r

содержимое двух ячеек

Y ← (M : M+1)

IDX, IDX1, IDX2

V = 0

LDY

[opr,r]

памяти

 

[IDX2]

 

LDY

[D,r]

 

 

[D,IDX]

 

LDS

#opr

Загрузить в указатель

 

IMM

 

LDS

adr

стека SP константу или

 

DIR, EXT

N,Z = var

LDS

opr,r

содержимое двух ячеек

SP ← (M : M+1)

IDX, IDX1, IDX2

V = 0

LDS

[opr,r]

памяти

 

[IDX2]

 

LDS

[D,r]

 

 

[D,IDX]

 

LEAS

opr,r

Загрузить эффективный

SP ← effective

IDX, IDX1, IDX2

(CCR) = const

адрес в указатель стека

address

 

 

SP

 

 

 

LEAX

opr,r

Загрузить эффективный

X ← effective

 

 

адрес в индексный

IDX, IDX1, IDX2

(CCR) = const

address

 

 

регистр X

 

 

 

LEAY

opr,r

Загрузить эффективный

Y ← effective

IDX, IDX1, IDX2

(CCR) = const

адрес в индексный

address

 

 

регистр Y

 

 

 

STAA

adr

Запомнить содержимое

 

DIR, EXT

 

STAA

opr,r

аккумулятора А в ячейке

M ← (A)

IDX, IDX1, IDX2

N,Z = var

STAA

[opr,r]

памяти

 

[IDX2]

V = 0

STAA

[D,r]

 

 

[D,IDX]

 

 

 

 

 

 

23

STAB

adr

Запомнить содержимое

 

DIR, EXT

 

STAB

opr,r

аккумулятора B в ячейке

M ← (B)

IDX, IDX1, IDX2

N,Z = var

STAB [opr,r]

памяти

 

[IDX2]

V = 0

STAB

[D,r]

 

 

[D,IDX]

 

STD

adr

Запомнить содержимое

 

DIR, EXT

 

STD

opr,r

двойного аккумулятора

M : M+1 ← (A : B)

IDX, IDX1, IDX2

N,Z = var

STD [opr,r]

D в двух ячейках памяти

 

[IDX2]

V = 0

STD

[D,r]

с адресами adr и adr+1

 

[D,IDX]

 

STX

adr

Запомнить содержимое

 

DIR, EXT

 

STX

opr,r

регистра Х в двух

M : M+1 ← (Х)

IDX, IDX1, IDX2

N,Z = var

STX [opr,r]

ячейках памяти с

 

[IDX2]

V = 0

STX

[D,r]

адресами adr и adr+1

 

[D,IDX]

 

STY

adr

Запомнить содержимое

 

DIR, EXT

 

STY

opr,r

регистра Y в двух

M : M+1 ← (Y)

IDX, IDX1, IDX2

N,Z = var

STY [opr,r]

ячейках памяти с

 

[IDX2]

V = 0

STY

[D,r]

адресами adr и adr+1

 

[D,IDX]

 

STS

adr

Запомнить содержимое

 

DIR, EXT

 

STS

opr,r

указателя стека SP в

M : M+1 ← (SP)

IDX, IDX1, IDX2

N,Z = var

STS [opr,r]

двух ячейках памяти с

 

[IDX2]

V = 0

STS

[D,r]

адресами adr и adr+1

 

[D,IDX]

 

MOVB #opr,adr

Поместить байт данных

 

IMM-EXT

 

MOVB #opr1,opr2,r

opr в ячейку adr

 

IMM-IDX

 

Поместить байт данных

 

 

MOVB adr1,adr2

opr1 в ячейку памяти

 

EXT-EXT

 

Поместить байт данных

 

 

 

 

из ячейки с адресом adr1

 

 

 

MOVB adr,opr,r

в ячейку с адресом adr2

 

EXT-IDX

(CCR) = const

Поместить байт данных

M2 ← (M1)

 

 

из ячейки с адресом adr

 

 

 

MOVB opr,r,adr

в другую ячейку памяти

 

IDX-EXT

 

Поместить байт данных

 

 

MOVB

 

в ячейку с адресом adr

 

IDX-IDX

 

 

Поместить байт данных

 

 

opr1,r1,opr2,r2

из одной ячейки памяти

 

 

 

 

 

в другую

 

 

 

MOVW #opr,adr

Поместить 2 байта

 

IMM-EXT

 

 

 

данных opr в ячейки adr

 

 

 

MOVW #opr1,opr2,r

и adr+1

 

 

 

Поместить 2 байта

 

IMM-IDX

 

 

 

данных opr1 в 2 ячейки

 

 

 

MOVW adr1,adr2

памяти

 

 

 

Поместить 2 байта

 

EXT-EXT

 

 

 

данных из ячеек с

 

 

 

 

 

адресами adr1 и adr1+1 в

 

 

 

 

 

ячейки с адресами adr2 и

M2 : M2 + 1 ←

 

(CCR) = const

MOVW adr,opr,r

adr2+1

(M1 : M1 + 1)

EXT-IDX

Поместить 2 байта

 

 

 

 

 

данных из ячеек с

 

 

 

 

 

адресами adr и adr+1 в

 

 

 

MOVW opr,r,adr

другие 2 ячейки памяти

 

IDX-EXT

 

Поместить 2 байта

 

 

 

 

данных в ячейки с

 

 

 

MOVW

 

адресами adr и adr+1

 

IDX-IDX

 

 

Поместить 2 байта

 

 

opr1,r1,opr2,r2

данных из 2 ячеек

 

 

 

 

 

памяти в другие 2 ячейки

 

 

 

TAB

 

Переслать содержимое

 

 

N,Z = var

 

аккумулятора А в

В ← (A)

INH

 

V = 0

 

 

аккумулятор В

 

 

 

TBA

 

Переслать содержимое

 

INH

N,Z= var

 

аккумулятора В в

A ← (В)

 

V = 0

 

 

аккумулятор А

 

 

 

 

 

 

 

 

24

TAP

 

Переслать содержимое

 

 

(CCR) = var,

 

аккумулятора А в

CCR ← (A)

INH

X только

(TFR A,CCR)

регистр состояния CCR

 

 

1 → 0

TPA

 

Переслать содержимое

 

INH

(CCR) = const

 

регистра состояния в

A ← (CCR)

(TFR CCR,A)

аккумулятор А

 

 

 

 

 

 

A, B, CCR, D, X,

 

(CCR) = сonst

TFR

r1,r2

Переслать содержимое

Y или SP

 

или

INH

(CCR) = var,

регистра r1 в r2

 

 

 

(A, B, CCR, D, X,

 

X только

 

 

 

Y или SP)

 

1 → 0

TSX

 

Переслать значение

 

INH

(CCR) = const

 

указателя стека в

X ← (SP)

(TFR SP,X)

регистр Х

 

 

 

TSY

 

Переслать значение

 

INH

(CCR) = const

 

указателя стека в

Y ← (SP)

(TFR SP,Y)

регистр Y

 

 

 

TXS

 

Переслать содержимое

 

INH

(CCR) = const

 

регистра Х в указатель

SP ← (X)

(TFR X,SP)

стека

 

 

 

TYS

 

Переслать содержимое

 

INH

(CCR) = const

 

регистра Y в указатель

SP ← (Y)

(TFR Y,SP)

стека

 

 

 

 

 

 

A, B, CCR, D, X,

 

(CCR) = сonst

EXG

r1,r2

Обменять содержимое

Y или SP

 

или

INH

(CCR) = var,

регистров r1 и r2

 

 

 

(A, B, CCR, D, X,

 

X только

 

 

 

Y или SP)

 

1 → 0

XGDX

 

Обменять содержимое

 

 

 

 

аккумулятора D и

(D) ↔ (X)

INH

(CCR) = const

(EXG D,X)

регистра Х

 

 

 

XGDY

 

Обменять содержимое

(D) ↔ (Y)

INH

(CCR) = const

 

аккумулятора D и

(EXG D,Y)

регистра Y

 

 

 

PSHA

 

Поместить содержимое

SP ← (SP) − 1,

INH

(CCR) = const

 

аккумулятора A в стек

M(SP) ← (A)

PSHB

 

Поместить содержимое

SP ← (SP) − 1,

INH

(CCR) = const

 

аккумулятора В в стек

M(SP) ← (B)

PSHC

 

Поместить содержимое

SP ← (SP) − 1,

INH

(CCR) = const

 

 

регистра CCR в стек

M(SP) ← (CCR)

 

 

 

 

 

SP ← (SP) − 2,

 

 

PSHD

 

Поместить содержимое

M(SP) : M(SP)+1

INH

(CCR) = const

 

аккумулятора D в стек

 

 

 

(A : B)

 

 

 

 

Поместить содержимое

SP ← (SP) − 2,

 

 

PSHX

 

M(SP) : M(SP)+1

INH

(CCR) = const

 

индексного регистра X в

 

 

 

стек

(XH : XL)

 

 

 

 

 

 

 

 

 

Поместить содержимое

SP ← (SP) − 2,

 

 

PSHY

 

M(SP) : M(SP)+1

INH

(CCR) = const

 

индексного регистра Y в

 

 

 

стек

(YH : YL)

 

 

 

 

 

 

 

PULA

 

Восстановить

A ← (M(SP)),

INH

(CCR) = const

 

аккумулятор A из стека

SP ← (SP) + 1

PULB

 

Восстановить

B ← (M(SP)),

INH

(CCR) = const

 

аккумулятор В из стека

SP ← (SP) + 1

PULC

 

Восстановить регистр

CCR ← (M(SP)),

INH

(CCR) = const

 

CCR из стека

SP ← (SP) + 1

 

 

Восстановить

A : B

 

 

PULD

 

INH

(CCR) = const

 

аккумулятор D из стека

(M(SP) : M(SP)+1),

 

 

 

SP ← (SP) + 2

 

 

 

 

 

 

 

25

 

Восстановить

XH : XL

 

 

PULX

 

 

содержимое индексного

INH

(CCR) = const

(M(SP) : M(SP)+1),

 

регистра X из стека

SP ← (SP) + 2

 

 

 

 

 

 

 

Восстановить

YH : YL

 

 

PULY

INH

(CCR) = const

содержимое индексного

(M(SP) : M(SP)+1),

 

регистра Y из стека

SP ← (SP) + 2

 

 

 

 

 

 

1.4.2. Арифметические команды

Данную группу образуют команды (табл. 1.4), выполняющие операции сложения, вычитания, инкремента и декремента, однобайтового и двухбайтового сравнения, умножения и деления. Команда умножения MUL выполняет операцию целочисленного беззнакового умножения. Сомножители расположены в аккумуляторах А и B, двухбайтовое произведение в аккумуляторе D. Команда деления IDIV выполняет целочисленное беззнаковое деление двухбайтового делимого (D) на двухбайтовый делитель (Х). Целое частное расположено в Х, остаток – в D. Команда FDIV позволяет получить дробный результат, при этом делимое (D) должно быть меньше делителя (Х), операнд частного (Х) интерпретируется как дробное число от 0 до 0.99998. Двухбайтный остаток остается в аккумуляторе D.

Табл.1.5. Арифметические команды

Мнемокод

Операция

Выполняемое

Способ

Влияние на

действие

адресации

признаки

 

 

 

ADDA

#opr

Сложить содержимое

 

IMM

 

ADDA

adr

аккумулятора А с байтом

A ← (A) + (M)

DIR, EXT

H,N,Z,V,C =

ADDA

opr,r

данных памяти М (или

IDX, IDX1, IDX2

var

ADDA

[opr,r]

константой). Результат

 

[IDX2]

 

ADDA

[D,r]

поместить в А.

 

[D,IDX]

 

ADDB

#opr

Сложить содержимое

 

IMM

 

ADDB

adr

аккумулятора B с байтом

B ← (B) + (M)

DIR, EXT

H,N,Z,V,C =

ADDB

opr,r

данных памяти М (или

IDX, IDX1, IDX2

var

ADDB

[opr,r]

константой). Результат

 

[IDX2]

 

ADDB

[D,r]

поместить в B.

 

[D,IDX]

 

ADDD

#opr

Сложить содержимое

 

IMM

 

аккумулятора D с двумя

 

 

ADDD

adr

байтами данных памяти

A : B

DIR, EXT

 

ADDD

opr,r

М (или константой).

IDX, IDX1, IDX2

N,Z,V,C = var

ADDD

[opr,r]

Результат поместить в

(A : B) + (M : M+1)

[IDX2]

 

ADDD

[D,r]

D.

 

[D,IDX]

 

 

 

Сложить содержимое

 

 

 

 

 

аккумулятора А с

 

 

 

ABA

 

содержимым

A ← (A) + (В)

INH

H,N,Z,V,C =

 

аккумулятора В.

var

 

 

Результат поместить в

 

 

 

 

 

А.

 

 

 

 

 

Сложить содержимое

 

 

 

ABX

 

регистра Х с байтом

 

IDX

(CCR) = const

 

данных аккумулятора В.

X ← (X) + (B)

(LEAX B,X)

Результат поместить в

 

 

 

 

 

Х.

 

 

 

 

 

Сложить содержимое

 

 

 

ABY

 

регистра Y с байтом

 

IDX

(CCR) = const

 

данных аккумулятора В.

Y ← (Y) + (B)

(LEAY B,Y)

Результат поместить в

 

 

 

 

 

Y.

 

 

 

 

 

 

 

 

26

ADCA

#opr

Сложить содержимое

 

 

 

аккумулятора А с байтом

 

IMM

 

ADCA

adr

данных памяти М (или

A ← (A) + (M) + С

DIR, EXT

H,N,Z,V,C =

ADCA

opr,r

константой) и значением

IDX, IDX1, IDX2

var

ADCA [opr,r]

бита переноса С.

 

[IDX2]

 

ADCA

[D,r]

Результат поместить в

 

[D,IDX]

 

 

 

А.

 

 

 

ADCB

#opr

Сложить содержимое

 

IMM

 

аккумулятора B с байтом

 

 

ADCB

adr

данных памяти М (или

B ← (B) + (M) + С

DIR, EXT

H,N,Z,V,C =

ADCB

opr,r

константой) и значением

IDX, IDX1, IDX2

var

ADCB [opr,r]

бита переноса С.

 

[IDX2]

 

ADCB

[D,r]

Результат поместить в

 

[D,IDX]

 

 

 

B.

 

 

 

SUBA

#opr

Вычесть байт данных

 

IMM

 

памяти М (или

 

 

SUBA

adr

константу) из

 

DIR, EXT

 

SUBA

opr,r

содержимого

A ← (A) − (M)

IDX, IDX1, IDX2

N,Z,V,C = var

SUBA [opr,r]

аккумулятора А.

 

[IDX2]

 

SUBA

[D,r]

Результат поместить в

 

[D,IDX]

 

 

 

А.

 

 

 

SUBB

#opr

Вычесть байт данных

 

IMM

 

памяти М (или

 

 

SUBB

adr

константу) из

 

DIR, EXT

 

SUBB

opr,r

содержимого

B ← (B) − (M)

IDX, IDX1, IDX2

N,Z,V,C = var

SUBB [opr,r]

аккумулятора B.

 

[IDX2]

 

SUBB

[D,r]

Результат поместить в

 

[D,IDX]

 

 

 

B.

 

 

 

SUBD

#opr

Вычесть 2 байта данных

 

IMM

 

памяти М (или

 

 

SUBD

adr

константу) из

A : B

DIR, EXT

 

SUBD

opr,r

содержимого

IDX, IDX1, IDX2

N,Z,V,C = var

SUBD [opr,r]

аккумулятора D.

(A : B) − (M : M+1)

[IDX2]

 

SUBD

[D,r]

Результат поместить в

 

[D,IDX]

 

 

 

D.

 

 

 

 

 

Вычесть содержимое

 

 

 

 

 

аккумулятора А из

 

 

 

SBA

 

содержимого

A ← (A) − (В)

INH

N,Z,V,C = var

 

аккумулятора В.

 

 

Результат поместить в

 

 

 

 

 

А.

 

 

 

SBCA

#opr

Вычесть байт данных

 

 

 

памяти М (или

 

IMM

 

SBCA

adr

константу) и бит

 

DIR, EXT

 

SBCA

opr,r

переноса С из

A ← (A) − (M) − С

IDX, IDX1, IDX2

N,Z,V,C = var

SBCA [opr,r]

аккумулятора А.

 

[IDX2]

 

SBCA

[D,r]

Результат поместить в

 

[D,IDX]

 

 

 

А.

 

 

 

SBCB

#opr

Вычесть байт данных

 

IMM

 

памяти М (или

 

 

SBCB

adr

константу) и бит

 

DIR, EXT

 

SBCB

opr,r

переноса С из

B ← (B) - (M) – (С)

IDX, IDX1, IDX2

N,Z,V,C = var

SBCB [opr,r]

аккумулятора B.

 

[IDX2]

 

SBCB

[D,r]

Результат поместить в

 

[D,IDX]

 

 

 

B.

 

 

 

 

 

Умножить содержимое А

 

 

 

 

 

на содержимое B без

 

 

C = В7 в

 

 

учёта знака.

 

 

MUL

 

 

INH

регистре В в

 

Произведение

A : B ← (A) × (B)

 

результате

 

 

представлено в

 

 

умножения

 

 

двухбайтовом формате и

 

 

 

 

 

 

 

 

 

помещено в D.

 

 

 

 

 

 

 

 

27

 

 

Умножить содержимое D

 

 

 

 

 

на содержимое Y без

 

 

 

 

 

учёта знака.

 

 

 

EMUL

 

Произведение

Y : D ← (D) × (Y)

INH

N,Z,C = var

 

представлено в

 

 

четырёхбайтовом

 

 

 

 

 

формате и помещено в Y

 

 

 

 

 

: D.

 

 

 

 

 

Умножить содержимое D

 

 

 

 

 

на содержимое Y с

 

 

 

 

 

учётом знака.

 

 

 

EMULS

 

Произведение

Y : D ← (Y) × (D)

INH

N,Z,C = var

 

представлено в

 

 

четырёхбайтовом

 

 

 

 

 

формате и помещено в Y

 

 

 

 

 

: D.

 

 

 

 

 

Разделить содержимое

 

 

 

 

 

аккумулятора D на

 

 

 

IDIV

 

содержимое регистра X

X ← (D) / (X)

INH

Z,C = var

 

без учёта знака. Целое

 

D ← Остаток

V = 0

 

 

частное помещается в X,

 

 

 

 

 

 

 

 

остаток от деления – в

 

 

 

 

 

D.

 

 

 

 

 

Разделить содержимое

 

 

 

 

 

аккумулятора D на

 

 

 

IDIVS

 

содержимое регистра X с

X ← (D) / (X)

INH

N,Z,V,C = var

 

учётом знака. Целое

 

D ← Остаток

 

 

частное помещается в X,

 

 

 

 

 

 

 

 

 

остаток от деления – в

 

 

 

 

 

D.

 

 

 

 

 

Разделить меньшее

 

 

 

 

 

двухбайтовое делимое

 

 

 

FDIV

 

(D) на больший

X ← (D) / (X)

INH

Z,V,C = var

 

двухбайтовый делитель

 

D ← Остаток

 

 

(Х). Частное (0..0,99998)

 

 

 

 

 

 

 

 

 

помещается в X, остаток

 

 

 

 

 

от деления – в D.

 

 

 

 

 

Разделить содержимое

 

 

 

 

 

регистров Y и D (32 бита)

 

 

 

EDIV

 

на содержимое регистра

Y ← (Y : D) / (X)

INH

N,Z,V,C = var

 

X без учёта знака. Целое

 

 

частное помещается в Y,

D ← Остаток

 

 

 

 

 

 

 

 

 

остаток от деления – в

 

 

 

 

 

D.

 

 

 

 

 

Разделить содержимое

 

 

 

 

 

регистров Y и D (32 бита)

 

 

 

EDIVS

 

на содержимое регистра

Y ← (Y : D) / (X)

INH

N,Z,V,C = var

 

X с учётом знака. Целое

 

D ← Остаток

 

 

частное помещается в Y,

 

 

 

 

 

 

 

 

 

остаток от деления – в

 

 

 

 

 

D.

 

 

 

 

 

Сравнить содержимое

 

 

 

CMPA

#opr

аккумулятора А с байтом

 

IMM

 

памяти М (или

 

 

CMPA

adr

константой). По

 

DIR, EXT

 

CMPA

opr,r

результату сравнения

(A) − (M)

IDX, IDX1, IDX2

N,Z,V,C = var

CMPA [opr,r]

установить признаки.

 

[IDX2]

 

CMPA

[D,r]

Исходные операнды

 

[D,IDX]

 

 

 

после операции не

 

 

 

 

 

изменяются.

 

 

 

28

 

 

Сравнить содержимое

 

 

 

CMPB

#opr

аккумулятора B с байтом

 

 

 

памяти М (или

 

IMM

 

CMPB

adr

константой). По

 

DIR, EXT

 

CMPB

opr,r

результату сравнения

(B) − (M)

IDX, IDX1, IDX2

N,Z,V,C = var

CMPB

[opr,r]

установить признаки.

 

[IDX2]

 

CMPB

[D,r]

Исходные операнды

 

[D,IDX]

 

 

 

после операции не

 

 

 

 

 

изменяются.

 

 

 

 

 

Сравнить содержимое

 

 

 

CPD

#opr

аккумулятора D с двумя

 

 

 

байтами памяти (или

 

IMM

 

CPD

adr

константой). По

 

DIR, EXT

 

CPD

opr,r

результату сравнения

(A : B) − (M : M+1)

IDX, IDX1, IDX2

N,Z,V,C = var

CPD

[opr,r]

установить признаки.

 

[IDX2]

 

CPD

[D,r]

Исходные операнды

 

[D,IDX]

 

 

 

после операции не

 

 

 

 

 

изменяются.

 

 

 

 

 

Сравнить содержимое

 

 

 

CBA

 

аккумулятора A с

(А) − (В)

INH

N,Z,V,C = var

 

содержимым

 

 

аккумулятора В.

 

 

 

CPX

#opr

 

 

IMM

 

CPX

adr

Сравнить содержимое

 

DIR, EXT

 

CPX

opr,r

регистра Х с

(Х) − (М : M+1)

IDX, IDX1, IDX2

N,Z,V,C = var

CPX

[opr,r]

двухбайтным числом.

 

[IDX2]

 

CPX

[D,r]

 

 

[D,IDX]

 

CPY

#opr

 

 

IMM

 

CPY

adr

Сравнить содержимое

 

DIR, EXT

 

CPY

opr,r

регистра Y с

(Y) − (М : M+1)

IDX, IDX1, IDX2

N,Z,V,C = var

CPY

[opr,r]

двухбайтным числом.

 

[IDX2]

 

CPY

[D,r]

 

 

[D,IDX]

 

CPS

#opr

 

 

IMM

 

CPS

adr

Сравнить содержимое

 

DIR, EXT

 

CPS

opr,r

регистра SP с

(SP) − (М : M+1)

IDX, IDX1, IDX2

N,Z,V,C = var

CPS

[opr,r]

двухбайтным числом.

 

[IDX2]

 

CPS

[D,r]

 

 

[D,IDX]

 

 

 

Определение

 

 

 

MINA

opr,r

минимального значения

 

IDX, IDX1, IDX2

 

из двух однобайтных

 

 

MINA

[opr,r]

чисел без знака.

A ← MIN((A),(M))

[IDX2]

N,Z,V,C = var

MINA

[D,r]

Результат помещается в

 

[D,IDX]

 

 

 

аккумулятор A.

 

 

 

 

 

Определение

 

 

 

MINM

opr,r

минимального значения

 

IDX, IDX1, IDX2

 

из двух однобайтных

 

 

MINM

[opr,r]

чисел без знака.

M ← MIN((A),(M))

[IDX2]

N,Z,V,C = var

MINM

[D,r]

Результат помещается в

 

[D,IDX]

 

 

 

ячейку памяти M.

 

 

 

 

 

Определение

 

 

 

EMIND

opr,r

минимального значения

D

IDX, IDX1, IDX2

 

из двух двухбайтных

 

EMIND

[opr,r]

чисел без знака.

[IDX2]

N,Z,V,C = var

EMIND

[D,r]

Результат помещается в

MIN((D),(M : M+1))

[D,IDX]

 

 

 

аккумулятор D.

 

 

 

 

 

Определение

 

 

 

EMINM

opr,r

минимального значения

M : M+1

IDX, IDX1, IDX2

 

из двух двухбайтных

 

EMINM

[opr,r]

чисел без знака.

[IDX2]

N,Z,V,C = var

EMINM

[D,r]

Результат помещается в

MIN((D),(M : M+1))

[D,IDX]

 

 

 

ячейку памяти M.

 

 

 

 

 

 

 

 

29

 

 

Определение

 

 

 

MAXA

opr,r

максимального значения

 

IDX, IDX1, IDX2

 

из двух однобайтных

 

 

MAXA [opr,r]

чисел без знака.

A ← MAX((A),(M))

[IDX2]

N,Z,V,C = var

MAXA

[D,r]

Результат помещается в

 

[D,IDX]

 

 

 

аккумулятор A

 

 

 

 

 

Определение

 

 

 

MAXM

opr,r

максимального значения

 

IDX, IDX1, IDX2

 

из двух однобайтных

 

 

MAXM [opr,r]

чисел без знака.

M ← MAX((A),(M))

[IDX2]

N,Z,V,C = var

MAXM

[D,r]

Результат помещается в

 

[D,IDX]

 

 

 

ячейку памяти M.

 

 

 

 

 

Определение

 

 

 

EMAXD

opr,r

максимального значения

D

IDX, IDX1, IDX2

 

из двух двухбайтных

 

EMAXD [opr,r]

чисел без знака.

[IDX2]

N,Z,V,C = var

EMAXD

[D,r]

Результат помещается в

MAX((D),(M : M+1))

[D,IDX]

 

 

 

аккумулятор D.

 

 

 

 

 

Определение

 

 

 

EMAXM

opr,r

максимального значения

M : M+1

IDX, IDX1, IDX2

 

из двух двухбайтных

 

EMAXM [opr,r]

чисел без знака.

[IDX2]

N,Z,V,C = var

EMAXM

[D,r]

Результат помещается в

MAX((D),(M : M+1))

[D,IDX]

 

 

 

ячейку памяти M.

 

 

 

INC

adr

Увеличить на 1

 

EXT

 

INC

opr,r

содержимое ячейки

M ← (M) + 1

IDX, IDX1, IDX2

N,Z,V = var

INC [opr,r]

памяти М.

 

[IDX2]

 

INC

[D,r]

 

 

[D,IDX]

 

INCA

 

Увеличить на 1

 

 

 

 

содержимое

А ← (А) + 1

INH

N,Z,V = var

 

 

аккумулятора А.

 

 

 

INCB

 

Увеличить на 1

 

INH

N,Z,V = var

 

содержимое

B ← (B) + 1

 

 

аккумулятора B.

 

 

 

INX

 

Увеличить на 1

Х ← (Х) + 1

INH

Z = var

 

содержимое регистра Х.

INY

 

Увеличить на 1

Y ← (Y) + 1

INH

Z = var

 

содержимое регистра Y.

INS

 

Увеличить на 1

 

INH

(CCR) = const

 

содержимое указателя

SP ← (SP) + 1

(LEAS 1,SP)

стека SP.

 

 

 

DEC

adr

Уменьшить на 1

 

EXT

 

DEC

opr,r

содержимое ячейки

M ← (M) − 1

IDX, IDX1, IDX2

N,Z,V = var

DEC [opr,r]

памяти М.

 

[IDX2]

 

DEC

[D,r]

 

 

[D,IDX]

 

DECA

 

Уменьшить на 1

 

 

 

 

содержимое

А ← (А) − 1

INH

N,Z,V = var

 

 

аккумулятора А.

 

 

 

DECB

 

Уменьшить на 1

 

INH

N,Z,V = var

 

содержимое

B ← (B) − 1

 

 

аккумулятора B.

 

 

 

DEX

 

Уменьшить на 1

Х ← (Х) − 1

INH

Z = var

 

содержимое регистра Х.

DEY

 

Уменьшить на 1

Y ← (Y) − 1

INH

Z = var

 

содержимое регистра Y.

DES

 

Уменьшить на 1

 

INH

(CCR) = const

 

содержимое указателя

SP ← (SP) − 1

 

 

стека SP.

 

 

 

DAA

 

Десятичная коррекция

 

INH

N,Z,C = var

 

содержимого

A ← (A)10

 

V = ?

 

 

аккумулятора A.

 

 

 

 

 

 

 

 

30