我使用的是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]
)会有不同的结果。
现在我们只讨论语法问题。我知道运行结果可能是分段错误。
答案 0 :(得分:0)
这个问题已经解决了。
如果我在文件api.S中添加“.intel_syntax noprefix”。编译成功!
但我不知道为什么选项'-Wa,-msyntax = intel,-mnaked-reg'不起作用......