我知道如果你不懂二进制文件,BCD就像更直观的数据类型.但我不知道为什么要使用这种编码,因为它在4位中的浪费表示(当表示大于9时)并没有多大意义.
另外我认为x86只支持add和subs(你可以通过FPU转换它们).
它可能来自旧机器或其他架构?
谢谢!
当某个输出设备显示寄存器中的值时,BCD在电子频谱的极低端非常有用.例如,假设您有一个计算器,其中包含多个显示数字的七段显示.如果每个显示器由单独的位控制,则很方便.
现代x86处理器将用于具有这些类型显示器的设备似乎难以置信,但x86可以追溯到很长一段时间,并且ISA保持了大量的向后兼容性.
BCD在空间方面是浪费的,这是事实,但它具有"固定间距"格式的优点,可以很容易地找到特定数字的第n位数字.
另一个优点是允许对任意大小的数字进行精确的算术计算.而且,使用所提到的"固定间距"特性,这种算术运算可以容易地分成多个线程(并行处理).
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到二进制转换中很有用.