为什么MSVC不支持AMD64和Itanium目标的内联汇编?

Jer*_*ner 11 assembly x86-64 itanium inline-assembly visual-c++

昨天我了解到,在编译AMD64和Itanium目标时,Microsoft Visual C++不支持内联汇编(使用__asm关键字).

那是对的吗?如果是这样,有谁知道为什么他们不支持这些目标的内联汇编?这似乎是一个相当大的特点,只是放弃......

Mar*_*wis 11

正确,VS 2010 Beta 1仍然不支持它.我的猜测是内联汇编实现起来太难了:Microsoft实现它的方式,它与周围的C代码集成,以便数据可以流入和流出C代码,并自动注入适当的胶水代码.为此,C编译器实际上需要理解汇编代码; 他们只是没有为AMD64和Itanium实现这一点.

  • @MarkKCowan:你*见过* MSVC 的内联 ASM 吗?它涉及到大量的“按我的意思做”;您可以自由地将 C/C++ 变量与汇编代码文本混合在一起,因此编译器必须解析并(在某种程度上)分析所有代码,这与 GCC 的方式不同,其中汇编代码本身以让人想起 printf 的样式指定格式字符串以及输入、输出和破坏寄存器的显式描述消除了编译器尝试分析程序集的任何需要。老实说,我更喜欢 GCC 的方法,因为它不需要对编译器进行事后猜测。 (2认同)

Bas*_*ard 5

放弃似乎是一个相当大的功能......

只要您遵循 C 约定,调用用汇编程序编写的函数非常容易。本教程解释了如何。