-
- Это уже давным-давно реализовано, начиная чуть ли не с Z80. Вся проблема только в том, что Bill(61 знак., 22.10.2013 09:50)
- в том же Z80 команды с повторениями считывают сами себя после каждой операции. именно поэтому люди умудрялись делать их аналоги работающие значительно быстрее. ну так нафига такая команда?? - Mahagam(22.10.2013 09:55)
- Гораздо быстрее? Интересно, каким образом? - Bill(22.10.2013 10:05)
- на спектруме каким только кодом не пытались оптимизировать переброску данных в экранной памяти. да, расход кода шёл громадный. а были бы LDIR/LDDR пооптимальнее, то никто бы таким гемором и не заморачивался. - Mahagam(22.10.2013 11:45)
- Так у Z80 как раз такие команды и были. Или нет? - Bill(22.10.2013 11:48)
- какие такие? LDIR/LDDR был. но где требовалась скорость - ими не пользовались. - Mahagam(22.10.2013 11:49)
- Хм... неужели пересылка блока одной командой требовала больше времени, чем последовательность нескольких команд? В чем был секрет? - Bill(22.10.2013 11:57)
- да. причин было много. команда была с префиксом, считывала себя каждый раз повторно, тратила такты на внутренние вычисления, работала с одним байтом за раз. реализации со стеком вида Mahagam(200 знак., 22.10.2013 12:08)
- Понятно, прием мне известный. - Bill(22.10.2013 12:22)
- Ещё POP <все регистры>; PUSH <все регистры> и так в цикле (только SP переставляли). Тоже 21 такт на 2 байта (плюс расходы на LD SP, xxx, но данные можно хранить как есть, а не в виде команд LD HL, xxxx). - fk0(22.10.2013 12:04, ссылка)
- 16 тактов у LDI и 21 такт у LDIR. Архитектура простейшая. Там легко просчитывается на что идут такты. - POV(22.10.2013 12:04)
- да. причин было много. команда была с префиксом, считывала себя каждый раз повторно, тратила такты на внутренние вычисления, работала с одним байтом за раз. реализации со стеком вида Mahagam(200 знак., 22.10.2013 12:08)
- Хм... неужели пересылка блока одной командой требовала больше времени, чем последовательность нескольких команд? В чем был секрет? - Bill(22.10.2013 11:57)
- какие такие? LDIR/LDDR был. но где требовалась скорость - ими не пользовались. - Mahagam(22.10.2013 11:49)
- Так у Z80 как раз такие команды и были. Или нет? - Bill(22.10.2013 11:48)
- на спектруме каким только кодом не пытались оптимизировать переброску данных в экранной памяти. да, расход кода шёл громадный. а были бы LDIR/LDDR пооптимальнее, то никто бы таким гемором и не заморачивался. - Mahagam(22.10.2013 11:45)
- LDIR -- 21 такт на байт, 2 байта команда. "LDI; JP PO, $-2" -- 16+10=26 тактов на байт, 5 байт комад. Нет смысла? В x86 есть префикс REP для того. И ведь инструкции могут не перечитываться каждый раз, а перечитываться только после прерывания... - fk0(22.10.2013 10:02)
- "Аналоги" требовали килобайтов кода вместо трёх (!!!) байт на циклическую команду. А значительно - это 16 тактов на байт вместо 21. - POV(22.10.2013 09:56 - 10:00)
- "LD HL,#xxxx; PUSH HL" -- 10+11 == 21 такт. Но уже 2 байта за раз. Итого 10.5 тактов на байт. - fk0(22.10.2013 10:07)
- И так конечно использовали. Но памяти жрет много. Компромисс - LDI. - POV(22.10.2013 10:15)
- "LD HL,#xxxx; PUSH HL" -- 10+11 == 21 такт. Но уже 2 байта за раз. Итого 10.5 тактов на байт. - fk0(22.10.2013 10:07)
- Гораздо быстрее? Интересно, каким образом? - Bill(22.10.2013 10:05)
- в том же Z80 команды с повторениями считывают сами себя после каждой операции. именно поэтому люди умудрялись делать их аналоги работающие значительно быстрее. ну так нафига такая команда?? - Mahagam(22.10.2013 09:55)
- Это уже давным-давно реализовано, начиная чуть ли не с Z80. Вся проблема только в том, что Bill(61 знак., 22.10.2013 09:50)