x86汇编奇怪的错误

时间:2013-12-27 11:57:27

标签: assembly x86

我使用的是Windows版本的代码块12.11,集成了32位mingw gcc 4.7.1,Windows 8.1 64位。

在main.c中,代码:

__asm volatile
(
    "mov ebx, esp\n\t"
    "mov eax, fs : [ebx]\n\t"
    "mov %0, eax"
    : "=m"(reg)
);

在api.S,代码:

.text
func:
    enter 0, 0

    mov ebx, esp
    mov eax, fs : [ebx]

    leave
    ret

编译选项:-masm=intel -Wa,-msyntax=intel,-mnaked-reg

main.c编译正常,但api.S遇到汇编错误:无效使用寄存器。

据我所知,内联汇编代码直接发送到汽油。我不知道为什么相同的指令(mov eax, fs : [ebx])会有不同的结果。

现在我们只讨论语法问题。我知道运行结果可能是分段错误。

1 个答案:

答案 0 :(得分:0)

这个问题已经解决了。

如果我在文件api.S中添加“.intel_syntax noprefix”。编译成功!


但我不知道为什么选项'-Wa,-msyntax = intel,-mnaked-reg'不起作用......