Система команд центрального процессора М68000 игровой приставки SEGA MEGA DRIVE
1.4. Система команд центрального процессора М68000 игровой приставки SEGA MEGA DRIVE
Команда Пример использования Размер операндов Изменяемые флаги Описание
ABCDABCD Dy, Dx ABCD -(Ay), - (Ax)БайтX, Z, C Сложение двух чисел в двоично-десятичном коде с учетом флага X. Операнды могут располагаться либо в регистрах донных, либо в памяти. Во втором случае указывается регистр адреса, хранящий адрес операнда ADDADD <ea>, Dn ADD Dn,<ea>Байт, слово, двойное словоX, N, Z, V, С Сложение двух чисел в двоичном коде. Один из операндов должен находиться в регистре данных ADDAADDA <ea>, AnСлово, двойное слово- Сложение адресов. Один из операндов должен находиться в регистре адреса ADDIADDI #dota, <ea>Байт, слово, двойное словоX, N, Z, V, С Сложение с константой ADDQADDQ #data, <ea>Байт, слово, двойное славаX, N, Z, V, С Быстрое сложение с константой. Константа data мажет быть числам в диапазоне от 1 до 8 ADDXADDX <ea>, Dn ADDX Dn,<ea>Байт, слово, двойное словоX, N, Z, V, С Сложение чисел с учетом флага X. Один из операндов должен быть в регистре донных ANDAND <ea>,Dn AND Dn,<ea>Байт, слово, двойное словаN, Z, V, С Логическое И. Один из операндов должен быть в регистре данных ANDIANDI #data, <ea>Байт, слово, двойное словаN, Z, V, С Логическое И с константой ANDI to CCRANDI #data, CCRБайтX, N, Z, V, С Логическое И константы и содержимого регистра флагов CCR ASLASL Dx, Dy ASL #data, Dy ASL <ea>Байт, слово, двойное словоX, N, Z, V, С Арифметический сдвиг числа в регистре но указанное количество разрядов влево. Если количество разрядов определяется константой, оно может быть числом от 1 до 8. Если количество разрядов задается в регистре, оно берется по модулю 64 (то есть находится в диапазоне 1-63) ASRASR Dx, Dy ASR #data, Dy ASR <ea>Байт, слово, двойное словоX, N, Z, V, С Арифметический сдвиг числа в регистре на указанное количество разрядов вправо. Если количество разрядов определяется константой, оно может быть числом от 1 до 8. Если количество разрядов задается в регистре, оно берется по модулю 64 (то есть находится в диапазоне 1-63) BccВcс <label>Байт, слово- Условный переход. Если выполняется заданное условие, то указанное в команде смещение, интерпретируемое кок число со знаком, прибавляется к текущему значению счетчика команд, и выполнение программы продолжается с нового места. Возможные коды условий приведены после таблицы BCHGBCHG Dn,<ea> BCHG #data, <ea>Байт, двойное слово Z Проверка и инверсия указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флаг сбрасывается. Разряд операнда инвертируется. Номер проверяемого разряда указывается либо в регистре, либо непосредственно. Если операнд находится в памяти, он должен быть байтом. Операнд в регистре рассматривается как двойное слово BCLRBCLR Dn,<ea> BCLR #data, <ea>Байт, двойное слово Z Проверка и сброс указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флаг сбрасывается. Разряд операнда сбрасывается. Номер проверяемого разряда указывается либо в регистре, либо непосредственно. Если операнд находится в памяти, он должен быть байтом. Операнд BRABRA <label>Байт, слово Безусловный переход. Указанное в команде смещение, интерпретируемое как число со знакам, прибавляется к текущему значению счетчика команд, и выполнение программы продолжается с нового места BSETBSET Dn,<ea> BSET #data, <ea>Байт, двойное слово Z Проверка и установка указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флаг сбрасывается. Разряд операнда устанавливается в 1. Номер проверяемого разряда указывается либо в регистре, либо непосредственно. Если операнд находится в памяти, ан должен быть байтом. Операнд в регистре рассматривается как двойное слова BSRBSR <label>Байт, слово Переход к подпрограмме. Адрес возврата запоминается в стеке. Указанное в команде смещение, интерпретируемое как число са знаком, прибавляется к текущему значению счетчика команд, и выполнение программы продолжается с нового места BTSTBTST Dn,<ea> BTST #data, <ea>Байт, двойное слово Z Проверка указанного бита операнда. Если разряд равен 0, устанавливается флаг Z, в ином случае этот флаг сбрасывается. Разряд операнда не изменяется. Номер проверяемого разряда указывается либо в регистре, либо непосредственна. Если операнд находится в памяти, ан должен быть байтом. Операнд в регистре рассматривается как двойное слово CHKCHK <ea>, DnСлово N, Z, V, C Проверка попадания в интервал. Если число в регистре меньше 0 или больше первого операнда, возникает исключение CLRCLR <ea>Байт, слово, двойное слово N, Z, V, C Указанный операнд становится равен 0 CMPCMP <ea>, DnБайт, слово, двойное слово N, Z, V, C Сравнение. Установка флагов в соответствии с результатам вычитания второго операнда из первого. Сами операнды не изменяются CMPACMPA <ea>, AnСлово, двойное слово N, Z, V, C Сравнение с операндам из регистра адреса CMPICMPI #data, <ea>Байт, слова, двойное слово N, Z, V, C Сравнение с константой CMPMCMPM(Ay)+,(Ax)+Байт, слова, двойное слово N, Z, V, C Сравнение двух чисел из памяти DBccDBcc Dn, <label> Слово Переход с декрементам. Если указанное в коде команды условие ложна, происходит декремент числа в регистре и переход по указанному адресу DIVSDIVS.W <ea>, DnСлово, двойное словоN, Z, V, C Деление с учетам знака. Делится двойное слово на слова. В результате младшие 16 разрядов представляют собой частное, а старшие - остаток. При делении на 0 возникает исключение DIVUDIVU.W <ea>, DnСлово, двойное словоN, Z, V, C Деление без учета знака. В остальном аналогична DIVS EOREOR Dn, <ea>Байт, словО, двойное словоN, Z, V, C Исключающее ИЛИ EORIEORI #data, <ea>Байт, словО, двойное словоN, Z, V, C Исключающее ИЛИ с константой EORI to CCREORI #data, CCRБайтX, N, Z, V, C Исключающее ИЛИ константы и младшего байта регистра состояния процессора EXGEXG Dx, Dy EXG Ax, Ay EXG Dx, AyДвойное слово Обмен содержимого регистров EXTEXT.W DnСлово, двойноеN, Z, V, C Преобразование байта в слова или слава JMPJMP <ea>Двойное слово Безусловный переход по указанному адресу JSRJSR <ea>Двойное слово Вызов подпрограммы по указанному адресу. Адрес возврата запоминается в стеке LEALEA <ea>, AnДвойное слово Вычисление исполнительного адреса <ea> и его запись в регистр адреса An LINKLINK An, #dataСлово Регистр An сохраняется в стеке. Указатель стека копируется в регистр An. К содержимому указателя стека прибавляется константа #dаta, рассматриваемая как 16-разрядное число со знаком LSLLSL Dx, Dy LSL #data, Dy LSL <ea>Байт, слово, двойное словоX, N, Z, V, С Логический сдвиг влево на указанное число разрядов. Старшие разряды копируются в флаги X и С, в младшие разряды записываются нули LSRLSR Dx, Dy LSR #data, Dy LSR <ea>Байт, слово, двойное словоX, N, Z, V, С Логический сдвиг вправо на указанное число разрядов. Младшие разряды копируются в флаги X и С, в старшие разряды записываются нули MOVEMOVE <ea>, <ea>Байт, слово, двойное словоN, Z, V, С Пересылке донных MOVEAMOVEA <ea>, AnБайт, слово, двойное слово Пересылка данных в регистр адреса MOVE to CRRMOVE <ea>, <ea>Байт, слово, двойное словоX, N, Z, V, С Пересылка младшего байта операнда в регистр состояния процессоре MOVE from SRMOVE SR <ea>Слово Пересылка данных из регистра состояния процессора. Копируется состояние всех 16 разрядов. Неиспользуемые разряды равны 0 MOVEMMOVEM <list>, <ea> MOVEM <ea>, <list>Слово,двойное слово Пересылка блока данных. Пересылается содержимое всех регистров, указанных в списке <list>, в память, или данные из памяти передаются в указанные регистры MOVEPMOVEP Dx, (d16, Ay) MOVEP (d16, Ay), DxСлово,двойное слово Побайтная передача данных. Данные из регистра Dn передаются в память - начиная со старшего байта и заканчивая младшим. Начальный адрес вычисляется кок сумма адреса из регистра An и 16-разрядного смещения d 16. После пересылки каждого байта адрес увеличивается на 2. Эта команда предназначена для обмена донными с 8-разрядными периферийными устройствами MOVEQMOVEQ #data, DnДвойное словоN, Z, V, С Быстрая загрузка константы в регистр. Константа должна быть в диапазоне от -128 до 127. Она преобразуется в двойное слово путем расширения знакового разряда MULSMULS.W <ea>, DnСловоN, Z, V, С Умножение с учетом знака. Операнды всегда 16-разрядные, а результат - 32-разрядный MULUMULU.W <ea>, DnСловоN, Z, V, С Умножение без учета знака. Операнды всегда 16-разрядные, о результат - 32-разрядный NBCDNBCD <ea>БайтX, N, Z, V, С Изменение знака двоично-десятичного числа с учетом флага расширения NEGNEG <ea>Байт, слово, двойное словоX, N, Z, V, С Изменение знака двоичного число N = 0-N NEGXNEGX <ea>Байт, слово, двойное словоX, N, Z, V, С Изменение знака числа с учетом флага расширения N=0-N-X NOPNOP
Пустая операция NOTNOT <ea>Байт, слово, двойное словоN, Z, V, С Логическая инверсия OROR <ea>, Dn OR Dn, <ea>Байт, слово, двойное словоN, Z, V, С Логическое ИЛИ ORIORI #data, <ea>Байт, слово, двойное словоN, Z, V, С Логическое ИЛИ с константой ORI to CRRORI #data, CRRБайтX, N, Z, V, С Логическое ИЛИ константы и младшего байта регистра состояния процессора REAPEA <ea>Двойное слово Вычисление адреса операнда и сохранение его ROLROL Dx, Dy ROL #data, Dy ROL <ea>Байт, слава, двойное словоN, Z, V, C Вращение операнда влево на указанное число разрядов. При вращении влево старший разряд копируется в флаг С и в младший разряд RORROR Dx, Dy ROR #data, Dy ROR <ea>Байт, слава, двойное словоN, Z, V, C Вращение операнда вправо на указанное числа разрядов. При вращении вправо младший разряд, копируется в флаг С и в старший разряд ROXLROXL Dx, Dy ROXL #data, Dy ROXL <ea>Байт, слава, двойное словоX, N, Z, V, C Вращение операнда влево на указанное число разрядов через флаг X. При вращении старший разряд копируется в флаги С и X, а флаг X -в младший разряд ROXRROXR Dx, Dy ROXR #data, Dy ROXR <ea>Байт, слава, двойное словоX, N, Z, V, C Вращение операнда вправо на указанное число разрядов через флаг X. При вращении младший разряд копируется в флаги С и X, а флаг X -в старший разряд RTRRTR X, N, Z, V, C Возврат из подпрограммы с восстановлением регистра состояния. Сначала из стека извлекается 16-разрядное число, передаваемое в регистр состояния процессора, а затем - адрес возврата, по которому передается управление RTSRTS
Возврат из подпрограммы. Адрес возврата извлекается из стека SBCDSBCD Dx, Dy SBCD -(Ax), - (Ay)БайтX, N, Z, V, C Вычитание в двоично-десятичном коде с учетам флага X Dx - Dx - Dy - X SccScc <ea>Байт Если указанное в команде условие истинно, по заданному адресу записывается FFh, если ложно - 0 SUBSUB <ea>, Dn SUB Dn, <ea>Байт, слава, двойное словаX, N, Z, V, C Вычитание двоичных чисел SUBASUBA <ea>Славо, двойное слово Вычитание адресов SUBISUBI #data, <ea>Байт, слово, двойное словоX, N, Z, V, C Вычитание константы SUBQSUBQ #data, <ea>Байт, слово, двойное словоX, N, Z, V, C Быстрое вычитание константы. Константа мажет быть числом от 1 до 8 SUBXSUBX Dx, Dy SUBX-(Ax),-(Ay)Байт, слово, двойное словоX, N, Z, V, C Вычитание двоичных чисел с учетом флага X SWAPSWAP DnСлавоN, Z, V, C Перестановка младшего и старшего слав в 32-разрядном регистре TASTAS <ea>БайтN, Z, V, C Флаги N и Z устанавливаются в соответствии со значением операнда. Разряд D7 операнда становится равен 1 TRAPTRAP #data
Генерация программного исключения с указанным номером TRAPVTRAPV
Генерация исключения, если флаг V равен 1 TSTTST <ea>Байт, слово, двойное славоN, Z, V, C Установка флагов N и Z в соответствии со значением операнда UNLKUNLK 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 ; Пересылка слова.
407 Прочтений • [Система команд центрального процессора М68000 игровой приставки SEGA MEGA DRIVE] [19.05.2012] [Комментариев: 0]