дизассемблер выводит мнемонику согласно таблице кодов. эта команда не документирована, о чём говорит подсказка, тем не менее, в железе процессором она исполняется именно так, как написано и, соответственно, следующий код будет выбран тот, который соответствует длине этой недокументированной инструкции, так что тут ещё вопрос, чей дизассемблер кривой. но если так уж смущают недокументированные инструкции, которые специально помечены, чтобы обратить на себя внимание, то вы всегда можете код по этим адресам пометить как данные и вывод листинга будет приятен вашему глазу.
дизассемблер выводит мнемонику согласно таблице кодов. эта команда не документирована, о чём говорит подсказка, тем не менее, в железе процессором она исполняется именно так, как написано и, соответственно, следующий код будет выбран тот, который соответствует длине этой недокументированной инструкции, так что тут ещё вопрос, чей дизассемблер кривой. но если так уж смущают недокументированные инструкции, которые специально помечены, чтобы обратить на себя внимание, то вы всегда можете код по этим адресам пометить как данные и вывод листинга будет приятен вашему глазу.
А где такие сведения о недокументированных командах? Вообще-то меня смущают недокументированные инструкции, с ними одна головная боль.
_________________ uselessretro.blogspot.com
29 Feb 2024 08:55
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 139 Location: 93.80.157.217
вообще-то, это не является каким-то секретом, информация легко гуглится. в журнале Радио 87г. печаталась цветная таблица мнемоник проца 8080, где недокументированные команды были помечены серым цветом.
процессор Z80 имеет большую кучу недокументированных команд для работы с битами, не думаю, что их не использовали, такие полезные вещи не могут остаться без внимания, так что головой боли тут нет.
процессор 8085 имеет 12 дополнительных команд, по сравнению с 8080, но только две из них документированы, а команды эти могут упростить программисту жизнь.
вообще-то, это не является каким-то секретом, информация легко гуглится.
у меня какое-то невезение с Радио 86рк - мало что находится. В описании опкодов 8080 находил команды с прочерками.
Спасибо за разъяснение, учту.
Quote:
КР580ВМ80А (как и прототип 8080) имеет 12 недокументированных команд. Опкоды #08, #10, #18, #20, #28, #30, #38 являются аналогами операции NOP; опкод #CB является аналогом JMP; опкоды #DD, #ED, #FD являются аналогами CALL; опкод #D9 является аналогом RET.
_________________ uselessretro.blogspot.com
29 Feb 2024 09:12
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 139 Location: 93.80.157.217
обнаружился небольшой баг в моём коде дизассма, связанный с проверкой границ блока. например, если ввести директиву "YF800,FFFF" или "Y1,", то ничего выводиться не будет, хотя директива D с такими параметрами отрабатывает. ошибка связана с нечёткой проверкой границ блока. простое решение, которое у меня получилось на данный момент -- это: 1. вначале цикла дизассма по метке disassm убрать код
Code:
inx d call CMP_DE_HL jnc MONITOR_PROMPT
2. в конце цикла вместо кода
Code:
jmp disassm + 1
поместить код
Code:
dcx h call CMP_DE_HL inx h jc disassm jmp MONITOR_PROMPT
это решит проблему с параметрами "YF800,FFFF", но по-прежнему не решит "Y1,", т.е. будет необходимо всегда задавать конечный адрес блока.
тоже думал так сделать, но не хотел раздувать код ----- всё фигня -- давай по новой. всё равно налажал, типичная ошибка на единицу. исправил предыдущий пост.
неправильно прочитал сообщение. другой ответ: проверка "переехал" -- это и есть проверка на меньше, такое исправление и предложено, единственно, это не сработает, когда конечный адрес не задан (равен нулю)
ну вот когда конечный адрес блока равен нулю, а начальный нет -- ничего выводиться не будет, а если оба по нулям, только одна инструкция выведется. думаю, это приемлемое решение минимумом кода. была проблема, когда конечный адрес был FFFF, сейчас, вроде, я её вылечил, но это не точно
ради интереса замерил время, за сколько продизассеблирует дизассемблер всю память 0000-FFFF. у меня получилось 41 минута. условия, при которых выполнялась программа, были следующие: -- частота процессора 3МГц; -- стандартная авторская подпрограмма вывода текста; -- сразу после запуска была нажата кнопка, чтобы изменить внутреннее состояние клавиатуры на "есть символ для чтения", это придаёт скорости к выводу. самое узкое место здесь -- это авторская подпрограмма вывода. мало того, что она сама по себе медленная, так какого-то чёрта в ней ещё делается опрос клавиатуры, убивающий скорость напрочь. по итогу скорее была измерена скорость вывода, чем скорость дизассемблеривания. на скорость дизассемблеривания влияют команды, которые попадаются по дороге. самые быстрые -- это команды NOP и аналогичные. у меня в памяти были какие то куски кода, нулей было немного, особенно учитывая, что половина памяти -- это адреса портов, там вообще нулей не бывает. для своего проекта я полностью переписал весь Монитор и моя подпрограмма вывода в разы шустрее авторской.
Users browsing this forum: No registered users and 8 guests
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum