6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
|
|
1 | |
Доработка дизассемблера 8080A15.12.2019, 02:29. Показов 5635. Ответов 29
Метки нет (Все метки)
Доработка дизассемблера для Intel i8080A(КР580ВМ80А) c https://codeload.github.com/Ba... zip/master
введен режим сохранения в файл и опция отображения байтов данных в листинге
0
|
15.12.2019, 02:29 | |
Ответы с готовыми решениями:
29
добрался до дизассемблера - как считать такты? Поиск дизассемблера Защита от дизассемблера Исходники дизассемблера Защита программы от дизассемблера и отладчика |
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
|
|||||||||||
15.12.2019, 03:44 [ТС] | 3 | ||||||||||
Пишут , что они не такие (особенно на несколько байт , уточнить ). Это недокументированные возможности ( в некоторых прошивках на Радио 86РК встречаются).
Добавлено через 20 секунд Предусмотреть варианты. Добавлено через 11 минут Правильно ли это утверждение для КР580ВМ80А ?
В DevC++ с расширением .c компилируется, с .cpp и в борландовском с таким же проблемы с указателями и типами данных . Добавлено через 5 минут 0xed , 0xfd, 0xdd , 0xcb- трехбайтные ? 0xd9 использует возврат (однобайтная ). Это плохо документированные в некоторых даташитах данные . Добавлено через 9 минут
0
|
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
|
||||||||||||||||
15.12.2019, 06:16 [ТС] | 5 | |||||||||||||||
Для I8085 как совместимого по некоторым кодам с i8080a , эти сведения ,например , такие
https://github.com/libretro/ma... /i8085.cpp
глючит начальный адрес , обнулять счетчик байтов, можно
0
|
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
|
||||||
15.12.2019, 09:47 [ТС] | 6 | |||||
Я бы поменял поинтерный "механизм" ввода имени и байтов на более внятный и устойчивый к типам данных в C++. Добавлено через 12 минут Интеллектуальное распознавание сегмента данных пока не поддерживается. Добавлено через 1 час 50 минут Программа авторасстановки меток (в стиле "Label_addr_%x%x:" ) по данным для команд , способных вызывать подпрограмму с некоторого адреса пока не имплементована . Вариант , совместимый с некторыми синтаксисами для эмуляторов КР580ВМ80А (там проблема с org 0x0800 вместо 0x0000 ) еще дорабатывается. Добавлено через 1 час 26 минут Для некоторых команд исправить мнемоники .
0
|
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
|
||||||
15.12.2019, 11:57 [ТС] | 7 | |||||
0
|
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
|
|
15.12.2019, 22:13 [ТС] | 9 |
Возможна редакция выходного под pretty-8080-assembler (из интернета ) для проверки работоспособности (перед hex -числами 0x , org 0 в начале , пример самого ассемблера для интернет-эксплорера и edge- explorer в аттаче )
https://github.com/svofski/pretty-8080-assembler
0
|
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
|
|
16.12.2019, 05:18 [ТС] | 11 |
Некоторые команды и их длина при наличии в тексте сегментов с данными иногда неправильно распознаются , использовать ручной выбор , доработать программу, проверить на отсутствие багов в командах и их длине (особенно недокументированных команд ) , добавить обработку по сегментом, вводя начальный адрес и прибавляя его с счетчику байтов , обрабатывая по частям (встроив в редактор с метками сегментов данных и т.д. ).
Добавлено через 41 секунду Ассемблер пока еще лучше посмотреть в интернете, "погуглить" . Добавлено через 2 часа 41 минуту Для pretty-8080-assembler при сохранении 8-битного . com файла для эмулятора переименовать его в .bin и испытывать нашим файлом на дизассемблирование . Сам 8-битный нестандартный .com-файл не открывать (с 16-битной...-64 битной x86- архитектурой он не совместим, а открывается только внутри виртуальной машины).
0
|
27 / 22 / 5
Регистрация: 31.01.2019
Сообщений: 98
|
|
18.12.2019, 07:34 | 13 |
Сейчас попробую
0
|
27 / 22 / 5
Регистрация: 31.01.2019
Сообщений: 98
|
|
18.12.2019, 07:51 | 14 |
Не дружественный интерфейс.
Не понял как через командную строку задать параметры. Исходный файл нужен с расширением только .bin Выпала в ошибку при указании начального адреса 0x4000 (вписывал 4000).
0
|
27 / 22 / 5
Регистрация: 31.01.2019
Сообщений: 98
|
|
18.12.2019, 07:51 | 15 |
Не дружественный интерфейс.
Не понял как через командную строку задать параметры. Исходный файл нужен с расширением только .bin Выпала в ошибку при указании начального адреса 0x4000 (вписывал 4000).
0
|
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
|
|
19.12.2019, 01:18 [ТС] | 16 |
Адрес здесь задается с начала файла , если файл .bin порезан на части с сегментами данных , результат пишется в файл (нулевому адресу от начала .bin- файла прибавляется начальный адрес , обработка заканчивается при окончании файла, последние команды , если в файле они неполноценны (например , для трехбайтной не хватило двух байтов операндов , когда они остались в другом файле, например следующего ПЗУ ) могут обрабатываться с проблемами ). Интерфейс временный, скорее для тестирования программы парсера опкодов.
Начало файла, подразумеваемого тогда начинающимся с адреса 0x4000 , (c а не 0000) Код
F3 31 FF 4F C3 60 00 00 7B 02 03 7A 02 C3 27 13 4E 23 46 23 C5 C3 2B 13 00 00 00 00 00 00 00 00 C3 64 08 00 00 00 00 00 32 08 80 FB C3 B0 30 00 32 0C 80 FB C3 3C 00 00 32 0C 80 FB C5 D5 E5 F5 3A 1A 80 E6 3F 32 1A 80 32 E0 C0 AF 32 AB 41 3A 2E 40 E6 F9 32 2E 40 CD E2 21 F1 E1 D1 C1 C9 00 CD 28 07 CD 3D 20 CD 00 05 CD 3A 05 CD E2 05 CD E8 06 CD 69 1F CD E2 21 FB 21 93 01 0E 0E 3A 00 40 BE CA 8F 00 23 23 23 0D C2 81 00 C3 78 00 23 5E 23 56 EB 01 78 00 C5 E9 CD 50 03 CD 69 03 21 4A 40 11 97 41 CD E2 01 01 92 41 CD B3 1A 11 8D 44 21 4D 43 0E 03 CD A3 20 21 50 40 11 97 41 CD E2 01 01 92 41 CD B3 1A 11 8D 44 21 50 43 0E 03 CD A3 20 CD 05 02 C9 CD C0 01 CD 69 03 3A 00 40 E6 DF 32 00 40 C9 CD 69 03 3A 1A 80 E6 02 CA 00 01 CD 00 30 32 40 C0 CD 26 30 CD 11 30 32 60 C0 Код
.org 4000 Addr_4000: di ; 0xf3 ; Disable interrupts Код
.org 0000 Addr_0000: di ; 0xf3 ; Disable interrupts Addr_0001: lxi SP, 0x4fff ; 0x31 0xff 0x4f ; Addr_0004: jmp 0x0060 ; 0xc3 0x60 0x00 ; Addr_xxxx Jump Addr_0007: nop ; 0x00 ; no operate Addr_0008: mov a, e ; 0x7b ; (A)<-(E) Addr_0009: stax b ; 0x02 ; (A )->Loc(BC) Addr_000a: inx b ; 0x03 ; (BC)++ Addr_000b: mov a, d ; 0x7a ; (A)<-(D) Addr_000c: stax b ; 0x02 ; (A )->Loc(BC) Addr_000d: jmp 0x1327 ; 0xc3 0x27 0x13 ; Addr_xxxx Jump Addr_0010: mov b, m ; 0x4e ; (C)<-MemLoc(HL) Addr_0011: inx h ; 0x23 ; (HL)++ Addr_0012: mov b, m ; 0x46 ; (B)<-MemLoc(HL) Addr_0013: inx h ; 0x23 ; (HL)++ Addr_0014: push b ; 0xc5 ; Push register Pair B & C on stack Addr_0015: jmp 0x132b ; 0xc3 0x2b 0x13 ; Addr_xxxx Jump ... Addr_1320: dcr m ; 0x35 ; Loc(HL)-- Addr_1321: inr b ; 0x04 ; (B)++ Addr_1322: nop ; 0x00 ; no operate Addr_1323: mov b, b ; 0x40 ; (B)<-(B) Addr_1324: sbb h ; 0x9c ; (A) -(H)-(Carry)->(A) Addr_1325: adc m ; 0x8e ; A<-MemLoc(HL) + (A) + CY //ошибка в режиме 0 Addr_1326: mvi b, 0x03 ; 0x06 0x03; (B)<-data8 Addr_1328: mov a, h ; 0x7c ; (A)<-(H) Addr_1329: stax b ; 0x02 ; (A )->Loc(BC) Addr_132a: ret ; 0xc9 ; Код
.project test.bin .tape v06c-rom bdos equ 5 intv equ 38h .org 100h jmp begin db 27 msg: db 'Assembled by Pretty 8080 Assembler',0dh,0ah,'$' yeah: ; large binary strings can be defined using base64 db64 TG9uZyBiaW5hcnkgaW5pdGlhbGl6YXRpb24gc2VjdGlvbnMgY2FuIGJlIGRlZmluZWQgdXNpbmcgYmFzZTY0LWVuY29kZWQgc3RyaW5ncyENCiQ= begin: lxi d, msg mvi c, 9 call bdos call delay mvi c, 9 lxi d, yeah call bdos ret delay: mvi a, 33 hlt dcr a jnz .-2 ret Код
C3 7C 01 1B 41 73 73 65 6D 62 6C 65 64 20 62 79 20 50 72 65 74 74 79 20 38 30 38 30 20 41 73 73 65 6D 62 6C 65 72 0D 0A 24 4C 6F 6E 67 20 62 69 6E 61 72 79 20 69 6E 69 74 69 61 6C 69 7A 61 74 69 6F 6E 20 73 65 63 74 69 6F 6E 73 20 63 61 6E 20 62 65 20 64 65 66 69 6E 65 64 20 75 73 69 6E 67 20 62 61 73 65 36 34 2D 65 6E 63 6F 64 65 64 20 73 74 72 69 6E 67 73 21 0D 0A 24 11 04 01 0E 09 CD 05 00 CD 90 01 0E 09 11 29 01 CD 05 00 C9 3E 21 76 3D C2 92 01 C9 Код
//db64 там с учетом кодировки Long binary initialization sections can be defined using base64-encoded strings!
0
|
6 / 6 / 0
Регистрация: 29.06.2018
Сообщений: 1,536
|
||||||
19.12.2019, 03:45 [ТС] | 18 | |||||
Результат , если 0x0100, 0 на 0x0100, 1 на 0x0103, 0x104-0x017b , 0 на 0x017c-0x0197
Код
.org 0100 Addr_0100: jmp 0x017c ; 0xc3 0x7c 0x01 ; Addr_xxxx Jump Addr_0103: .db 0x1b ; data byte Addr_0104: .db 0x41 ; data byte Addr_0105: .db 0x73 ; data byte Addr_0106: .db 0x73 ; data byte Addr_0107: .db 0x65 ; data byte Addr_0108: .db 0x6d ; data byte Addr_0109: .db 0x62 ; data byte Addr_010a: .db 0x6c ; data byte Addr_010b: .db 0x65 ; data byte Addr_010c: .db 0x64 ; data byte Addr_010d: .db 0x20 ; data byte Addr_010e: .db 0x62 ; data byte Addr_010f: .db 0x79 ; data byte Addr_0110: .db 0x20 ; data byte Addr_0111: .db 0x50 ; data byte Addr_0112: .db 0x72 ; data byte Addr_0113: .db 0x65 ; data byte Addr_0114: .db 0x74 ; data byte Addr_0115: .db 0x74 ; data byte Addr_0116: .db 0x79 ; data byte Addr_0117: .db 0x20 ; data byte Addr_0118: .db 0x38 ; data byte Addr_0119: .db 0x30 ; data byte Addr_011a: .db 0x38 ; data byte Addr_011b: .db 0x30 ; data byte Addr_011c: .db 0x20 ; data byte Addr_011d: .db 0x41 ; data byte Addr_011e: .db 0x73 ; data byte Addr_011f: .db 0x73 ; data byte Addr_0120: .db 0x65 ; data byte Addr_0121: .db 0x6d ; data byte Addr_0122: .db 0x62 ; data byte Addr_0123: .db 0x6c ; data byte Addr_0124: .db 0x65 ; data byte Addr_0125: .db 0x72 ; data byte Addr_0126: .db 0x0d ; data byte Addr_0127: .db 0x0a ; data byte Addr_0128: .db 0x24 ; data byte Addr_0129: .db 0x4c ; data byte Addr_012a: .db 0x6f ; data byte Addr_012b: .db 0x6e ; data byte Addr_012c: .db 0x67 ; data byte Addr_012d: .db 0x20 ; data byte Addr_012e: .db 0x62 ; data byte Addr_012f: .db 0x69 ; data byte Addr_0130: .db 0x6e ; data byte Addr_0131: .db 0x61 ; data byte Addr_0132: .db 0x72 ; data byte Addr_0133: .db 0x79 ; data byte Addr_0134: .db 0x20 ; data byte Addr_0135: .db 0x69 ; data byte Addr_0136: .db 0x6e ; data byte Addr_0137: .db 0x69 ; data byte Addr_0138: .db 0x74 ; data byte Addr_0139: .db 0x69 ; data byte Addr_013a: .db 0x61 ; data byte Addr_013b: .db 0x6c ; data byte Addr_013c: .db 0x69 ; data byte Addr_013d: .db 0x7a ; data byte Addr_013e: .db 0x61 ; data byte Addr_013f: .db 0x74 ; data byte Addr_0140: .db 0x69 ; data byte Addr_0141: .db 0x6f ; data byte Addr_0142: .db 0x6e ; data byte Addr_0143: .db 0x20 ; data byte Addr_0144: .db 0x73 ; data byte Addr_0145: .db 0x65 ; data byte Addr_0146: .db 0x63 ; data byte Addr_0147: .db 0x74 ; data byte Addr_0148: .db 0x69 ; data byte Addr_0149: .db 0x6f ; data byte Addr_014a: .db 0x6e ; data byte Addr_014b: .db 0x73 ; data byte Addr_014c: .db 0x20 ; data byte Addr_014d: .db 0x63 ; data byte Addr_014e: .db 0x61 ; data byte Addr_014f: .db 0x6e ; data byte Addr_0150: .db 0x20 ; data byte Addr_0151: .db 0x62 ; data byte Addr_0152: .db 0x65 ; data byte Addr_0153: .db 0x20 ; data byte Addr_0154: .db 0x64 ; data byte Addr_0155: .db 0x65 ; data byte Addr_0156: .db 0x66 ; data byte Addr_0157: .db 0x69 ; data byte Addr_0158: .db 0x6e ; data byte Addr_0159: .db 0x65 ; data byte Addr_015a: .db 0x64 ; data byte Addr_015b: .db 0x20 ; data byte Addr_015c: .db 0x75 ; data byte Addr_015d: .db 0x73 ; data byte Addr_015e: .db 0x69 ; data byte Addr_015f: .db 0x6e ; data byte Addr_0160: .db 0x67 ; data byte Addr_0161: .db 0x20 ; data byte Addr_0162: .db 0x62 ; data byte Addr_0163: .db 0x61 ; data byte Addr_0164: .db 0x73 ; data byte Addr_0165: .db 0x65 ; data byte Addr_0166: .db 0x36 ; data byte Addr_0167: .db 0x34 ; data byte Addr_0168: .db 0x2d ; data byte Addr_0169: .db 0x65 ; data byte Addr_016a: .db 0x6e ; data byte Addr_016b: .db 0x63 ; data byte Addr_016c: .db 0x6f ; data byte Addr_016d: .db 0x64 ; data byte Addr_016e: .db 0x65 ; data byte Addr_016f: .db 0x64 ; data byte Addr_0170: .db 0x20 ; data byte Addr_0171: .db 0x73 ; data byte Addr_0172: .db 0x74 ; data byte Addr_0173: .db 0x72 ; data byte Addr_0174: .db 0x69 ; data byte Addr_0175: .db 0x6e ; data byte Addr_0176: .db 0x67 ; data byte Addr_0177: .db 0x73 ; data byte Addr_0178: .db 0x21 ; data byte Addr_0179: .db 0x0d ; data byte Addr_017a: .db 0x0a ; data byte Addr_017b: .db 0x24 ; data byte Addr_017c: lxi d, 0x0104 ; 0x11 0x04 0x01 ; Loc(DE)<-data16 Addr_017f: mvi c, 0x09 ; 0x0e 0x09 ; (C)<-data8 Addr_0181: call 0x0005 ; 0xcd 0x05 0x00 ; call Addr_xxxx Addr_0184: call 0x0190 ; 0xcd 0x90 0x01 ; call Addr_xxxx Addr_0187: mvi c, 0x09 ; 0x0e 0x09 ; (C)<-data8 Addr_0189: lxi d, 0x0129 ; 0x11 0x29 0x01 ; Loc(DE)<-data16 Addr_018c: call 0x0005 ; 0xcd 0x05 0x00 ; call Addr_xxxx Addr_018f: ret ; 0xc9 ; Addr_0190: mvi a, 0x21 ; 0x3e 0x21 ; A<-data8 Addr_0192: hlt ; 0x76 ; halt Addr_0193: dcr a ; 0x3d ; (A)-- Addr_0194: jnz 0x0192 ; 0xc2 0x92 0x01 ; Addr_xxxx Jump on no zero Addr_0197: ret ; 0xc9 ; Следить , какие коды адресов в lxi , call , некоторые другие команды . Код
lxi d, 0x0104 ; 0x11 0x04 0x01 ; Loc(DE)<-data16 //0x0104 указывает на сегмент с данными Проблема, расчленить файл на сегменты, один запустить с Код
bdos equ 5 intv equ 38h Код
.org 100h jmp begin db 27 msg: db 'Assembled by Pretty 8080 Assembler',0dh,0ah,'$' yeah: ; large binary strings can be defined using base64 db64 TG9uZyBiaW5hcnkgaW5pdGlhbGl6YXRpb24gc2VjdGlvbnMgY2FuIGJlIGRlZmluZWQgdXNpbmcgYmFzZTY0LWVuY29kZWQgc3RyaW5ncyENCiQ= begin: lxi d, msg mvi c, 9 call bdos call delay mvi c, 9 lxi d, yeah call bdos ret delay: mvi a, 33 hlt dcr a jnz .-2 ret Код
bdos equ 5 intv equ 38h Код
Addr_0181: call 0x0005 ; 0xcd 0x05 0x00 ; call Addr_xxxx Addr_0184: call 0x0190 ; 0xcd 0x90 0x01 ; call Addr_xxxx Addr_0187: mvi c, 0x09 ; 0x0e 0x09 ; (C)<-data8 Addr_0189: lxi d, 0x0129 ; 0x11 0x29 0x01 ; Loc(DE)<-data16 Addr_018c: call 0x0005 ; 0xcd 0x05 0x00 ; call Addr_xxxx Addr_018f: ret ; 0xc9 ; Addr_0190: mvi a, 0x21 ; 0x3e 0x21 ; A<-data8 Addr_0192: hlt ; 0x76 ; halt Addr_0193: dcr a ; 0x3d ; (A)-- Addr_0194: jnz 0x0192 ; 0xc2 0x92 0x01 ; Addr_xxxx Jump on no zero Addr_0197: ret ; 0xc9 ; Добавлено через 1 минуту Парсер кодов работает, но "интеллектуальности" не хватает . Добавлено через 9 минут В случае с ошибкой для ссылки на адрес Код
.org 0000 Addr_0000: di ; 0xf3 ; Disable interrupts Addr_0001: lxi SP, 0x4fff ; 0x31 0xff 0x4f ; Addr_0004: jmp 0x0060 ; 0xc3 0x60 0x00 ; Addr_xxxx Jump Addr_0007: nop ; 0x00 ; no operate Addr_0008: mov a, e ; 0x7b ; (A)<-(E) Addr_0009: stax b ; 0x02 ; (A )->Loc(BC) Addr_000a: inx b ; 0x03 ; (BC)++ Addr_000b: mov a, d ; 0x7a ; (A)<-(D) Addr_000c: stax b ; 0x02 ; (A )->Loc(BC) Addr_000d: jmp 0x1327 ; 0xc3 0x27 0x13 ; Addr_xxxx Jump Addr_0010: mov b, m ; 0x4e ; (C)<-MemLoc(HL) Addr_0011: inx h ; 0x23 ; (HL)++ Addr_0012: mov b, m ; 0x46 ; (B)<-MemLoc(HL) Addr_0013: inx h ; 0x23 ; (HL)++ Addr_0014: push b ; 0xc5 ; Push register Pair B & C on stack Addr_0015: jmp 0x132b ; 0xc3 0x2b 0x13 ; Addr_xxxx Jump Код
//Addr_1326: 0x06 ошибка счетчика, переписать коды до этого с выборкой , можно файл посегментно с вводом // начального адреса и каждый передизассемблировать //вручную Addr_1327: INX B ; 0x03 по таблице , добавить режим 4 (ручной вывод на экран мнемоник одного кода) Addr_1328: mov a, h ; 0x7c ; (A)<-(H) Addr_1329: stax b ; 0x02 ; (A )->Loc(BC) Addr_132a: ret ; 0xc9 ; C Код
lxi SP, 0x4fff ; Добавлено через 1 минуту К GUI бы приделать с редактором . Добавлено через 1 час 49 минут
0
|
27 / 22 / 5
Регистрация: 31.01.2019
Сообщений: 98
|
|
19.12.2019, 04:22 | 20 |
Чем компилируете?
0
|
19.12.2019, 04:22 | |
19.12.2019, 04:22 | |
Помогаю со студенческими работами здесь
20
код на Си надо сделать результат работы дизассемблера в составе отладчика Доработка БП Доработка БД Доработка Доработка БД Доработка АС Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |