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> Точнее как определить количество байт в команде идущей сверху??

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




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Интервью - Знакоство с рыбинской группой Infosoft Group.
Фидо - Дятел.
Вступление - Новая оболочка оказалась чрезвычайно неудобной.
Вступление - Газета видоизменилась...
От авторов - авторы журнала.

В этот день...   29 марта