内联汇编:错误的寄存器名称

时间:2014-05-30 11:06:07

标签: c gcc inline-assembly

我在编译时遇到“错误:错误的注册名称'%% ecx'”

#include <stdio.h>

int main(void){
    asm("mov 3, %%ecx\n\t");
    // ...
    return 0;
}

1 个答案:

答案 0 :(得分:5)

如果要使用gcc的“扩展内联汇编”,使用输入,输出和clobber列表,则使用寄存器的双百分号。这是因为内联汇编程序保留了单百分号,用于替换实际操作数名称,基于这些列表和%之后的数字。

如果您不想使用“扩展”内联汇编,只需使用正常的AT&amp; T语法即可。做这样的事情:

int main(void)
{
    asm("mov 3, %ecx\n\t");
    return 0;
}

与gcc 4.6.3完美搭配。我还假设你知道mov 3, %ecxmov $3, %ecx之间的区别。

相关问题