gooamoko
Зарегистрирован: 26.12.2003 Сообщения: 98
|
Добавлено: Пн Май 22 2006 16:29 Заголовок сообщения: Помогите с __asm() в программе на gcc |
|
|
Есть программка следующего содержания (просто для понимания синтаксиса написал):
Код: |
#include <stdio.h>
int main(int argc, char *argv[]){
register unsigned long int item = 0x01;
register unsigned long int val = 0x05;
unsigned long int res = 0;
asm ("movl %0, %ebx \n\t"\
"movl $5, %ecx \n\t"\
"movl %1, %edx \n\t"\
"xorl %eax, %eax \n\t"\
"shrb $1, %dl \n\t"\
"jnc next \n\t"\
"xorb %bl, %al \n\t"\
"cycl: \n\t"\
"shlb $1, %bl \n\t"\
"jnc end \n\t"\
"xorb $27, %bl \n\t"\
"end: \n\t"\
"shrb $1, %dl \n\t"\
"jnc next \n\t"\
"xorb %bl, %al \n\t"\
"next: \n\t"\
"loop cycl \n\t"\
"movl %eax, %2" : "e"(item) : "e"(val) : "=r"(res));
printf("Result is %d\n",res);
return 0;
}
|
Проблема в том, что я не могу понять, какие символы указывать вместо "e"(item).
Перепробывал практически все. Результат - практически одинаков:
Код: |
imp@ahilles:~/cpp/qt4/test_asm> gcc -o test main.cpp
main.cpp:8:33: warning: backslash and newline separated by space
main.cpp:9:34: warning: backslash and newline separated by space
main.cpp: In function ‘int main(int, char**)’:
main.cpp:8: error: expected `)' before ‘(’ token
main.cpp:8: error: output operand constraint lacks ‘=’
main.cpp:8: error: output operand constraint lacks ‘=’
main.cpp:8: error: invalid lvalue in asm output 0
|
Где можно найти более-менее подробную информацию о синтаксисе ассемблера?
Есть руководство по gcc, но маленько с переводом проблемы.
Кто может проконсультировать по данному вопросу?
Заранее благодарен. _________________ Что один сделал, другой завсегда сломать сможет |
|