2013-05-31 2 views
1

Я попробовал пример из GCC-Inline-Assembly-HOWTOGCC встроенный ассемблер

int main(void) 
{ 
    int foo = 10, bar=15; 
    _asm__volatile_("addl %%ebx,%%eax;\n" 
        :"=a"(foo) 
        :"a"(foo), "b"(bar)); 
    printf("foo+bar+%d\n",foo); 
    return 0; 
} 

приведенный выше код дает мне эту error: add_two.c:8:3: error: expected ‘)’ before ‘:’ token.

где я пошла не так? Я работаю над ubuntu 12.04.

+1

Просто примечание: не используйте '__volatile__' здесь. Выход 'asm' 'записывается в' foo', используя 'foo' и' bar' таким образом, о котором компилятор не знает. Следовательно, свобода «оптимизировать» утверждение «asm» отсутствует. Кроме того, '% ebx' может быть недоступен для IA32 ELF. –

ответ

4
_asm__volatile_("addl %%ebx,%%eax;\n" 

... неправильный синтаксис. asm и volatile - это отдельные ключевые слова.

__asm__ __volatile__("addl %%ebx,%%eax;\n" 

... компилирует (и выполняет с правильным результатом).

+1

спасибо. Я скомпилировал и выполнил его правильно – user146297

Смежные вопросы