2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Циклический сдвиг на n бит с помощью asm в Code Blocks [GCC]
Сообщение21.02.2010, 17:48 


05/06/09
24
Помогите пожалуйста реализовать циклический сдвиг на 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 


06/04/09
156
Воронеж
уберите "\N \T"

 Профиль  
                  
 
 Re: циклический сдвиг на n бит с помощью asm в Code Blocks
Сообщение21.02.2010, 20:22 


05/06/09
24
p51x в сообщении #291030 писал(а):
уберите "\N \T"

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

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

 Профиль  
                  
 
 Re: циклический сдвиг на n бит с помощью asm в Code Blocks
Сообщение21.02.2010, 20:33 
Заслуженный участник
Аватара пользователя


06/10/08
6422
RichardZorgi в сообщении #291052 писал(а):
\N \T - признак того, что дальше будут ещё команды ассемблера, тут вроде всё верно.

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

 Профиль  
                  
 
 Re: циклический сдвиг на n бит с помощью asm в Code Blocks
Сообщение21.02.2010, 20:39 
Заслуженный участник


04/05/09
4582
Не "\N\T", а "\n" или ";".
В gcc ассемблере конец команды - или конец строки "\n" или ";".
"\t" писать не обязательно.
К тому же вы неправильно передаёте параметры.
$X обозначает адрес статической переменной X, если такая найдётся, в чём я сомневаюсь, т.к. к именам сишных переменных в ассемблере добавляется префикс "_". Параметр X в коде функции вообще не имеет имени.

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


05/06/09
24
Спасибо. Решил возникшую проблему.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group