我想在 gcc 上测试内联 asm 功能。因此,我在 ubuntu 12.04 64 位上键入并编译以下代码,但系统在运行时在屏幕上显示“分段错误”。我不知道是什么导致了问题。
#include <stdio.h>
char Format[]="Hello world %d\n";
int main()
{
asm
(
"movl $3,4(%esp);"
"movl $Format,(%esp);"
"call printf;"
);
return 0;
}
谢谢你们帮助我一个程序新手。我使用 Code::blocks 作为 IDE 来编写这段代码。我曾尝试使用 64 位寄存器,例如 %rdx,但编译代码时生成消息的日志显示“错误:错误的寄存器名称 `%rdx'”。我认为这意味着 Code::blocks 调用的 gcc 是 32 位版本,因此它无法识别这些寄存器。我修改代码以保留堆栈空间
#include <stdio.h>
char Format[]="Hello world %d\n";
int main()
{
asm
(
"subl $8,%esp;" //I don't know $4, $8, $12, $16, $20 which is correct
//but I had tried them all but results are still ''segmentation fault."
"movl $3,4(%esp);"
"movl $Format,(%esp);"
"call printf;"
"movl %ebp,%esp;"
);
return 0;
}
甚至使用 -m32 作为编译器选项,但它仍然显示“分段错误”。
再次感谢谁提供帮助。