
Сообщение от
KeKc
Поэтому вот с этого момента
поподробнее, если можно.
Допустим, у тебя в [A] исходные данные, а [C] свободен, то выполняем:
Код:
17 RLA // 4 такта
CB 19 RR C // 4+4 такта
17 RLA // 4 такта
CB 19 RR C // 4+4 такта
17 RLA // 4 такта
CB 19 RR C // 4+4 такта
17 RLA // 4 такта
CB 19 RR C // 4+4 такта
17 RLA // 4 такта
CB 19 RR C // 4+4 такта
17 RLA // 4 такта
CB 19 RR C // 4+4 такта
17 RLA // 4 такта
CB 19 RR C // 4+4 такта
17 RLA // 4 такта
CB 19 RR C // 4+4 такта
79 LD A,C // 4 такта
// Итого: 3*8+1=25 байт и 100 тактов
Если жалко памяти и хочется сделать цикл, то нужен еще [B]:
Код:
06 08 LD B,8 // 4+3 такта
17 RLA // 4 такта
CB 19 RR C // 4+4 такта
10 FB DJNZ $-5 // 13*7+8 тактов
79 LD A,C // 4 такта
// Итого: 8 байт и 7+12*8+13*7+8+4=206 тактов
По тактам могу ошибаться, но в общем отношение размер/время понятно. Механика процесса такова: RLA двигает старший бит [A] во флаг C, а RR C из флага C в старший бит [C]. В итоге, содержимое [A] плавно перетекает в [C], наполняя [A] мусором, частично из [C] (один бит потеряется, но его тоже можно выдернуть из флага C, но нужно ли?).