对于算术运算的计算机可使用的二进制代码或数字或两者的直接二进制数?

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

为十进制数395的示例BCD码是001110010101和直接二进制转换是110001011,哪一个值的计算机可用于算术运算

binary cpu-architecture symbolic-math code-conversion
1个回答
1
投票

大多数CPU上只能有二进制数的高效硬件支持(通常仅适用于功率为2的尺寸在现代的CPU,所以你想要的填充到至少16位)。

您可以实现压缩BCD(每半字节1位),但是,使用移位/屏蔽和比较操作来检查一个数字成为>9,并手动传播进到下一个数字(此字节的高四位,或下一个字节) 。即,作为加法/减法,类似于与搬出扩展精度的二进制加/子的一部分。

某些CPU甚至有搬出一个标志从低四位。例如86的自动对焦。在16和32位模式下,86甚至有(慢)的指令来调整正常二进制加法包含两个装填BCD数字的一个字节的减法后的结果。 (DAA / DAS,和用于压缩BCD其它指令(每字节1位),在16位和32位模式下当前的CPU都在64位模式下取出并大多慢微编码)。

其他一些国际检索单位负责协助压缩BCD码的计算,就像一个半字节进位标志类似的支持。

压缩BCD(每字节1位)更容易实现,因为你无需先提取低4位比较的>9整个字节,产生下一个数字一个进位信号。 (高4位可以被检查为无>= (10<<4)拆包。)

但随着AND / OR和左/右移位指令的任何正常结构使得它非常容易提取啃并做>9和调整+进行完全手动检查。如果你做多操作,你可能会更好暂时拆包字节,并在年底重新包装,甚至转换为二进制。

但是,从二进制转换回BCD是昂贵的:你有10对每个非零数字结果来划分,同时生产这一个数字。这需要一个乘法和移位,这是低端CPU的慢。 Why does GCC use multiplication by a strange number in implementing integer division?。如果你有多个二进制位,你可以喂到一个乘法或除法,那么它的每个数字显著更加昂贵,直到数得到足够小。

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