Visual c++ 为什么MSVC不支持AMD64和安腾目标的内联汇编? 昨天我了解到,在编译AMD64和IANTIAL目标时,微软Visual C++中不支持内联程序集(带有“Y-ASM关键字”)。

Visual c++ 为什么MSVC不支持AMD64和安腾目标的内联汇编? 昨天我了解到,在编译AMD64和IANTIAL目标时,微软Visual C++中不支持内联程序集(带有“Y-ASM关键字”)。,visual-c++,assembly,x86-64,inline-assembly,itanium,Visual C++,Assembly,X86 64,Inline Assembly,Itanium,对吗?如果是这样,有人知道为什么他们不支持这些目标的内联汇编吗?这似乎是一个相当大的功能,只需删除…正确,它在中仍然不受支持。我的猜测是内联汇编太难实现了:微软实现它的方式是,它与周围的C代码集成,以便数据可以流入和流出C代码,并自动注入适当的粘合代码。为此,C编译器实际上需要理解汇编代码;他们只是没有为AMD64和安腾实现这一点 这似乎是一个相当大的特点,只是下降 只要遵循C约定,调用用汇编程序编写的函数就很容易。解释如何操作。同意,唯一真正的限制是不能在同一个例程中混合使用C和ASM。来自P

对吗?如果是这样,有人知道为什么他们不支持这些目标的内联汇编吗?这似乎是一个相当大的功能,只需删除…

正确,它在中仍然不受支持。我的猜测是内联汇编太难实现了:微软实现它的方式是,它与周围的C代码集成,以便数据可以流入和流出C代码,并自动注入适当的粘合代码。为此,C编译器实际上需要理解汇编代码;他们只是没有为AMD64和安腾实现这一点

这似乎是一个相当大的特点,只是下降


只要遵循C约定,调用用汇编程序编写的函数就很容易。解释如何操作。

同意,唯一真正的限制是不能在同一个例程中混合使用C和ASM。来自Pascal的背景,内联ASM混合在科学代码中很常见,我完全同意强制将语言分离为不同函数的决定。C编译器生成ASM作为一种中间语言,在AMD64上允许内联ASM并不“困难”。平台规格是在一些支持x86的编译器中x86_64目标不存在内联ASM的唯一原因。@MarkKCowan:您见过MSVC的内联ASM吗?这涉及到大量的“我的意思是什么”;您可以自由地将C/C++变量与汇编代码文本混合在一起,因此编译器必须解析并(在某种程度上)分析所有代码,而不像GCC那样,汇编代码本身以一种让人联想到printf格式字符串的样式指定,并显式描述输入,输出和阻塞寄存器避免了编译器尝试分析程序集的任何需要。老实说,我更喜欢GCC的方法,因为它涉及较少的对编译器的二次猜测。@SamB yep,与Delphi中的内联汇编相同。我只是希望GCC不要使用AT&t语法:(@MarkKCowan哦,当然,英特尔汇编的AT&t语法是蹩脚的。我对GCC的实际约束语法(尤其是该语法的文档)不太感兴趣)但汇编代码是我最不想猜测编译器会认为某些代码是用来做什么的地方,有时访问完整的汇编程序也有它的用途。。。