|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Ну тогда скорее так: правда в реальном коде там ещё проверка на ноль была, а тут придётся сравнивать с 40h - один байт сэкономили потом один байт потеряли - то на то и выходит: по скорости получается так: xra a заменили на mvi a,2 - 4 против 7 ana a заменили на cpi 40h - 4 против 7 ну и выкинули adi 40h - 7 против 0 выходит 15 тактов против 14 - на 1 такт быстрее однако если разбирать побуквенно, как я на прошлой странице думал и как Alikberov предложил, то будет сильно быстрее, но несколько жырнее по коду...
|
13 Feb 2024 05:59 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 327 Location: Tashkent
|
У меня, кстати, старший бит тоже имеет свою функцию как флаг подавления операндов: В i8080 большинство инструкций имеет операнды и, у меня в частности, распаковка мнемоники завершает не RET'ом, а условным RET'ом с проверкой флага для вывода операндов и добавления четвёртой буквы (staX/ldaX/shlD/lhlD) автоматом.
|
13 Feb 2024 06:07 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
провёл небольшую оптимизацию версии 1.8 по примеру версии 1.9.2 -- удалось скинуть ещё 14 байт, теперь версия 1.8.1 весит 752 байта, вместо 766. в процессе оптимизации обнаружилось, что в погоне за байтами в версии 1.9.2 была допущена ошибка -- коды 80-BF отображались неправильно, выкладываю исправленную версию -- 1.9.3
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
Last edited by vital72 on 13 Feb 2024 08:49, edited 1 time in total.
|
13 Feb 2024 06:51 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
| | | | Shaos wrote: Вот скажем если бы они были упакованы в другом порядке - не так: а скажем так: то первая буква вытаскивалась бы таким образом: а третья буква таким: но вот со второй буквой есть сложности... | | | | |
Можно перепаковать так, чтобы первая и вторая буквы вытаскивались легко, а третья была бы порезана: тогда младшие 3 бита третьей буквы (сдвинутые в старшие биты первого байта) можно брать так: а старшие 2 бита буквы (сдвинутые в младшие биты второго байта) так: и то, и другое занимает 24 такта - вместе 48, а три dad h с последующими mov a,h и ani 1Fh займут 42 такта (или mvi a,1Fh и ana h - 41), что чуть быстрее - видимо Alikberov-ский вариант таки самый быстрый (там надо лишь переставить местами вычитку букв и вставить проверку третьей буквы на ноль с покиданием подпрограммы, чтобы не печатать @)
|
13 Feb 2024 06:55 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
тут я смотрю ещё коды мнемоник переставлены: diff | | | | Code: $diff disassm.v1.8.asm disassm.v1.8.1.asm 9,10c9,10 < ; Version: 1.8 < ; Date: 10.02.24 --- > ; Version: 1.8.1 > ; Date: 13.02.24 45,54c45,54 < MNEMO_HLT EQU 23 < MNEMO_NOP EQU 24 < MNEMO_CMC EQU 25 < MNEMO_STC EQU 26 < MNEMO_CMA EQU 27 < MNEMO_DAA EQU 28 < MNEMO_INR EQU 29 < MNEMO_DCR EQU 30 < MNEMO_INX EQU 31 < MNEMO_DCX EQU 32 --- > MNEMO_NOP EQU 23 > MNEMO_CMC EQU 24 > MNEMO_STC EQU 25 > MNEMO_CMA EQU 26 > MNEMO_DAA EQU 27 > MNEMO_INR EQU 28 > MNEMO_DCR EQU 29 > MNEMO_INX EQU 30 > MNEMO_DCX EQU 31 > MNEMO_HLT EQU 32 140,141c140,141 < db @1 < db (@2 << 3) | @3 --- > db %%1 > db (%%2 << 3) | %%3 145c145 < dw ((@1 + 0) & 1Fh << 11) | ((@2 + 0) & 1Fh << 6) | ((@3 + 0) & 1Fh << 1) | @4 --- > dw ((%%1 + 0) & 1Fh << 11) | ((%%2 + 0) & 1Fh << 6) | ((%%3 + 0) & 1Fh << 1) | %%4 149c149 < disassm_str @1, @2, @3, 1 --- > disassm_str %%1, %%2, %%3, 1 153c153 < disassm_str @1, @2, @3, 0 --- > disassm_str %%1, %%2, %%3, 0 157c157 < disassm_str @1, @2, 0, 0 --- > disassm_str %%1, %%2, 0, 0 189d188 < ani 00111000b 192a192 > ani 00000111b 217c217 < lxi d, DISASSM_BUFFER + 2 --- > mvi e, (DISASSM_BUFFER + 2) & 0FFh 222c222 < lxi d, DISASSM_BUFFER + 10 --- > mvi e, (DISASSM_BUFFER + 10) & 0FFh 363a364,365 > mvi b, MNEMO_HLT > lxi d, disassm_op_none 365,367c367 < jz disassm_hndlr_hlt < adi 40h < jm disassm_hndlr_mov --- > jz disassm_lbl1 368a369,372 > inr b > mvi e, disassm_op_r8_r8 & 0FFh > cpi 0C0h > jc disassm_lbl1 375,387c379 < lxi d, disassm_op_r8 < jmp disassm_lbl1 < < disassm_hndlr_hlt: < mvi b, MNEMO_HLT < lxi d, disassm_op_none < jmp disassm_lbl1 < < disassm_hndlr_mov: < ani 00111111b < mov c, a < mvi b, MNEMO_MOV < lxi d, disassm_op_r8_r8 --- > mvi e, disassm_op_r8 & 0FFh 548d539 < disassm_str3 'H', 'L', 'T' ; HLT 557a549 > disassm_str3 'H', 'L', 'T' ; HLT 634c626 < --- > ; end of file
| | | | |
|
13 Feb 2024 07:01 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
точно! всё ради экономии байт, так сделано, чтобы вместо: стало:
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
|
13 Feb 2024 07:06 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 327 Location: Tashkent
|
Кстати, в 2016 я в рамках своего эмулятора вот здесь (нажмите F4 после полной загрузки) применил трюк с DAD (в цикле здесь) для вывода директивы целиком (при нажатии D выводится DUMP).
Last edited by Alikberov on 13 Feb 2024 10:41, edited 1 time in total.
|
13 Feb 2024 09:40 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
А это в каком месте? Я чего-то в диффах такого не вижу. Вот это чтоли? было:
|
13 Feb 2024 10:16 |
|
|
vital72
Senior
Joined: 17 Jun 2014 04:29 Posts: 138 Location: 93.80.157.217
|
метка disassm_hndlr_40_BFбыло: стало:
_________________https://radio-86rk.ruкто я такой, чтобы спорить с самим собой
|
13 Feb 2024 10:29 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Вроде понял P.S. Я хочу условную компиляцию сделать ключом ONLY8080 например. Для этого надо увести 8085 мнемоники на края таблицы - четырёхбуквенные в начало и 2-3 буквенные в конец (я там по ходу звёздочки уже расставил, чтобы было видно что надо уводить) - тогда можно условно их отрезать и программно корректировать смещение по таблице сжатых мнемоник с учётом отрезанного и для 8080 оно будет писать на пропущенные места DB с кодом - вобщем как-то так...
|
13 Feb 2024 10:35 |
|
|
Alikberov
Maniac
Joined: 14 Oct 2019 18:10 Posts: 327 Location: Tashkent
|
Смотрю тут, Вы - макросами балуетесь! У меня - жесть: Всякий раз, при добавлении очередной инструкции, приходится здорово мозгами проскрипеть!
|
13 Feb 2024 14:06 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
yozh0004.asm на основе v1.8.1 от vital72 (обработано напильником до совместимости с pdp11asm85): Размер кода 758-6 = 752 байта Ща попробую сделать условную компиляцию для отрезания инструкций 8085
|
15 Feb 2024 00:48 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Вот то же самое дизасемблировано урезанным до инструкций 8080 дизассемблером (в непонятных местах он ставит DB xx): Размер получившегося кода - 731 байт, что на 21 байт меньше полновесного варианта (8085 и 8080 варианты собираются из одного и того же исходника с помощью отсутствия или наличия ключика ONLY8080 соответственно, что даёт бины с размерами 752+6 и 731+6, где 6 байт эта задавание HL и DE для тесту). Щас допишу батничек, чтобы собирал 2 варианта и выложу архив... вот:
|
15 Feb 2024 22:08 |
|
|
Mondx
Doomed
Joined: 10 Aug 2022 07:27 Posts: 364
|
Тут прям сорева по дизасму. Типа, у кого блинк короче, на Ардуино.) Так тогда может и для z80 нашрайбаете? А то у меня недокументированные копы не реализованы.)
|
15 Feb 2024 23:11 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Не - Z80 это как-нибудь сам
|
16 Feb 2024 00:45 |
|
|
Who is online |
Users browsing this forum: No registered users and 4 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
|
|