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 - для двойных слов. Например: MOVE.В D1,D3 ; Пересылка байта. MOVE.W D1,D3 ; Пересылка слова. |