Дизассемблер Yozh
Moderator: Shaos
-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Дизассемблер Yozh
дизассемблер выводит мнемонику согласно таблице кодов. эта команда не документирована, о чём говорит подсказка, тем не менее, в железе процессором она исполняется именно так, как написано и, соответственно, следующий код будет выбран тот, который соответствует длине этой недокументированной инструкции, так что тут ещё вопрос, чей дизассемблер кривой.
но если так уж смущают недокументированные инструкции, которые специально помечены, чтобы обратить на себя внимание, то вы всегда можете код по этим адресам пометить как данные и вывод листинга будет приятен вашему глазу.
но если так уж смущают недокументированные инструкции, которые специально помечены, чтобы обратить на себя внимание, то вы всегда можете код по этим адресам пометить как данные и вывод листинга будет приятен вашему глазу.
-
- Maniac
- Posts: 324
- Joined: 14 Oct 2023 06:59
Re: Дизассемблер Yozh
А где такие сведения о недокументированных командах? Вообще-то меня смущают недокументированные инструкции, с ними одна головная боль.vital72 wrote:дизассемблер выводит мнемонику согласно таблице кодов. эта команда не документирована, о чём говорит подсказка, тем не менее, в железе процессором она исполняется именно так, как написано и, соответственно, следующий код будет выбран тот, который соответствует длине этой недокументированной инструкции, так что тут ещё вопрос, чей дизассемблер кривой.
но если так уж смущают недокументированные инструкции, которые специально помечены, чтобы обратить на себя внимание, то вы всегда можете код по этим адресам пометить как данные и вывод листинга будет приятен вашему глазу.
-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Дизассемблер Yozh
вообще-то, это не является каким-то секретом, информация легко гуглится.
в журнале Радио 87г. печаталась цветная таблица мнемоник проца 8080, где недокументированные команды были помечены серым цветом.
процессор Z80 имеет большую кучу недокументированных команд для работы с битами, не думаю, что их не использовали, такие полезные вещи не могут остаться без внимания, так что головой боли тут нет.
процессор 8085 имеет 12 дополнительных команд, по сравнению с 8080, но только две из них документированы, а команды эти могут упростить программисту жизнь.
в журнале Радио 87г. печаталась цветная таблица мнемоник проца 8080, где недокументированные команды были помечены серым цветом.
процессор Z80 имеет большую кучу недокументированных команд для работы с битами, не думаю, что их не использовали, такие полезные вещи не могут остаться без внимания, так что головой боли тут нет.
процессор 8085 имеет 12 дополнительных команд, по сравнению с 8080, но только две из них документированы, а команды эти могут упростить программисту жизнь.
Last edited by vital72 on 29 Feb 2024 11:14, edited 1 time in total.
-
- Maniac
- Posts: 324
- Joined: 14 Oct 2023 06:59
Re: Дизассемблер Yozh
у меня какое-то невезение с Радио 86рк - мало что находится. В описании опкодов 8080 находил команды с прочерками.vital72 wrote:вообще-то, это не является каким-то секретом, информация легко гуглится.
Спасибо за разъяснение, учту.
КР580ВМ80А (как и прототип 8080) имеет 12 недокументированных команд. Опкоды #08, #10, #18, #20, #28, #30, #38 являются аналогами операции NOP; опкод #CB является аналогом JMP; опкоды #DD, #ED, #FD являются аналогами CALL; опкод #D9 является аналогом RET.
-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Дизассемблер Yozh
таблички из ж. Радио
You do not have the required permissions to view the files attached to this post.
-
- Maniac
- Posts: 324
- Joined: 14 Oct 2023 06:59
Re: Дизассемблер Yozh
дизассемблер REZ с сырками под cp/m:
http://www.retroarchive.org/cpm/cdrom/S ... 00/VOL010/
http://www.retroarchive.org/cpm/cdrom/S ... 00/VOL010/
-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Дизассемблер Yozh
обнаружился небольшой баг в моём коде дизассма, связанный с проверкой границ блока.
например, если ввести директиву "YF800,FFFF" или "Y1,", то ничего выводиться не будет, хотя директива D с такими параметрами отрабатывает. ошибка связана с нечёткой проверкой границ блока.
простое решение, которое у меня получилось на данный момент -- это:
1. вначале цикла дизассма по метке disassm убрать код
Code: Select all
inx d
call CMP_DE_HL
jnc MONITOR_PROMPT
Code: Select all
jmp disassm + 1
Code: Select all
dcx h
call CMP_DE_HL
inx h
jc disassm
jmp MONITOR_PROMPT
Last edited by vital72 on 01 Mar 2024 06:43, edited 1 time in total.
-
- Doomed
- Posts: 347
- Joined: 14 Oct 2019 18:10
- Location: Tashkent
Re: Дизассемблер Yozh
В своём варианте я тоже с этим сталкивался и решил тупо: Три раза проверяю границы на ZF со сдвигом на единицу.vital72 wrote:это решит проблему с параметрами "YF800,FFFF", но по-прежнему не решит "Y1,", т.е. будет необходимо всегда задавать конечный адрес блока.

