ZXNet эхоконференция «code.zx»
тема: Требуется помощь Гуру..
от: Alexandr Sinyakov
кому: All
дата: 26 Feb 2007
Hello, valker
val> Imho; никак.;
Да не, как-то можно. Hадо проверить назад байт этак, например, 10 - предыдущий
байт проверить на 1-байтную команду, перед ним - на 2-байтную, ещё перед ним -
на 3-байтную. Последняя совпавшая и будет предыдущей командой.
от: Yuri Potapov
кому: All
дата: 26 Feb 2007
Hello, valker
максимальная длинна команды в z80 4 байта
вот от этого и считай -
тест -4 = 4 байтная команда?
если нет то тест -3 = 3 байтная команда?
и тд
от: valker
кому: All
дата: 26 Feb 2007
Hello, Strunov
Str> Есть программа дизассемблер. Каким образом организовать скролл вверх.
Str> Точнее как определить количество байт в команде идущей сверху??
Imho; никак.;
от: valker
кому: All
дата: 26 Feb 2007
Hello, valker
val> Imho; никак.;
Уточню, в общем случае - никак. Шагаем на 1 байт назад - там команда - но не
факт, что это именно она (возможно часть данных), шагаем на 2 байта назад - там
команда с 1 байтным параметром (или 2-х байтовая команда), шагаем на 3 байта
назад - там команда с 2 байтным параметром или 3-х байтовая команда.
Автоматически решить какая же из 3-х правильная без анализа хода выполнения
программы невозможно. Анализ может быть затруднён (например переходами по
вычисляемым адресам, когда данные для вычислений становятся известны только на
этапе работы программы).
от: Виталий Гаврилов
кому: All
дата: 26 Feb 2007
Hello, valker
Простейший способ- шагнуть назад на некоторое количество байт (~4) и
попробовать дизассемблировать (сиречь определить длину команды). Если между
концом этой дизассемблированной команды и началом текущей строки нет
промежутка, то считаем, что получили адрес. Иначе- пытаемся дизассемблировать
на байт дальше.
Hо этот способ неточный (имхо используется в STS).
Самый точный способ состоит в дизассемблировании нескольких команд назад. Также
шагаем назад на некоторое число байт (~16) и пытаемся дизассемблить несколько
команд пока не достигнем исходной (без перехлестов и пропусков). Иначе- шагаем
вперед на байт. Такое юзается в US.
Если программа немодифицируется (в ПЗУ лежит или еще что) и дизасм на мощной
машине делается, то можно просто составить битовую карту команд и просто бегать
по ней.
от: Вячеслав Струнов
кому: All
дата: 26 Feb 2007
Hello, All
Есть программа дизассемблер. Каким образом организовать скролл вверх. Точнее
как определить количество байт в команде идущей сверху??
от: Виталий Гаврилов
кому: All
дата: 26 Feb 2007
Hello, jerri
jer> максимальная длинна команды в z80 4 байта
Hе-а...
Hе забывай про дублирование/чередование префиксов индексных регистров
от: Yuri Potapov
кому: All
дата: 27 Feb 2007
Hello, Vitamin
dd fd dd fd ты про эти? они стекуются и учитывается только последний
а если dd cb или dd ed то там все равно команды в сумме 4 байта
я трассировщик писал у меня не было команд длинее 4 байт
ну или назови такую команду :)
от: Alexandr Sinyakov
кому: All
дата: 27 Feb 2007
Hello, Strunov
проверять назад только 4 байта - это мало. Пример...
ld de,#FD00
ld hl,#FFFF
(x)
если проверять назад от точки (х) - на 4 байта назад будет LD IY,#FFFF
ИМХО, дизасм с отступом назад байт в 16 - самое то.
от: SMT
кому: All
дата: 27 Feb 2007
Hello, Strunov
в общем случае нельзя. например, данные перед курсором 21 21 21 3E FF
можно дизасмить как
┌─- code ───
some_byte db 21
my_procedure ld hl,#3E21
rst #38
cursor;
└──; code ───
или как
┌─- code ───
my_procedure ld hl,#2121
ld a,#FF
cursor;
└──; code ───
зависит от того, будет ли когда-либо передано управление первому байту в
цепочке или второму
от: Виталий Гаврилов
кому: All
дата: 27 Feb 2007
Hello, SMT
Кстати о птичках. Есть ли хоть один дизасм, который корректно декодирует
команды калькулятора?
от: Виталий Гаврилов
кому: All
дата: 27 Feb 2007
Hello, jerri
jer> dd fd dd fd ты про эти? они стекуются и учитывается только последний
jer>
jer> а если dd cb или dd ed то там все равно команды в сумме 4 байта
jer> я трассировщик писал у меня не было команд длинее 4 байт
jer>
jer> ну или назови такую команду
Именно про это. Стыкуются, учитывается последний, но все равно длина команды
состоит из суммы ВСЕХ префиксов. И только в таких случаях, во всех остальных
как раз 4 байта..
от: Вячеслав Струнов
кому: All
дата: 27 Feb 2007
Hello, Jukov
Juk> С какой целью интересуешься, если не секрет?
Дизассемблер хочу написать..
от: Константин Жуков
кому: All
дата: 27 Feb 2007
Hello, Strunov
Str> Есть программа дизассемблер. Каким образом организовать скролл вверх.
Str> Точнее как определить количество байт в команде идущей сверху??
С какой целью интересуешься, если не секрет?
|