Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Сб Мар 29, 2008 8:33 pm Заголовок сообщения: Вопрос по M68K асму |
|
|
Скажите, как отличить такую команду: 0x8104
Это OR.b D0,D4 или SBCD D4,D0 ? |
|
Вернуться к началу |
|
|
Ghost
Зарегистрирован: 24.04.2004 Сообщения: 237
|
Добавлено: Сб Мар 29, 2008 10:20 pm Заголовок сообщения: |
|
|
Нашёл, в чём дело. Для OR по OPMODE выходит:
D0 V <ea> -> <ea>
А для <ea> написано:
Цитата: | If the location specified is a destination operand, only memory alterable addressing modes can be used as listed in the following tables: |
и отсутствует Destination Mode = 000 (регистр).
Так что всё просчитано. _________________ Мысль - это интеллектуальный эксцесс данного индивидуума. |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Сб Мар 29, 2008 10:26 pm Заголовок сообщения: |
|
|
Ghost - спаситель. А меня после вопроса IfOrAnD'а конкретно заклинило.
Код: | OR:
-----------------------------------------------------------------
|15 |14 |13 |12 |11 |10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|-----------|-----------|-----------|-----------|
| 1 | 0 | 0 | 0 | REGISTER | OP-MODE | MODE | REGISTER |
----------------------------------------=========================
<ea>
SBCD:
-----------------------------------------------------------------
|15 |14 |13 |12 |11 |10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|-----------|---|---|---|---|---|---|-----------|
| 1 | 0 | 0 | 0 |Ry REGISTER| 1 | 0 | 0 | 0 | 0 |R/M|Rx REGISTER|
-----------------------------------------------------------------
|
Вот интересно, как это "исключение из правил" реализуется на уровне самого процессора (с эмуляцией-то понятно). |
|
Вернуться к началу |
|
|
Ghost
Зарегистрирован: 24.04.2004 Сообщения: 237
|
Добавлено: Сб Мар 29, 2008 10:35 pm Заголовок сообщения: |
|
|
Как-как, схемотехнически. Хотя, если верить Таненбауму, у 68k есть МПУ, т.е. интерпретатор команд 68k, грубо говоря, процессор внутри процессора, очень примитвный.
Я понял, почему так сделано: если бы для Destination <ea> был разрешён Mode = 000, получилось бы:
dx V dy -> dx
dx V dy -> dy
А так как OR - операция коммутативная, получилось бы дублирование команд. Один режим можно убрать.
Для EXG тоже если OPMODE = 10001, т.е. обмен между адресным и датарегистром, в одном поле всегда регистр данных, в другом - адреса. Таким образом, используется 192 (3 режима * 8 * 8 регистров) различные комбинации регистров, а не 256 (16 * 16 регистров). _________________ Мысль - это интеллектуальный эксцесс данного индивидуума. |
|
Вернуться к началу |
|
|
HardWareMan
Зарегистрирован: 01.09.2005 Сообщения: 116
|
Добавлено: Вс Мар 30, 2008 6:41 am Заголовок сообщения: |
|
|
Угу, все просто, главное - внимание. У М68К много команд, которые похожи. Например:
Код: |
---------------------------------------------------------------------------
ADDA | 1 | 1 | 0 | 1 | An| An| An| Om| Om| 1 | EAm| EAm| EAm| EAr| EAr| EAr
---------------------------------------------------------------------------
|
И кажется, что она пересикается с ADDX и ADD, но Om (OpMode) имеет всего 2 валидные комбинации из 4, да и для ADDX валидны только если EA - Rn или An. Так что все продумано.
Всегда смотрите ограничения на команды для EА! Там много т.н. "запарок", но на самом деле все пучком.
Последний раз редактировалось: HardWareMan (Вс Апр 06, 2008 2:47 pm), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Вс Мар 30, 2008 9:18 pm Заголовок сообщения: |
|
|
Гы, реально, не заметил. ) Третья страница, как-то, мимо глаз пролетела. )
Ладно, спасибо.
И ещё вопрос: Команда MOVEM - сколько не перечитывал, но паламетр <list> я так и не вкурил. Э-э.... Можно объяснить как он состовляется? |
|
Вернуться к началу |
|
|
Ghost
Зарегистрирован: 24.04.2004 Сообщения: 237
|
Добавлено: Вс Мар 30, 2008 10:18 pm Заголовок сообщения: |
|
|
А чего непонятного-то? После КОПа ты пишешь слово, биты которого указывают, какие регистры надо двигать. В самом конце описания MOVEM указано для обоих режимов, какому биту какой регистр соответствует. Порядок движения регистров тоже описан: d0-d7, a0-a7. _________________ Мысль - это интеллектуальный эксцесс данного индивидуума. |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Пн Мар 31, 2008 3:47 pm Заголовок сообщения: |
|
|
Понял. Спасибо. |
|
Вернуться к началу |
|
|
HardWareMan
Зарегистрирован: 01.09.2005 Сообщения: 116
|
Добавлено: Ср Апр 02, 2008 3:59 pm Заголовок сообщения: |
|
|
Ghost писал(а): | А чего непонятного-то? После КОПа ты пишешь слово, биты которого указывают, какие регистры надо двигать. В самом конце описания MOVEM указано для обоих режимов, какому биту какой регистр соответствует. Порядок движения регистров тоже описан: d0-d7, a0-a7. |
Угу, но я бы назвал это RegMask. И будь внимателен: порядок регистров в маске команды MOVEM зависит от направления. Т.е. он будет взаимообратен для команд MOVEM.n RegList,An и MOVE.n An,RegList. В доке все описано. Например, я очень часто использую следующую конструкцию:
Код: |
VBlank: dc.w $48E7,$FFFE *MOVEM.L D0-D7/A0-A6,-(A7) - cохранение регистров
* Делаем свое дело
. dc.w $4CDF,$7FFF *MOVEM.L (A7)+,D0-D7/A0-A6 - восстановление регистров
. rte *Возврат в программу |
К сожалению не все ассемблеры поддерживают команду MOVEM корректно, а некоторые вообще не поддерживают. Так что я пишу классическим методом. |
|
Вернуться к началу |
|
|
IfoR
Зарегистрирован: 16.05.2006 Сообщения: 334
|
Добавлено: Ср Апр 02, 2008 6:34 pm Заголовок сообщения: |
|
|
Если ко мне, то я понял, просто немного неврубился в синтаксис. Я думал, что там идёт типа того: 01000010 00000000 |
|
Вернуться к началу |
|
|
|