Цитата Сообщение от 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, но нужно ли?).