[an error occurred while processing this directive]
|
Единственный раз в жизни делал ассемблерную вставку - когда нужно было организовать сдвиг 8-байтного числа. И быстро. На С так и не придумал ничего, тогда написал примерно следующее:
Глобальная переменная
// Массив принимаемых битов
persistent static unsigned char ReceiveCode [ 9 ];
//--------------------------------
// Сдвиг вправо принимаемого кода
void RotateReceiveCode ()
{
asm ( " rrf ((_ReceiveCode^0+8))& (0+127) " );
asm ( " rrf ((_ReceiveCode^0+7))& (0+127) " );
asm ( " rrf ((_ReceiveCode^0+6))& (0+127) " );
asm ( " rrf ((_ReceiveCode^0+5))& (0+127) " );
asm ( " rrf ((_ReceiveCode^0+4))& (0+127) " );
asm ( " rrf ((_ReceiveCode^0+3))& (0+127) " );
asm ( " rrf ((_ReceiveCode^0+2))& (0+127) " );
asm ( " rrf ((_ReceiveCode^0+1))& (0+127) " );
asm ( " rrf ((_ReceiveCode^0+0))& (0+127) " );
} // RotateReceiveCode
То есть обращение к глобальной переменной через ее имя с подчеркиванием. Откуда эти 0 и 127? - не помню, наверное просто написал на С сдвиг и посмотрел ассемблерный листинг. Может, поможет додумать?
E-mail: info@telesys.ru