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

15

二进制编码十进制指令至少从i8086开始就成为x86架构的一部分。它们类似于AAA、DAA、AAS、DAS,并有助于处理BCD数字的算术操作。

以下是它们的一些参考资料:

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

根据英特尔软件开发手册,这些指令在长64位模式下不可用。也许只有架构的设计者才知道为什么要将它们移除,您认为他们为什么会这样做呢?

1个回答

6
答案就在你提供的链接中:
使用这些操作码来计算BCD数字是一项复杂的任务,即使是加上较小的数字也需要许多指令。它还可能需要大量的内存。
所有整数计算都是精确的,因此数字表示的基数对于精度并不重要。因此,即使是金融软件今天通常也会以二进制表示值,并且只有在输入和输出时才转换为十进制。
在x86处理器上,使用二进制数字进行计算通常比使用BCD数字进行相同的计算要快得多。
至于为什么从x86_64中删除了操作码,即使硬件中仍然存在该功能(尽管可能是在微码中实现),根据Raymond Chen的评论:
它们释放了宝贵的1字节操作码以供将来使用。

所以他们只是将它移除了,因为它已经不再有用了? - felknight
1
@Felipe 没有人使用它们,它们占用硅空间并增加了处理器的复杂性。 - Mysticial
仍然困扰我的是,它们只能在16位和32位模式下使用。它们仍然存在于芯片上,为什么要将它们从64位模式中移除? - felknight
19
他们释放了宝贵的1字节操作码以备将来使用。 - Raymond Chen
2
“一旦我们不再只考虑十进制,而是能够理解二进制等,就不需要这些指令”这种说法并不正确。如果有操作更长字的BCD指令,它们在金融软件中将非常有用。它们不被使用的真正原因是因为它们只能操作8位8080 CPU可以操作的字 - 这些指令只是为了让英特尔在45年前说“看吧,我们可以通过简单的重新组装运行CP/M软件!” - DrHyde
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接