Система команд центрального процессора М68000 игровой приставки SEGA MEGA DRIVE
1.4. Система команд центрального процессора М68000 игровой приставки SEGA MEGA DRIVE
Команда
Пример использования
Размер операндов
Изменяемые флаги
Описание
ABCD
ABCD Dy, Dx ABCD -(Ay), - (Ax)
Байт
X, Z, C
Сложение двух чисел в двоично-десятичном коде с учетом флага X. Операнды могут располагаться либо в регистрах донных, либо в памяти. Во втором случае указывается регистр адреса, хранящий адрес операнда
ADD
ADD <ea>, Dn ADD Dn,<ea>
Байт, слово, двойное слово
X, N, Z, V, С
Сложение двух чисел в двоичном коде. Один из операндов должен находиться в регистре данных
ADDA
ADDA <ea>, An
Слово, двойное слово
-
Сложение адресов. Один из операндов должен находиться в регистре адреса
ADDI
ADDI #dota, <ea>
Байт, слово, двойное слово
X, N, Z, V, С
Сложение с константой
ADDQ
ADDQ #data, <ea>
Байт, слово, двойное слава
X, N, Z, V, С
Быстрое сложение с константой. Константа data мажет быть числам в диапазоне от 1 до 8
ADDX
ADDX <ea>, Dn ADDX Dn,<ea>
Байт, слово, двойное слово
X, N, Z, V, С
Сложение чисел с учетом флага X. Один из операндов должен быть в регистре донных
AND
AND <ea>,Dn AND Dn,<ea>
Байт, слово, двойное слова
N, Z, V, С
Логическое И. Один из операндов должен быть в регистре данных
ANDI
ANDI #data, <ea>
Байт, слово, двойное слова
N, Z, V, С
Логическое И с константой
ANDI to CCR
ANDI #data, CCR
Байт
X, N, Z, V, С
Логическое И константы и содержимого регистра флагов CCR
ASL
ASL Dx, Dy ASL #data, Dy ASL <ea>
Байт, слово, двойное слово
X, N, Z, V, С
Арифметический сдвиг числа в регистре но указанное количество разрядов влево. Если количество разрядов определяется константой, оно может быть числом от 1 до 8. Если количество разрядов задается в регистре, оно берется по модулю 64 (то есть находится в диапазоне 1-63)
ASR
ASR Dx, Dy ASR #data, Dy ASR <ea>
Байт, слово, двойное слово
X, N, Z, V, С
Арифметический сдвиг числа в регистре на указанное количество разрядов вправо. Если количество разрядов определяется константой, оно может быть числом от 1 до 8. Если количество разрядов задается в регистре, оно берется по модулю 64 (то есть находится в диапазоне 1-63)
Bcc
Вcс <label>
Байт, слово
-
Условный переход. Если выполняется заданное условие, то указанное в команде смещение, интерпретируемое кок число со знаком, прибавляется к текущему значению счетчика команд, и выполнение программы продолжается с нового места. Возможные коды условий приведены после таблицы
BCHG
BCHG Dn,<ea> BCHG #data, <ea>
Байт, двойное слово
Z
Проверка и инверсия указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флаг сбрасывается. Разряд операнда инвертируется. Номер проверяемого разряда указывается либо в регистре, либо непосредственно. Если операнд находится в памяти, он должен быть байтом. Операнд в регистре рассматривается как двойное слово
BCLR
BCLR Dn,<ea> BCLR #data, <ea>
Байт, двойное слово
Z
Проверка и сброс указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флаг сбрасывается. Разряд операнда сбрасывается. Номер проверяемого разряда указывается либо в регистре, либо непосредственно. Если операнд находится в памяти, он должен быть байтом. Операнд
BRA
BRA <label>
Байт, слово
Безусловный переход. Указанное в команде смещение, интерпретируемое как число со знакам, прибавляется к текущему значению счетчика команд, и выполнение программы продолжается с нового места
BSET
BSET Dn,<ea> BSET #data, <ea>
Байт, двойное слово
Z
Проверка и установка указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флаг сбрасывается. Разряд операнда устанавливается в 1. Номер проверяемого разряда указывается либо в регистре, либо непосредственно. Если операнд находится в памяти, ан должен быть байтом. Операнд в регистре рассматривается как двойное слова
BSR
BSR <label>
Байт, слово
Переход к подпрограмме. Адрес возврата запоминается в стеке. Указанное в команде смещение, интерпретируемое как число са знаком, прибавляется к текущему значению счетчика команд, и выполнение программы продолжается с нового места
BTST
BTST Dn,<ea> BTST #data, <ea>
Байт, двойное слово
Z
Проверка указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флаг сбрасывается. Разряд операнда не изменяется. Номер проверяемого разряда указывается либо в регистре, либо непосредственна. Если операнд находится в памяти, ан должен быть байтом. Операнд в регистре рассматривается как двойное слово
CHK
CHK <ea>, Dn
Слово
N, Z, V, C
Проверка попадания в интервал. Если число в регистре меньше 0 или больше первого операнда, возникает исключение
CLR
CLR <ea>
Байт, слово, двойное слово
N, Z, V, C
Указанный операнд становится равен 0
CMP
CMP <ea>, Dn
Байт, слово, двойное слово
N, Z, V, C
Сравнение. Установка флагов в соответствии с результатам вычитания второго операнда из первого. Сами операнды не изменяются
CMPA
CMPA <ea>, An
Слово, двойное слово
N, Z, V, C
Сравнение с операндам из регистра адреса
CMPI
CMPI #data, <ea>
Байт, слова, двойное слово
N, Z, V, C
Сравнение с константой
CMPM
CMPM(Ay)+,(Ax)+
Байт, слова, двойное слово
N, Z, V, C
Сравнение двух чисел из памяти
DBcc
DBcc Dn, <label>
Слово
Переход с декрементам. Если указанное в коде команды условие ложна, происходит декремент числа в регистре и переход по указанному адресу
DIVS
DIVS.W <ea>, Dn
Слово, двойное слово
N, Z, V, C
Деление с учетам знака. Делится двойное слово на слова. В результате младшие 16 разрядов представляют собой частное, а старшие - остаток. При делении на 0 возникает исключение
DIVU
DIVU.W <ea>, Dn
Слово, двойное слово
N, Z, V, C
Деление без учета знака. В остальном аналогична DIVS
EOR
EOR Dn, <ea>
Байт, словО, двойное слово
N, Z, V, C
Исключающее ИЛИ
EORI
EORI #data, <ea>
Байт, словО, двойное слово
N, Z, V, C
Исключающее ИЛИ с константой
EORI to CCR
EORI #data, CCR
Байт
X, N, Z, V, C
Исключающее ИЛИ константы и младшего байта регистра состояния процессора
EXG
EXG Dx, Dy EXG Ax, Ay EXG Dx, Ay
Двойное слово
Обмен содержимого регистров
EXT
EXT.W Dn
Слово, двойное
N, Z, V, C
Преобразование байта в слова или слава
JMP
JMP <ea>
Двойное слово
Безусловный переход по указанному адресу
JSR
JSR <ea>
Двойное слово
Вызов подпрограммы по указанному адресу. Адрес возврата запоминается в стеке
LEA
LEA <ea>, An
Двойное слово
Вычисление исполнительного адреса <ea> и его запись в регистр адреса An
LINK
LINK An, #data
Слово
Регистр An сохраняется в стеке. Указатель стека копируется в регистр An. К содержимому указателя стека прибавляется константа #dаta, рассматриваемая как 16-разрядное число со знаком
LSL
LSL Dx, Dy LSL #data, Dy LSL <ea>
Байт, слово, двойное слово
X, N, Z, V, С
Логический сдвиг влево на указанное число разрядов. Старшие разряды копируются в флаги X и С, в младшие разряды записываются нули
LSR
LSR Dx, Dy LSR #data, Dy LSR <ea>
Байт, слово, двойное слово
X, N, Z, V, С
Логический сдвиг вправо на указанное число разрядов. Младшие разряды копируются в флаги X и С, в старшие разряды записываются нули
MOVE
MOVE <ea>, <ea>
Байт, слово, двойное слово
N, Z, V, С
Пересылке донных
MOVEA
MOVEA <ea>, An
Байт, слово, двойное слово
Пересылка данных в регистр адреса
MOVE to CRR
MOVE <ea>, <ea>
Байт, слово, двойное слово
X, N, Z, V, С
Пересылка младшего байта операнда в регистр состояния процессоре
MOVE from SR
MOVE SR <ea>
Слово
Пересылка данных из регистра состояния процессора. Копируется состояние всех 16 разрядов. Неиспользуемые разряды равны 0
MOVEM
MOVEM <list>, <ea> MOVEM <ea>, <list>
Слово,двойное слово
Пересылка блока данных. Пересылается содержимое всех регистров, указанных в списке <list>, в память, или данные из памяти передаются в указанные регистры
MOVEP
MOVEP Dx, (d16, Ay) MOVEP (d16, Ay), Dx
Слово,двойное слово
Побайтная передача данных. Данные из регистра Dn передаются в память - начиная со старшего байта и заканчивая младшим. Начальный адрес вычисляется кок сумма адреса из регистра An и 16-разрядного смещения d 16. После пересылки каждого байта адрес увеличивается на 2. Эта команда предназначена для обмена донными с 8-разрядными периферийными устройствами
MOVEQ
MOVEQ #data, Dn
Двойное слово
N, Z, V, С
Быстрая загрузка константы в регистр. Константа должна быть в диапазоне от -128 до 127. Она преобразуется в двойное слово путем расширения знакового разряда
MULS
MULS.W <ea>, Dn
Слово
N, Z, V, С
Умножение с учетом знака. Операнды всегда 16-разрядные, а результат - 32-разрядный
MULU
MULU.W <ea>, Dn
Слово
N, Z, V, С
Умножение без учета знака. Операнды всегда 16-разрядные, о результат - 32-разрядный
NBCD
NBCD <ea>
Байт
X, N, Z, V, С
Изменение знака двоично-десятичного числа с учетом флага расширения
NEG
NEG <ea>
Байт, слово, двойное слово
X, N, Z, V, С
Изменение знака двоичного число N = 0-N
NEGX
NEGX <ea>
Байт, слово, двойное слово
X, N, Z, V, С
Изменение знака числа с учетом флага расширения N=0-N-X
NOP
NOP
Пустая операция
NOT
NOT <ea>
Байт, слово, двойное слово
N, Z, V, С
Логическая инверсия
OR
OR <ea>, Dn OR Dn, <ea>
Байт, слово, двойное слово
N, Z, V, С
Логическое ИЛИ
ORI
ORI #data, <ea>
Байт, слово, двойное слово
N, Z, V, С
Логическое ИЛИ с константой
ORI to CRR
ORI #data, CRR
Байт
X, N, Z, V, С
Логическое ИЛИ константы и младшего байта регистра состояния процессора
REA
PEA <ea>
Двойное слово
Вычисление адреса операнда и сохранение его
ROL
ROL Dx, Dy ROL #data, Dy ROL <ea>
Байт, слава, двойное слово
N, Z, V, C
Вращение операнда влево на указанное число разрядов. При вращении влево старший разряд копируется в флаг С и в младший разряд
ROR
ROR Dx, Dy ROR #data, Dy ROR <ea>
Байт, слава, двойное слово
N, Z, V, C
Вращение операнда вправо на указанное числа разрядов. При вращении вправо младший разряд, копируется в флаг С и в старший разряд
ROXL
ROXL Dx, Dy ROXL #data, Dy ROXL <ea>
Байт, слава, двойное слово
X, N, Z, V, C
Вращение операнда влево на указанное число разрядов через флаг X. При вращении старший разряд копируется в флаги С и X, а флаг X -в младший разряд
ROXR
ROXR Dx, Dy ROXR #data, Dy ROXR <ea>
Байт, слава, двойное слово
X, N, Z, V, C
Вращение операнда вправо на указанное число разрядов через флаг X. При вращении младший разряд копируется в флаги С и X, а флаг X -в старший разряд
RTR
RTR
X, N, Z, V, C
Возврат из подпрограммы с восстановлением регистра состояния. Сначала из стека извлекается 16-разрядное число, передаваемое в регистр состояния процессора, а затем - адрес возврата, по которому передается управление
RTS
RTS
Возврат из подпрограммы. Адрес возврата извлекается из стека
SBCD
SBCD Dx, Dy SBCD -(Ax), - (Ay)
Байт
X, N, Z, V, C
Вычитание в двоично-десятичном коде с учетам флага X Dx - Dx - Dy - X
Scc
Scc <ea>
Байт
Если указанное в команде условие истинно, по заданному адресу записывается FFh, если ложно - 0
SUB
SUB <ea>, Dn SUB Dn, <ea>
Байт, слава, двойное слова
X, N, Z, V, C
Вычитание двоичных чисел
SUBA
SUBA <ea>
Славо, двойное слово
Вычитание адресов
SUBI
SUBI #data, <ea>
Байт, слово, двойное слово
X, N, Z, V, C
Вычитание константы
SUBQ
SUBQ #data, <ea>
Байт, слово, двойное слово
X, N, Z, V, C
Быстрое вычитание константы. Константа мажет быть числом от 1 до 8
SUBX
SUBX Dx, Dy SUBX-(Ax),-(Ay)
Байт, слово, двойное слово
X, N, Z, V, C
Вычитание двоичных чисел с учетом флага X
SWAP
SWAP Dn
Славо
N, Z, V, C
Перестановка младшего и старшего слав в 32-разрядном регистре
TAS
TAS <ea>
Байт
N, Z, V, C
Флаги N и Z устанавливаются в соответствии со значением операнда. Разряд D7 операнда становится равен 1
TRAP
TRAP #data
Генерация программного исключения с указанным номером
TRAPV
TRAPV
Генерация исключения, если флаг V равен 1
TST
TST <ea>
Байт, слово, двойное славо
N, Z, V, C
Установка флагов N и Z в соответствии со значением операнда
UNLK
UNLK An
Содержимое регистра Аn копируется в указатель стека, после чего двойное слово с вершины стека извлекается в регистр An
Условные обозначения: Dn, Dx, Dy - регистры данных An, Ах, Ay - регистры адреса <еа> - исполнительный адрес, вычисляемый с применением одного из методов адресации #data - данные, задаваемые в команде d16 - 16-разрядное смещение - список регистров сс - код условия
Коды условий: СС - флаг С - 0 CS - флаг С - 1 EQ. - равно F - ложь GE - больше или равно GT - больше HI - выше (больше без учета знака) LE - меньше или равно LO - ниже (меньше без учёта знака) LS - ниже или равно LT - меньше MI- минус NE - не равно PL - плюс Т - истина VC - флаг V = 0 VS - флаг V = 1
Коды условий задаются в названии команды. Например, в таблице есть команда условного перехода Вес - после подстановки условия получается реальная команда, скажем BNE - «переход, если не равно».
Задание размера операнда. Некоторые из команд процессора могут работать с операндами различной длины. При записи на языке ассемблера длина операнда таких команд задается явно путем добавления к имени команды определенного суффикса: .B - для байтов; .W - для слов; .L - для двойных слов.