为什么我的C ++内联汇编不起作用?

时间:2013-11-04 22:13:46

标签: c++ inline-assembly

最奇怪的错误输出:

#include <iostream>
int main(int arg, char **LOC[])
{
asm
(
"mov eax, 0CF;"
"pusha;"
);
return 0;
}

它抱怨,这是GCC的错误:

  

t.s:汇编程序消息:

     

t.s:31:错误:“mov”

的内存引用太多

1 个答案:

答案 0 :(得分:9)

您收到此错误,因为您的程序集格式错误。寄存器访问与%eax完成,$用于立即操作数。此外,GCC默认情况下(参见DanielKO的评论)使用AT&amp; T语法,其右侧是目的地,左侧是源。这是你在找什么?

mov $0xcf, %eax

此外,您的pusha不平衡,即您在从函数返回之前未正确清理堆栈。很高兴知道你的总体目标是什么,因为现在你似乎只复制并粘贴了一小部分来源。