Вход
Наше всё
Теги
codebook
PARTS
Поиск
Опросы
Закон
Вторник
20 апреля
О смысле всего сущего
0xFF
Средства и методы разработки
Мобильная и беспроводная связь
Блошиный рынок
Объявления
Микроконтроллеры
ARM, RISC-V
AVR
PIC
PLD, FPGA, DSP
Кибернетика
Технологии
Схемы, платы, компоненты
Средства и методы разработки
/456050
Топик полностью
Mahagam
(22.10.2013 09:55, просмотров: 148)
в ответ на
Это уже давным-давно реализовано, начиная чуть ли не с Z80. Вся проблема только в том, что
- автор:
Bill
в том же Z80 команды с повторениями считывают сами себя после каждой операции. именно поэтому люди умудрялись делать их аналоги работающие значительно быстрее. ну так нафига такая команда??
Ответить
Ответы
Гораздо быстрее? Интересно, каким образом?
-
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
)
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
)