通过 DLL 在 x64 上进行内联汇编

Posted

技术标签:

【中文标题】通过 DLL 在 x64 上进行内联汇编【英文标题】:Inline assembly on x64 via a DLL 【发布时间】:2017-03-15 16:05:26 【问题描述】:

今天我在MSDN 网站上看到,ARM 和 x64 处理器不支持内联汇编。由于我不擅长 C、C++ 或 ASM,我无法自己测试它,但它激发了我的兴趣。

我想知道是否可以在 Visual Studio 中执行此操作,因为它在 MSDN 网站上。

不管我的第一个问题的答案如何,我的第二个问题仍然存在:是否可以使用内联 ASM 编译 DLL,然后通过 x64 C/C++ 程序调用它来执行内联 ASM。 如果是,为什么,如果不是:为什么不。

提前致谢!

【问题讨论】:

MSDN 不是这个问题的正确收件人吗?我们不是 Microsoft 支持论坛。 我没有使用 MSDN 论坛的经验,但我在这里。其次,我不知道这个“问题”是否与 MS 有关,或者一般情况下是否不可能。 内联汇编不是 C 语言的一部分。所以,当然它是特定于 MS 的。 Wrt 你不知道 MSDN 论坛:不合逻辑。这不是争论。 【参考方案1】:

按照 MSDN 的规定,VC++ 编译器 不支持这些平台上的内联汇编。当然,这不是这些平台的内在限制——它只是那些版本的 VC++ 中没有实现的功能,其他编译器(例如 gcc)支持它就好了。没什么奇怪的,它不是标准功能(如:C 或 C++ 标准要求的功能),它只是一个常见的扩展。

尽管如此,即使使用 VC++,您也不需要制作 dll - 您只需将您的 asm 文件组装成一个对象模块,然后将其与其他模块链接在一起(例如由 C 或 C++ 生成)编译器)到单个可执行文件中。这实际上是他们推荐的混合 C/C++ 和汇编的过程——Microsoft 汇编器本身与 VC++ 一如既往地一起提供。

【讨论】:

感谢您的回答! ...因为size_tunsigned...? ;) 汇编器不同于 C/C++ 编译器本身,但它随 Visual Studio 一起提供。 内联汇编是编译器扩展,因此根本没有标准化。仅仅因为两个编译器支持它并不意味着你可以在两个实现中使用相同的构造/语法。 @LPs: 正好=)

以上是关于通过 DLL 在 x64 上进行内联汇编的主要内容,如果未能解决你的问题,请参考以下文章

x86平台转x64平台关于内联汇编不再支持的解决

Visual Studio 2008 内联汇编 关键字__asm出错

C++ 多线程内联汇编

内联 asm 到 x64 - 理解

通过内联汇编操作c变量[重复]

VS的 X64下的汇编编译