Требуется помощь Гуру..

ZXNet эхоконференция «code.zx»

От Alexandr Sinyakov Кому All 26.02.2007

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

От Yuri Potapov Кому All 26.02.2007

Hello, valker максимальная длинна команды в z80 4 байта вот от этого и считай - тест -4 = 4 байтная команда? если нет то тест -3 = 3 байтная команда? и тд

От valker Кому All 26.02.2007

Hello, Strunov Str> Есть программа дизассемблер. Каким образом организовать скролл вверх. Str> Точнее как определить количество байт в команде идущей сверху?? Imho; никак.;

От valker Кому All 26.02.2007

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

От Виталий Гаврилов Кому All 26.02.2007

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

От Вячеслав Струнов Кому All 26.02.2007

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

От Виталий Гаврилов Кому All 26.02.2007

Hello, jerri jer> максимальная длинна команды в z80 4 байта Hе-а... Hе забывай про дублирование/чередование префиксов индексных регистров

От Yuri Potapov Кому All 27.02.2007

Hello, Vitamin dd fd dd fd ты про эти? они стекуются и учитывается только последний а если dd cb или dd ed то там все равно команды в сумме 4 байта я трассировщик писал у меня не было команд длинее 4 байт ну или назови такую команду :)

От Alexandr Sinyakov Кому All 27.02.2007

Hello, Strunov проверять назад только 4 байта - это мало. Пример... ld de,#FD00 ld hl,#FFFF (x) если проверять назад от точки (х) - на 4 байта назад будет LD IY,#FFFF ИМХО, дизасм с отступом назад байт в 16 - самое то.

От SMT Кому All 27.02.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.02.2007

Hello, SMT Кстати о птичках. Есть ли хоть один дизасм, который корректно декодирует команды калькулятора?

От Виталий Гаврилов Кому All 27.02.2007

Hello, jerri jer> dd fd dd fd ты про эти? они стекуются и учитывается только последний jer> jer> а если dd cb или dd ed то там все равно команды в сумме 4 байта jer> я трассировщик писал у меня не было команд длинее 4 байт jer> jer> ну или назови такую команду Именно про это. Стыкуются, учитывается последний, но все равно длина команды состоит из суммы ВСЕХ префиксов. И только в таких случаях, во всех остальных как раз 4 байта..

От Вячеслав Струнов Кому All 27.02.2007

Hello, Jukov Juk> С какой целью интересуешься, если не секрет? Дизассемблер хочу написать..

От Константин Жуков Кому All 27.02.2007

Hello, Strunov Str> Есть программа дизассемблер. Каким образом организовать скролл вверх. Str> Точнее как определить количество байт в команде идущей сверху?? С какой целью интересуешься, если не секрет?