Громоздко, но помогло.

-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Дизассемблер Yozh
тоже думал так сделать, но не хотел раздувать код
-----
всё фигня -- давай по новой.
всё равно налажал, типичная ошибка на единицу. исправил предыдущий пост.
-----
всё фигня -- давай по новой.
всё равно налажал, типичная ошибка на единицу. исправил предыдущий пост.
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Дизассемблер Yozh
А если просто проверять, что текущий адрес (подготовленный для следующего цикла) переехал через конечный?
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Дизассемблер Yozh
неправильно прочитал сообщение.
другой ответ: проверка "переехал" -- это и есть проверка на меньше, такое исправление и предложено, единственно, это не сработает, когда конечный адрес не задан (равен нулю)
другой ответ: проверка "переехал" -- это и есть проверка на меньше, такое исправление и предложено, единственно, это не сработает, когда конечный адрес не задан (равен нулю)
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Дизассемблер Yozh
ну ноль это тоже адрес 

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Дизассемблер Yozh
ну вот когда конечный адрес блока равен нулю, а начальный нет -- ничего выводиться не будет, а если оба по нулям, только одна инструкция выведется. думаю, это приемлемое решение минимумом кода. была проблема, когда конечный адрес был FFFF, сейчас, вроде, я её вылечил, но это не точно 

-
- Senior
- Posts: 181
- Joined: 17 Jun 2014 04:29
- Location: 93.80.157.217
Re: Дизассемблер Yozh
ради интереса замерил время, за сколько продизассеблирует дизассемблер всю память 0000-FFFF.
у меня получилось 41 минута.
условия, при которых выполнялась программа, были следующие:
-- частота процессора 3МГц;
-- стандартная авторская подпрограмма вывода текста;
-- сразу после запуска была нажата кнопка, чтобы изменить внутреннее состояние клавиатуры на "есть символ для чтения", это придаёт скорости к выводу.
самое узкое место здесь -- это авторская подпрограмма вывода. мало того, что она сама по себе медленная, так какого-то чёрта в ней ещё делается опрос клавиатуры, убивающий скорость напрочь. по итогу скорее была измерена скорость вывода, чем скорость дизассемблеривания.
на скорость дизассемблеривания влияют команды, которые попадаются по дороге. самые быстрые -- это команды NOP и аналогичные. у меня в памяти были какие то куски кода, нулей было немного, особенно учитывая, что половина памяти -- это адреса портов, там вообще нулей не бывает.
для своего проекта я полностью переписал весь Монитор и моя подпрограмма вывода в разы шустрее авторской.
у меня получилось 41 минута.
условия, при которых выполнялась программа, были следующие:
-- частота процессора 3МГц;
-- стандартная авторская подпрограмма вывода текста;
-- сразу после запуска была нажата кнопка, чтобы изменить внутреннее состояние клавиатуры на "есть символ для чтения", это придаёт скорости к выводу.
самое узкое место здесь -- это авторская подпрограмма вывода. мало того, что она сама по себе медленная, так какого-то чёрта в ней ещё делается опрос клавиатуры, убивающий скорость напрочь. по итогу скорее была измерена скорость вывода, чем скорость дизассемблеривания.
на скорость дизассемблеривания влияют команды, которые попадаются по дороге. самые быстрые -- это команды NOP и аналогичные. у меня в памяти были какие то куски кода, нулей было немного, особенно учитывая, что половина памяти -- это адреса портов, там вообще нулей не бывает.
для своего проекта я полностью переписал весь Монитор и моя подпрограмма вывода в разы шустрее авторской.
-
- Admin
- Posts: 24008
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Дизассемблер Yozh
Медленновато как-то
Я тут за главного - если что шлите мыло на me собака shaos точка net