Есть программа дизассемблер. Каким образом организовать скролл вверх. Точнее как определить количество байт в команде идущей сверху??
Вид для печати
Есть программа дизассемблер. Каким образом организовать скролл вверх. Точнее как определить количество байт в команде идущей сверху??
Imho: никак.Цитата:
Сообщение от Strunov
Да не, как-то можно. Надо проверить назад байт этак, например, 10 - предыдущий байт проверить на 1-байтную команду, перед ним - на 2-байтную, ещё перед ним - на 3-байтную. Последняя совпавшая и будет предыдущей командой.Цитата:
Сообщение от valker
Простейший способ- шагнуть назад на некоторое количество байт (~4) и попробовать дизассемблировать (сиречь определить длину команды). Если между концом этой дизассемблированной команды и началом текущей строки нет промежутка, то считаем, что получили адрес. Иначе- пытаемся дизассемблировать на байт дальше.
Но этот способ неточный (имхо используется в STS).
Самый точный способ состоит в дизассемблировании нескольких команд назад. Также шагаем назад на некоторое число байт (~16) и пытаемся дизассемблить несколько команд пока не достигнем исходной (без перехлестов и пропусков). Иначе- шагаем вперед на байт. Такое юзается в US.
Если программа немодифицируется (в ПЗУ лежит или еще что) и дизасм на мощной машине делается, то можно просто составить битовую карту команд и просто бегать по ней.
Уточню, в общем случае - никак. Шагаем на 1 байт назад - там команда - но не факт, что это именно она (возможно часть данных), шагаем на 2 байта назад - там команда с 1 байтным параметром (или 2-х байтовая команда), шагаем на 3 байта назад - там команда с 2 байтным параметром или 3-х байтовая команда. Автоматически решить какая же из 3-х правильная без анализа хода выполнения программы невозможно. Анализ может быть затруднён (например переходами по вычисляемым адресам, когда данные для вычислений становятся известны только на этапе работы программы).Цитата:
Сообщение от valker
максимальная длинна команды в z80 4 байта
вот от этого и считай -
тест -4 = 4 байтная команда?
если нет то тест -3 = 3 байтная команда?
и тд
Не-а...Цитата:
Сообщение от jerri
Не забывай про дублирование/чередование префиксов индексных регистров
dd fd dd fd ты про эти? они стекуются и учитывается только последний
а если dd cb или dd ed то там все равно команды в сумме 4 байта
я трассировщик писал у меня не было команд длинее 4 байт
ну или назови такую команду :)
С какой целью интересуешься, если не секрет?Цитата:
Сообщение от Strunov
Именно про это. Стыкуются, учитывается последний, но все равно длина команды состоит из суммы ВСЕХ префиксов. И только в таких случаях, во всех остальных как раз 4 байта..Цитата:
Сообщение от jerri