我在编译时遇到“错误:错误的注册名称'%% ecx'”
#include <stdio.h>
int main(void){
asm("mov 3, %%ecx\n\t");
// ...
return 0;
}
答案 0 :(得分:5)
如果要使用gcc的“扩展内联汇编”,使用输入,输出和clobber列表,则使用寄存器的双百分号。这是因为内联汇编程序保留了单百分号,用于替换实际操作数名称,基于这些列表和%
之后的数字。
如果您不想使用“扩展”内联汇编,只需使用正常的AT&amp; T语法即可。做这样的事情:
int main(void)
{
asm("mov 3, %ecx\n\t");
return 0;
}
与gcc 4.6.3完美搭配。我还假设你知道mov 3, %ecx
和mov $3, %ecx
之间的区别。