Список форумов shedevr.org.ru shedevr.org.ru
Группа перевода приставочных игр "ШЕДЕВР"
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Вопрос по M68K асму

 
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг
Предыдущая тема :: Следующая тема  
Автор Сообщение
IfoR



Зарегистрирован: 16.05.2006
Сообщения: 334

СообщениеДобавлено: Сб Мар 29, 2008 8:33 pm    Заголовок сообщения: Вопрос по M68K асму Ответить с цитатой

Скажите, как отличить такую команду: 0x8104
Это OR.b D0,D4 или SBCD D4,D0 ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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
RRC2008


Зарегистрирован: 08.11.2003
Сообщения: 2818

СообщениеДобавлено: Сб Мар 29, 2008 10:26 pm    Заголовок сообщения: Ответить с цитатой

Ghost - спаситель. Smile А меня после вопроса 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|
   -----------------------------------------------------------------



Вот интересно, как это "исключение из правил" реализуется на уровне самого процессора (с эмуляцией-то понятно).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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> я так и не вкурил. Э-э.... Можно объяснить как он состовляется?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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    Заголовок сообщения: Ответить с цитатой

Понял. Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов shedevr.org.ru -> Экстремальный ромхакинг Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group