Пособие HCS12 & Elvis II v.7.01
.pdfADDB 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 |