【问题标题】:Why did Windows 64 choose to require xmm6 and xmm7 to be saved/restored?为什么 Windows 64 选择要求保存/恢复 xmm6 和 xmm7?
【发布时间】:2008-11-04 15:27:58
【问题描述】:

为什么 Windows 64 选择要求保存/恢复 xmm6 和 xmm7?

在 Windows 32 中,您可以编写破坏 xmm0...xmm7 的汇编例程。但是如果你使用相同的汇编代码并在 Windows 64 中运行它,它通常会导致应用程序错误,因为 VS2007 将双精度值存储在 xmm6 和 xmm7 中。

在我看来,既然 X64 有 16 个 xmm 寄存器 xmm0...xmm15(而 X32 只有 8 个 xmm 寄存器),那么微软本可以选择允许用户破坏 xmm0..xmm7(以便他们可以重用程序集Win32 的例程而不考虑它)但需要用户保存/恢复 xmm8...xmm15。

那么,为了满足我自己的好奇,为什么 Windows 64 选择要求保存/恢复 xmm6 和 xmm7?

【问题讨论】:

    标签: windows win64 cpu-registers


    【解决方案1】:

    有趣的问题。我发现了这个:Win64 Structured Exception Handling,它指出 XMM6 到 XMM15 必须保存/恢复,但没有说明为什么

    维基百科说Microsoft x64 calling convention 使用 XMM0 - XMM3,这意味着假设其他人被保留。同样,它没有说明原因。

    【讨论】:

      猜你喜欢
      • 2020-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多