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

1 c++ inline-assembly

最奇怪的错误输出:

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

它抱怨,这是GCC的错误:

ts:汇编程序消息:

ts:31:错误:'mov'的内存引用太多

Jus*_*Sid 9

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

mov $0xcf, %eax
Run Code Online (Sandbox Code Playgroud)

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

  • 在它的时候,值得一提的是`-masm = intel` GCC标志. (3认同)