为什么在AMD64中删除了BCD指令?

fel*_*ght 8 assembly x86-64

二进制编码的十进制指令至少来自i8086是x86架构的一部分.它们类似于AAA,DAA,AAS,DAS,并且有助于处理BCD数字的算术运算.

以下是它们的一些参考:

https://en.wikipedia.org/wiki/Intel_BCD_opcode

根据英特尔软件开发人员手册.这些指令在长(64位)模式下不可用.我知道也许唯一真正知道为什么是建筑设计师的人,但为什么你认为他们删除它们?

gor*_*rdy 6

答案就在你的链接中:

使用这些操作码添加 BCD 数字是一项复杂的任务,甚至需要许多指令才能添加适度的数字。它还可能需要大量内存。

所有整数计算都是精确的,因此数字表示的基数对于准确性并不重要。因此,即使是今天的金融软件也通常以二进制表示形式存储值,并且仅转换为十进制进行输入和输出。

在 x86 处理器上,使用二进制数进行的计算通常比使用 BCD 数进行相同的计算要快得多。

至于为什么操作码从 x86_64 中删除,即使该功能仍然存在于硬件中(尽管可能以微代码实现),根据 Raymond Chen 的评论:

它们释放了宝贵的 1 字节操作码以供将来使用。

  • @Felipe 他们释放了宝贵的 1 字节操作码以供将来使用。 (19认同)
  • “一旦我们不再只考虑十进制并可以考虑二进制等,我们就不需要这些指令”,这是不正确的。如果有可对较长单词进行操作的 BCD 指令,它们在财务软件中就会非常有用。不使用它们的真正原因是因为它们只对 8 位 8080 CPU 可以操作的字进行操作 - 这些指令的存在只是为了让英特尔可以在 45 年前说“看吧,我们可以运行 CP/M 软件只需简单的重新组装即可!” (2认同)