Подниму тему.
Тут случайно обнаружилась очень похожая задачка, связанная с перекодировкой битов в байте. Нужно сменить порядок следования битов в байте на обратный.
Конечно, перекодировка по таблице - вне конкуренции по скорости. Но таблица занимает много места. Прямое, "лобовое" программное решение, без использования таблиц, выглядит примерно так:
LSR R16
ROL R17
LSR R16
ROL R17
LSR R16
ROL R17
LSR R16
ROL R17
LSR R16
ROL R17
LSR R16
ROL R17
LSR R16
ROL R17
LSR R16
ROL R17
MOV R16,R17
Соответствующий "шайтан-алгоритм" выглядит немного короче:
MOV R17,R16
ASR R17
ROR R16
ROL R17
ROL R17
ANDI R16,0xAA
ANDI R17,0x55
OR R16,R17
MOV R17,R16
ANDI R16,0x99
ANDI R17,0x66
SWAP R17
OR R16,R17
Это вам для коллекции. Может когда пригодится...