【问题标题】:Migrating assembly code from 32 to 64 bit question将汇编代码从 32 位迁移到 64 位问题
【发布时间】:2011-04-01 10:44:54
【问题描述】:

我负责我继承的一些应用程序级代码,这些代码具有一些 x86... 基于 32 位指令和寻址的英特尔汇编代码。我将假设当我们迁移 64 位 Windows 操作系统时,这个 32 位汇编代码将运行。是吗?

【问题讨论】:

  • 这是嵌入在 C++ 代码中的。
  • 我想知道为什么票数接近。
  • 也许这不会像我想象的那么容易。我从响应者那里获得了链接(抱歉 - 不确定这个问题是谁移动的)msdn.microsoft.com/en-us/library/hb5z4sxd.aspx 声明“x64 不支持内联 ASM。使用 MASM 或编译器内在函数(x64 内在函数)。”

标签: 64-bit operating-system intel 32-bit


【解决方案1】:

它可能会运行,但不会利用 x86 asm 的 64 位扩展提供的任何功能(x86-64,这是所有“64 位”版本的 Windows)或能够与 x64 库紧密互操作。 WoW64 层非常稳定,99.999% 的 32 位应用程序在当前的“64 位”操作系统上运行良好。

如果您想迁移到真正的 64 位操作系统(我所知道的只有基于 Itanium 的 ia64),那么您就不走运了。

编辑:此外,如果您想启用大地址访问(能够使用 >4gb 的 RAM),您可以翻转一个 PE 标头标志,将其打开并允许它寻址更多的内存。

【讨论】:

  • 太棒了!非常感谢!我是新来的(但在 SO 上有良好的信誉)希望我在这里有足够好的声誉,所以我可以投票。
  • 相同。我不担心代表,所以投票无关紧要,但如果我为你回答了这个问题,你可能想接受,让人们知道。 :)
  • 好的会接受,但如何做到这一点并不明显(至少对我来说)。发送常见问题链接:-)
  • 我会赞成这个 - 你比我更费心。 :)
【解决方案2】:

它很可能会运行; 64 位 Windows 支持应用程序的 32 位模式,它通常非常可靠。 (很明显,这些事情从来都不是 100% 的 - 买者自负。)

【讨论】:

    【解决方案3】:

    是的。 32 位代码可以在 64 位机器上运行,但它们无法访问超过 4 GiB 的 RAM。

    【讨论】:

      【解决方案4】:

      如果您继续构建 32 位 x86 应用程序,它将运行。但是,如果您必须将代码移植到 64 位 x86,则汇编代码可能无法立即运行(甚至可能无法编译)。

      根据您的工具链以及它是否是 C/C++ 代码中的内联汇编程序,您甚至可能根本无法编译它。

      【讨论】:

      • 您能详细说明一下吗?连编译都不行?它是嵌入式 C++ 代码。
      • 从内存中 - 至少对于 MS 编译器,内联汇编器根本不会在 64 位工具链上编译,因为编译器不支持 __asm。我不知道像 GCC 这样的其他编译器是否也会遇到这个问题。
      • 我们正在使用 VS - 代码传输发生时可能是 2010 年。我不期待重写汇编代码,对我来说不是不可能,但不是我注册的任务。
      • 我还没有接触到 VS2010,但是从这个页面 msdn.microsoft.com/en-us/library/hb5z4sxd.aspx 看起来你已经上岸了——在 64 位上没有内联汇编,尽管你仍然可以使用 MASM更大的块。
      猜你喜欢
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 2022-06-24
      • 2015-10-16
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多