2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Циклический сдвиг на n бит с помощью asm в Code Blocks [GCC]
Сообщение21.02.2010, 17:48 
Помогите пожалуйста реализовать циклический сдвиг на n бит с помощью asm в Code Blocks...компилятору GCC нужен особый синтаксис:
http://www.ibiblio.org/gferg/ldp/GCC-In ... HOWTO.html
я не разбираюсь в ассемблере, поэтому возникли трудности.
Посмотрите пожалуйста, правильно ли написана функция:

UINT_32 TGost::ROL(UINT_32 X, BYTE n)
{
asm("movl $X, %eax \N \T"
"rotl %eax, $n \N \T"
"movl %eax, $X"
);
return UINT_32(X);
}

P.S. побитовый XOR:

asm
( // исключающее ИЛИ ( S = S xor N2)
"movl $N2, %eax \N \T"
"xorl %S, %eax"
);
Правильно ли написано?

Эти участки программы компилируется, но в целом 2 ошибки:
Error: junk `N Trotl %eax' after register
Error: junk `N Txorl %S' after register
не знаю, в чём проблема, google не помог. Спасибо.

 
 
 
 Re: циклический сдвиг на n бит с помощью asm в Code Blocks
Сообщение21.02.2010, 19:11 
уберите "\N \T"

 
 
 
 Re: циклический сдвиг на n бит с помощью asm в Code Blocks
Сообщение21.02.2010, 20:22 
p51x в сообщении #291030 писал(а):
уберите "\N \T"

\N \T - признак того, что дальше будут ещё команды ассемблера, тут вроде всё верно.

Попоробовал их убрать - те же ошибки при компиляции, что и раньше

 
 
 
 Re: циклический сдвиг на n бит с помощью asm в Code Blocks
Сообщение21.02.2010, 20:33 
Аватара пользователя
RichardZorgi в сообщении #291052 писал(а):
\N \T - признак того, что дальше будут ещё команды ассемблера, тут вроде всё верно.

Попробуйте n и t маленькие сделать.
Это не признаки того, что дальше еще команды будут, а символы перевода строки и табуляции.

 
 
 
 Re: циклический сдвиг на n бит с помощью asm в Code Blocks
Сообщение21.02.2010, 20:39 
Не "\N\T", а "\n" или ";".
В gcc ассемблере конец команды - или конец строки "\n" или ";".
"\t" писать не обязательно.
К тому же вы неправильно передаёте параметры.
$X обозначает адрес статической переменной X, если такая найдётся, в чём я сомневаюсь, т.к. к именам сишных переменных в ассемблере добавляется префикс "_". Параметр X в коде функции вообще не имеет имени.

 
 
 
 Re: циклический сдвиг на n бит с помощью asm в Code Blocks
Сообщение24.02.2010, 00:05 
Спасибо. Решил возникшую проблему.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group