С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Мне бы твои проблемы, я после привыкания к современным реалиям (в 99% случаев приходится писать не быстрый код, а расширяемый и легкоподдерживаемый, независимо от сис-требований) вообще почти уже разучился считать такты и байты. Стараюсь по привычке писать "как лучше" и только потом когда ничего не работает, уже вспоминаю что на Z80 нету "стопицот" гигов и гигагерц
Разрабатываю новый сетевой протокол
Variable Length Advanced Data Sending Over Network
Что он будет делать и зачем нужен не знаю, разработал пока только название.
Sergey, так в среднем ещё быстрей выходит:
26/41 тактовКод:LD A,H ; 4 XOR D ; 4 LD A,H ; 4 RLA ; 4 JP M,CHD ; 10 SBC HL,DE ; 15 CHD
Всё, вилы!
33/37 т.Код:LD A,H ; 4 XOR D ; 4 JP P,CHD ; 10 EX DE,HL ; 4 CHD SBC HL,DE ; 15
P.S. Это надо-же, всю ночь мучатся...
Как работает - разбирайся сам, я спать наконец-то
Последний раз редактировалось Destr; 10.02.2015 в 08:14.
Вставлю и свою версию (для разнообразия).
Оформленна как подпрограмма.
Недостатки: более медленная, большая, сложно переделать в inline.
Достоинства: не портятся HL, DE. Возможно творчески переделать в inline, так что скорость увеличится. (Сейчас, когда она как подпрограмма, то содержит много условных переходов для подготовки флага C. Inline эти переходы можно использовать непосредственно)
Вероятности p посчитаны при равномерном распределении аргументов (-32768..32767). Чем меньше диапазон значений аргументов будет на самом деле, тем выше будет вероятность последнего выхода в 36 тактов.Код:LD A,H ;4 SUB D ;4 JP Z,HiEQ ;10 CCF ;4 (=22) RET PE ;5 (exit 33 p=0.25) JP P,Els_ ;10 SCF ;4 RET ;10 (exit 51 p=0.373) Els_: XOR A ;4 RET ;10 (exit 51 p=0.373) HiEQ: LD A,L ;4 CP E ;4 RET ;10 (exit 36 p=0.004)
[свернуть]
Аттач - тесты
, чтобы убедится, что все процедуры работают одинаково. Все 5 версий, которые я нашёл в этой теме. Файл - ассемблер EMUZWin.
Сам я убедился.
(Хм. А вдруг они все работают одинаково неправильно? )
Там два режима, 0 - полный перебор значений, сначала меняются старшие байты. 1 - берутся псевдослучайные 256 байт из ПЗУ, и тесты проходят только с ними.[свернуть]
Последний раз редактировалось Sergey; 10.02.2015 в 16:23.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)