汇编程序:为什么BCD存在?

lla*_*aro 12 x86 bcd

我知道如果你不懂二进制文件,BCD就像更直观的数据类型.但我不知道为什么要使用这种编码,因为它在4位中的浪费表示(当表示大于9时)并没有多大意义.

另外我认为x86只支持add和subs(你可以通过FPU转换它们).

它可能来自旧机器或其他架构?

谢谢!

Pau*_*l R 11

BCD算法对于精确的十进制计算很有用,这通常是财务应用程序,会计等的要求.它还使得乘以10除以10的幂更容易.这些天有更好的选择.

有一篇很好的维基百科文章讨论了赞成和缺点.

  • 我怀疑现代x86 CPU已经优化了BCD实现 - 它们可能实现为微码,重点是兼容性,而不是性能. (4认同)

Jay*_*rod 9

当某个输出设备显示寄存器中的值时,BCD在电子频谱的极低端非常有用.例如,假设您有一个计算器,其中包含多个显示数字的七段显示.如果每个显示器由单独的位控制,则很方便.

现代x86处理器将用于具有这些类型显示器的设备似乎难以置信,但x86可以追溯到很一段时间,并且ISA保持了大量的向后兼容性.


mjv*_*mjv 6

BCD在空间方面是浪费的,这是事实,但它具有"固定间距"格式的优点,可以很容易地找到特定数字的第n位数字.

另一个优点是允许对任意大小的数字进行精确的算术计算.而且,使用所提到的"固定间距"特性,这种算术运算可以容易地分成多个线程(并行处理).

  • @nubok:使用 BCD,人们可以读取任意大小的十进制格式值,对其进行计算,并以十进制格式将其写出,所有这些都在每个数字的恒定时间内完成。如果任意大小的数字格式使用 2 的幂来存储事物,则随着 N 变大,转换为十进制格式/从十进制格式转换所需的每位数时间将增加。 (2认同)

Mic*_*ael 6

BCD存在于现代x86 CPU中,因为它是在最初的8086处理器中,并且所有x86 CPU都是8086兼容的.x86中的BCD操作用于支持业务应用程序.处理器本身的BCD支持不再使用了.

请注意,BCD是十进制数的精确表示,浮点数不是,并且在硬件中实现BCD比实现浮点要简单得多.当处理器的晶体管数不到一百万,运行在几兆赫兹时,这些事情就更加重要了.


小智 5

我认为BCD对许多事情很有用,原因如上所述.似乎被忽略的一件显而易见的事情是提供从二进制到BCD的指令,反之亦然.这对于将算术转换为二进制的ASCII数非常有用.

其中一张海报错误地说,数字经常以ASCII格式存储,实际上很多二进制数存储都是因为它更有效率.将ASCII转换为二进制有点复杂.BCD有点介于ASCII和二进制之间,如果有bsdtoint和inttobcd指令,那么转换就非常容易.必须将所有ASCII值转换为二进制以用于算术.因此,BCD实际上在ASCII到二进制转换中很有用.