lang汇编器错误:指令的操作数不明确

时间:2019-05-02 03:04:13

标签: assembly clang

我正在尝试使用clang构建tinymembench,并在汇编代码中遇到错误。我可以修复简单的错误(删除.func / .endfunc的错误),但是在add和sub上出现的“指令操作数不明确”错误超出了我的最低汇编技巧。我在存储库中发布了一个问题,但有可能不再被维护。

使用此source file(删除了.func / .endfunc),我得到如下错误:

$ clang-8 x86-sse2.S /tmp/x86-sse2-dbaa71.s:86:9: error: ambiguous operand size for instruction 'add' add SRC, 64 ^~~ /tmp/x86-sse2-dbaa71.s:87:9: error: ambiguous operand size for instruction 'add' add DST, 64 ^~~ /tmp/x86-sse2-dbaa71.s:88:9: error: ambiguous operand size for instruction 'sub' sub SIZE, 64 ^~~~ ...

我看了看this answer,它们看起来很相似,但是我无法将其翻译成这些说明的答案。

1 个答案:

答案 0 :(得分:2)

  

我可以修复简单的文件(删除.func / .endfunc的文件)

.func宏包括一个.set SRC, rsi,它根据适当的调用约定(x86-64 System V,Windows x64或带有堆栈args的32位)定义寄存器。

删除它只会留下未定义的SRC符号,该符号当然会被视为内存操作数。 (而且add mem, imm都没有隐含操作数大小的操作数,因此模棱两可。)

您的“修复程序”引入了此错误。


使用clang -no-integrated-as来使用系统汇编程序,而不是clang的内置汇编程序。正如预期的那样,在我的Linux桌面上使用clang7.0.1可以很好地构建https://github.com/letrout/tinymembench/blob/master/x86-sse2.S。 (并且系统汇编程序= GNU Binutils as 2.31.1)

相关问题