Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Программирование (http://zx-pk.ru/forumdisplay.php?f=14)
-   -   Новый дизассемблер для ZX (http://zx-pk.ru/showthread.php?t=4841)

Strunov 26th February 2007 10:59

Новый дизассемблер для ZX
 
Есть программа дизассемблер. Каким образом организовать скролл вверх. Точнее как определить количество байт в команде идущей сверху??

valker 26th February 2007 11:15

Quote:

Originally Posted by Strunov
Есть программа дизассемблер. Каким образом организовать скролл вверх. Точнее как определить количество байт в команде идущей сверху??

Imho: никак.

SAM style 26th February 2007 11:22

Quote:

Originally Posted by valker
Imho: никак.

Да не, как-то можно. Надо проверить назад байт этак, например, 10 - предыдущий байт проверить на 1-байтную команду, перед ним - на 2-байтную, ещё перед ним - на 3-байтную. Последняя совпавшая и будет предыдущей командой.

Vitamin 26th February 2007 11:23

Простейший способ- шагнуть назад на некоторое количество байт (~4) и попробовать дизассемблировать (сиречь определить длину команды). Если между концом этой дизассемблированной команды и началом текущей строки нет промежутка, то считаем, что получили адрес. Иначе- пытаемся дизассемблировать на байт дальше.
Но этот способ неточный (имхо используется в STS).
Самый точный способ состоит в дизассемблировании нескольких команд назад. Также шагаем назад на некоторое число байт (~16) и пытаемся дизассемблить несколько команд пока не достигнем исходной (без перехлестов и пропусков). Иначе- шагаем вперед на байт. Такое юзается в US.
Если программа немодифицируется (в ПЗУ лежит или еще что) и дизасм на мощной машине делается, то можно просто составить битовую карту команд и просто бегать по ней.

valker 26th February 2007 11:36

Quote:

Originally Posted by valker
Imho: никак.

Уточню, в общем случае - никак. Шагаем на 1 байт назад - там команда - но не факт, что это именно она (возможно часть данных), шагаем на 2 байта назад - там команда с 1 байтным параметром (или 2-х байтовая команда), шагаем на 3 байта назад - там команда с 2 байтным параметром или 3-х байтовая команда. Автоматически решить какая же из 3-х правильная без анализа хода выполнения программы невозможно. Анализ может быть затруднён (например переходами по вычисляемым адресам, когда данные для вычислений становятся известны только на этапе работы программы).

jerri 26th February 2007 13:10

максимальная длинна команды в z80 4 байта
вот от этого и считай -

тест -4 = 4 байтная команда?
если нет то тест -3 = 3 байтная команда?

и тд

Vitamin 26th February 2007 14:28

Quote:

Originally Posted by jerri
максимальная длинна команды в z80 4 байта

Не-а...
Не забывай про дублирование/чередование префиксов индексных регистров

jerri 27th February 2007 02:54

dd fd dd fd ты про эти? они стекуются и учитывается только последний

а если dd cb или dd ed то там все равно команды в сумме 4 байта
я трассировщик писал у меня не было команд длинее 4 байт

ну или назови такую команду :)

Jukov 27th February 2007 09:36

Quote:

Originally Posted by Strunov
Есть программа дизассемблер. Каким образом организовать скролл вверх. Точнее как определить количество байт в команде идущей сверху??

С какой целью интересуешься, если не секрет?

Vitamin 27th February 2007 10:22

Quote:

Originally Posted by jerri
dd fd dd fd ты про эти? они стекуются и учитывается только последний

а если dd cb или dd ed то там все равно команды в сумме 4 байта
я трассировщик писал у меня не было команд длинее 4 байт

ну или назови такую команду

Именно про это. Стыкуются, учитывается последний, но все равно длина команды состоит из суммы ВСЕХ префиксов. И только в таких случаях, во всех остальных как раз 4 байта..


All times are GMT +4. The time now is 14:30.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.