8

为什么 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?

4

1 回答 1

1

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

Wikipedia 说Microsoft x64 调用约定使用 XMM0 - XMM3,这意味着假设其他人被保留。同样,它没有说明原因。

于 2008-11-04T16:20:24.130 回答