除法器设计的一个解 |
送交者: 粱远声 2010年10月23日09:13:37 于 [灵机一动] 发送悄悄话 |
有一个芯片能做8位除以4位的计算(无符号)。请利用上8位除以4位
这个结果(商和余数)完成16位除以8位的计算(无符号)。写出算法即可。 假设有乘法器。 解: 设被除数是B3*2^12 + B2*2^8 + B1*2^4 + B0 设除数是A1*2^4 + A0 Ai,Bi 都是4位2进制数。A1,A0都不是零。所有的数都用符号量值表示。 (1)讨论 A1*2^4 + A0 除 B3*2^12 + B2*2^8 为了用8位除以4位结果 先讨论 A1*2^4 除 B3*2^12 + B2*2^8 = A1 除 ( B3*2^4 + B2 )2^4 根据假定,A1 除 ( B3*2^4 + B2 ),商为Q2,余数为R2。 从而, ( B3*2^4 + B2 )2^8 = (A1*2^4)*Q2*2^4 + R2*2^8 也就是说,当前的商是 Q2*2^4,把它放到累加累减商寄存器中。 考虑到除数的另一部分 A0,总余数为 -A0*Q2*2^4 + R2*2^8 + B1*2^4 + B0 无论正负,总余数的绝对值比被除数小。 (2)讨论 A1*2^4 + A0 除 (1)的总余数。 应用类似的过程,得到商Q1 和 更小的总余数。 把商Q1 累加累减到商寄存器中。 ...... (N)当总余数的绝对值是8位数的时候,假定是C1*2^4 + C0 且符号为正 讨论 A1*2^4 + A0 除 C1*2^4 + C0 用 A1*2^4 除 C1*2^4 = A1 除 C1。这是8位除以4位的特殊形式。 根据假定,A1 除 C1,商为Q0,余数为R0。 这样, C1*2^4 = (A1*2^4)*Q0 + R0*2^4 也就是说,当前的商是 Q0,把它放到累加累减商寄存器中。 考虑到除数的另一部分 A0,总余数为 -A0*Q0 + R0*2^4 + C0 当总余数的绝对值小于A1*2^4 + A0的时候,如果总余数大于等于零,这个 总余数就是结果余数,商寄存器中的数就是商。如果总余数小于零,商寄 存器减1,结果余数 = 总余数 + A1*2^4 + A0,商寄存器中的数就是商。 |
|
|
|
实用资讯 | |