DISCASM148¶
DISCASM148 (Cawas Disassembler for i80148) - дизассемблер, который превращает бинарник .bin или Logisim hex .hex обратно в исходник .asm.
| Параметр | Значение |
|---|---|
| Версия | 0.1 |
| Целевая архитектура | i80148 (32-бит, flat) |
| Порядок байтов | Big Endian |
| Вход | .bin, .hex |
| Выход | .asm |
| Файл | DISCASM148.py |
Использование¶
| Опция | Описание |
|---|---|
--org addr |
Базовый адрес (для генерации меток), по умолчанию 0x00000000 |
-o file |
Выходной .asm. Без -o результат печатается в stdout |
Как это работает¶
Дизассемблер выполняет линейный проход по бинарнику и использует эвристики:
- Ищет инструкции - начиная с текущего байта пытается декодировать валидную инструкцию i80148.
- Собирает метки - все цели
JMP,JMA,CALLстановятся меткамиL_XXXXXXXX. - Определяет данные:
- Блок нулей ≥ 16 байт →
.db 0x00, .... - Печатаемая ASCII-строка ≥ 4 символов →
.db "..."(с, 0, если следом идёт\0). - Невалидный байт → одиночный
.db 0xXX. - Разрешает конфликты - если инструкция перекрывается со строкой/нулями, оба фрагмента сливаются в блок сырых байт.
Формат вывода¶
| Что | Формат |
|---|---|
| Метки | L_XXXXXXXX (абсолютный адрес в uppercase hex) |
| Строки | .db "..." с escape \n \r \t \0 \\ \" |
| Нули | .db 0x00, ... блоками по 8 байт |
| Сырые байты | .db 0xXX, ... блоками по 8 байт |
Вывод всегда начинается с .text.
Пример¶
$ python DISCASM148.py program.hex --org 0x00060000 -o program.asm
Loaded 256 bytes from program.hex
Written: program.asm
Labels found: 4
Пример выходного фрагмента: