2013-05-31 176 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:​​。

我在哪里出错了?我正在致力于ubuntu 12.04

+1

请注意:不要在这里使用__volatile__。 'asm''output'写入'foo',使用'foo'和'bar'编译器不知道的方式。因此,“优化”'asm'语句并不是免费的。另外,'%ebx'可能不适用于IA32 ELF。 –

回答

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

...是不正确的语法。 asm易失性是单独的关键字。

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

...编译(并执行正确的结果)。

+1

谢谢。我编译并正确执行了它 – user146297