为什么像 BOUND 或 PUSHA 这样的 x86 传统指令在 64 位模式下不可用?

问题描述 投票:0回答:1

某些旧版 x86 指令(BOUND、PUSHA、AAA...)无法在 64 位模式下使用是否有原因?是的,我知道,此类指令仅适用于兼容性问题,不应在现代代码中使用。

有人可能会说:为了减少芯片上的空间。但该空间已被用于使命令可执行。因此,整个基础设施都适用于这些命令。为什么要人为地限制CPU的能力?

我查看了说明参考,是否有给出原因。不幸的是,只有哪些指令在 64 位模式下不可用的信息 - 没有为什么。

对于一些遗留指令,我发现操作码在 64 位模式下被重用。但似乎并非每条“禁止”指令都是如此。

assembly x86 x86-64
1个回答
0
投票

操作码空间是一种宝贵且稀缺的资源。 在某些情况下,正如您所说,操作码被重用于更有用的新指令。 即使它们没有立即重用,这些操作码也可供将来使用。

请注意,“基础设施已存在”仅适用于这些指令的现有 16 位和 32 位版本。 如果他们要以 64 位模式提供它们,他们会希望它们有 64 位版本,而这至少需要一定数量的晶体管和工程工作。

另外,请记住,AMD64(现在称为 x86-64)大约在 1999 年推出,这是自 1985 年 80386 引入 32 位模式以来 15 年来第一次打破二进制兼容性。预计在相当长的一段时间内不会再有这样的机会;事实上,从那以后的 25 年里就再没有出现过这样的情况。 因此,如果他们想要摆脱这些几乎无用的指令,这些指令只会浪费晶体管并使操作码空间变得混乱,那就是大胆采取行动的时候了。 (许多人希望他们能够“更大胆”地这样做,并摆脱 x86 指令集的更多低效或奇怪的功能;但也需要尽可能重用“现有基础设施”,以控制成本。 ) 我猜 AMD64 设计者可能也希望有一天,对 16 位和 32 位模式的支持可以被弃用并最终被放弃。到那时,将不再需要“现有基础设施”,并且如果 64 位模式也不需要它,将真正节省资源。 不幸的是这一天还没有到来。

© www.soinside.com 2019 - 2024. All rights reserved.