gpt4 book ai didi

assembly - 32位windows下的64位寄存器

转载 作者:行者123 更新时间:2023-12-03 22:36:58 27 4
gpt4 key购买 nike

我刚刚在我的 32 位 Vista 机器上安装了 mingw32 来试验 gcc 内联汇编。不幸的是,32 位 gcc 编译器无法识别 64 位寄存器,
例如 %%rax。
在我花费大量时间尝试组装新工具链之前,我有几个问题:

  • x86(Intel Core Duo,T5800)上是否有某种处理器模式会阻止它在运行 Vista32 时使用 64 位寄存器(即这是一个失败的原因)?
  • 假设#1 的答案是“当然你可以在 32 位窗口下使用 %rax 等”,gcc 是否可以配置为识别 64 位寄存器并构建将在 32 位窗口下运行的可执行文件?我知道 gcc 有一个 -m64 选项,但是我的 mingw32 附带的版本没有编译 64 位支持。如果它可以构建可以访问 64 位的 32 位应用程序,我当然愿意重建 gcc注册,但如果它无论如何都不起作用,我不想经历那种痛苦。

  • 旁白:这实际上是学习 SSE2 指令的第一步(是的,我知道,编译器内在函数存在,但我想从机器级别上理解它)。

    最佳答案

  • 是的,64 位处理器有 3 种大小模式,16 位、32 位和 64 位。操作系统不能以大于操作系统本身的模式运行代码。因此,Vista 32 位只能运行为 16 位和 32 位构建的代码。您的处理器 does indeed support 64-bits ,因此您应该尝试在其上安装 64 位操作系统。如果您的计算机带有实际的 Windows Vista CD,则可能有一张用于 Vista 64 的单独 CD。如果您构建一个支持 x86-64 的新工具链,您将能够编译使用 64 位指令和寄存器的代码,但您将除非您安装 64 位操作系统,否则无法运行生成的可执行文件。
  • 由于rax是一个 64 位寄存器(32 位等价物是 eax )它只能从 64 位程序访问。其原因是对处理器如何解释程序发送的命令的解释相当复杂。

  • 但是,您实际上不需要访问 64 位代码即可使用 MMX、SSE、SSE2 和 SSE3。所有这些指令都在 32 位模式下可用,并且受您的处理器支持。

    您可能还需要考虑运行虚拟机并将 Ubuntu 放入其中。这将允许您在 Windows 桌面上的窗口内运行 Linux。我认为使用 GNU 工具链(gcc 等) native 会比使用 mingw32 更轻松。在当今时代,VM 易于安装和使用,几乎没有理由再使用 mingw32。您还可以查看 MS Visual C++ Express,它是 Microsoft 免费提供的基于 Windows 的编译器,但它不支持 64 位(您必须为支持的版本付费)。

    关于assembly - 32位windows下的64位寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047864/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com