[an error occurred while processing this directive]
Мда... Так я, пожалуй, не знаю. Хотя...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено John 04 января 2003 г. 15:35
В ответ на: Задача соптемизировать следующее(+) отправлено abivan 04 января 2003 г. 15:08

Единственный раз в жизни делал ассемблерную вставку - когда нужно было организовать сдвиг 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