Пишем (скролл влево):
Этот фрагмент обрабатывает 12 байт. Растактовка:Код:LD SP,nn ;10
POP HL ;10
POP DE ;10
POP BC ;10
RL H ;8
RL L ;8
RL D ;8
RL E ;8
RL B ;8
RL C ;8
EXX ;4
POP HL;10
POP DE ;10
POP BC ;10
RL H ;8
RL L ;8
RL D ;8
RL E ;8
RL B ;8
RL C ;8
EXX ;4
EX AF,AF' ;4
RL H ;8
RL L ;8
RL D ;8
RL E ;8
RL B ;8
RL C ;8
EXX ;4
RL H ;8
RL L ;8
RL D ;8
RL E ;8
RL B ;8
RL C ;8
EX AF,AF' ;4
PUSH BC ;11
PUSH DE ;11
PUSH HL ;11
EXX ;4
PUSH BC ;11
PUSH DE ;11
PUSH HL ;11
На POP - 6*10 = 60 тактов
На PUSH - 6*11 = 66 тактов
На LD SP - 10 тактов
На EXX - 4*4 = 16 тактов
На EX AF,AF' - 2*4 = 8 тактов
На RL - 12*2*8 = 192 такта
Всего 352 такта
На каждый байт - 29 + 1/3 тактов в среднем.
Хоть 4 команды EXX сжирают 16 тактов, а одна LD SP - 10 тактов - то кажется, что без EXX будет быстрее. Однако, если делать блоками по 6 байт без EXX - то будет:
POP - 3*10 = 30
PUSH - 3*11 = 33
LD SP - 10
EX AF,AF' - 8
RL - 6*2*8 = 96
Всего - 177
На каждый байт - 29.5 тактов в среднем. Чуть больше.
Причина в том, что при обработке блоками по 12 байт встречается в 2 раза меньше команд EX AF,AF' в среднем. То есть с EXX потеря 6 тактов на EXX, однако выигрыш 8 тактов на EX AF,AF'. В конечном счете выигрыш в 2 такта.