|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
я сделяль! 1021 байт. используются грязные хаки -- строки disassm_reg8_8085 и disassm_reg16_8085 не должны пересекать 256-байтовую границу, но это не является проблемой. если в коде они попали на границу -- всегда можно перенести в другое место. в исходнике я предусмотрел проверку на пересечение, используя директиву условия, но не в каждом компиляторе есть такие директивы, если нет, просто можно удалить из исходника проверку, а проверку осуществлять глазками. на rk86.ru очень уж примитивный ассемблер, там не соберется. я приаттачу скомпилированный RK-файл, чтобы его можно было загрузить на rk86.ru, код дизассма располагается с адреса 7000H, для вызова необходимо в регистры HL и DE загрузить адреса начала и конца блока соответственно и перейти по адресу 7000H. для теста загрузите disassm.rk и просто наберите в Мониторе: также я добавил файл i8080.bin.rk для проверки дизассемблирования всех инструкций, включая инструкции 8085, он загружается по адресу 1000H. чтобы его дизассемблировать надо в HL загрузить 1000H, в DE 1163H
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
Last edited by vital72 on 08 Feb 2024 15:03, edited 1 time in total.
|
08 Feb 2024 13:57 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22591 Location: Silicon Valley
|
Крут Для простых ассемблеров можно взять обработанный напильником вариантВечерком взгляну на последние варианты и тоже обработаю Ну компактнее уже вряд ли получится
|
08 Feb 2024 13:59 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
перезалил архив с исходником. по коду ничего не поменялось абсолютно, изменил только именование макросов и некоторых меток.
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
|
08 Feb 2024 15:04 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
дашоштакое. тока зарелизю новую версию, как нахожу ещё возможность сократить код. щас получилось 1011
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
|
08 Feb 2024 15:13 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
999
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
|
08 Feb 2024 15:47 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22591 Location: Silicon Valley
|
Хммм, а скорость не пострадала?…
|
08 Feb 2024 16:28 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
нет, скорее наоборот. множество джампов убрано, код удачно стыкуется друг с другом, как пазл.
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
|
08 Feb 2024 16:38 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22591 Location: Silicon Valley
|
Ну тогда наверное в ущерб скорости ещё можно размер ужать? Можно сделать условную компиляцию - чтобы собирала типа самый быстрый вариант и с другим ключом самый компактный А ещё будет самый жырный вариант от меня - с "объяснялками" P.S. Смотрю последние варианты - я в своих экспериментах над первой версией кода по похожему пути пошёл P.P.S. Это последний вариант или ещё будешь чего подчищать? Я могу под pdp11asm85 опять напильником обработать чтобы без макросов стало P.P.P.S. А вот это никак нельзя упростить? Вроде как лишние 16 байт т.к один и тот же адрес повторяется 8 раз: | | | | Code: disassm_op: dw disassm_op_none, disassm_op_r8, disassm_op_r16, disassm_op_im8 dw disassm_op_im16, disassm_op_r8_im8, disassm_op_r16_im16, disassm_op_n dw disassm_op_b_r8, disassm_op_c_r8, disassm_op_d_r8, disassm_op_e_r8 dw disassm_op_h_r8, disassm_op_l_r8, disassm_op_m_r8, disassm_op_a_r8 ... disassm_op_b_r8: disassm_op_c_r8: disassm_op_d_r8: disassm_op_e_r8: disassm_op_h_r8: disassm_op_l_r8: disassm_op_m_r8: disassm_op_a_r8: mov a, c rrc rrc rrc rrc call disassm_op_r8 ...
| | | | |
типа вот тут проверить, что если код операнда 8,9,10,11,12,13,14 или 15, то сделать его 8 и укоротить табличку disassm_op на 14 байт: что вместе с увеличением кода на 7 байт приведёт к экономии в 7 байт, что уже даст 992 байта вместо 999 Подумал было, что можно поправить коды чтобы не потребовалось вставки лишней проверки, что сэкономит ещё 7 байт, однако потом увидел по программе, что этот же код потом нужен для вытаскивания имени регистра, ну значит проверка необходима, что возвращает нас обратно к 992
|
08 Feb 2024 22:00 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
а ты говоришь, меньше не получицца, а оказывается там ещё много чего можно повыкидывать. как ещё ужать, даже в ущерб скорости, пока не представляю. почистил, соптимизировал, добавил проверку CTRL+C, нашёл один недочёт -- дизассемблировал блок на 1 байт меньше. 989 байт
ПЫСЫ: "disassm_disassm" не сразу заметил
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
Last edited by vital72 on 09 Feb 2024 00:30, edited 4 times in total.
|
09 Feb 2024 00:00 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22591 Location: Silicon Valley
|
Нет предела совершенству
|
09 Feb 2024 00:05 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 863
|
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
09 Feb 2024 00:50 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
b2m, о, круто! но я там ещё упростил одновременно с требованием не пересекать границу 256 байт. ---- немного причесал код, удалил константы LET_A, LET_B и т.д., вместо них использую обычные литеры 'A', 'B', ... для повышения читабельности. это потребовало изменение макроса disassm_str, я так планировал сделать изначально, но НЕ мой компилятор упорно не хотел выполнять битовые операции над литерами, но арифметические операции выполняет! от этого макрос выглядит немного некузяво. ещё раз убеждаюсь, что надо писать свой компилятор. ---- немного статистики и описание внутренностей, для тех кто заинтересуется. -- таблица disassm_table_8085 занимает 512 байт и содержит описание каждой процессорной команды, два байта на команду: биты 6..0 первого байта содержат индекс текстового представления команды. бит 7 не используется, можно использовать на своё усмотрение. биты 7..4 второго байта содержат описание операндов команды, всего 16 значений. биты 2..0 второго байта могут содержать дополнительный аргумент операндов. бит 3 не используется, можно использовать на своё усмотрение. -- таблица disassm_str_8085 занимает 89 * 2 = 178 байт и содержит сжатое текстовое представление команды, по 16 бит на команду, это позволяет кодировать только 2-х и 3-х буквенные команды, для 4-х буквенных команд используется дополнительно таблица disassm_str_8085_let4. биты 15..11 -- первая буква команды. биты 10..6 -- вторая буква команды. биты 5..1 -- третья буква команды. бит 0 -- признак 4-х буквенной команды. таблица disassm_str_8085_let4 занимает 19 байт и содержит последнюю букву 4-х буквенной команды. для быстрого доступа к этой таблице все 4-х буквенные команды располагаются вначале таблицы disassm_str_8085 (и соответственно имеют минимальные индексы). -- таблица disassm_reg8_8085 занимает 8 байт и содержит текстовое представление восьми 8-разрядных регистров. -- таблица disassm_reg16_8085 занимает 10 байт и содержит сжатое представление 16-разрядных регистров.
итого, все таблицы занимают 512 + 178 + 19 + 8 + 10 = 727 байт.
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
|
09 Feb 2024 01:59 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
удалось добиться размера в 975 байт, но там пошло уже совсем ненормальное погромирование: старшие байты не учитываются, необходимо выполнить требование на непересечение 256-байтной границы. ннннадо?
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
|
09 Feb 2024 09:03 |
|
|
imsushka
Senior
Joined: 01 Jan 2022 04:34 Posts: 172 Location: USSR, Tashkent
|
горшочек, не вари
|
09 Feb 2024 10:17 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22591 Location: Silicon Valley
|
Давай Главное все промежуточные версии иметь чтобы если что откатиться
|
09 Feb 2024 11:34 |
|
|
Who is online |
Users browsing this forum: Hammer and 58 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
|
|