用于计算Decimal Output
具有 125 * A - 100 * (A Mod 4) + 2
A (one BCD digit
下列哪项是正确的
1)我们至少需要两个十进制加法器。
2)我们至少需要两个4位二进制加法器。
3) 我们至少需要一个十进制乘法器和一个十进制加法器。
4) 以上皆非。
为什么我们的讲师选择(4)
作为解决方案而不是选择(3)
?任何想法或提示?
谢谢大家。
用于计算Decimal Output
具有 125 * A - 100 * (A Mod 4) + 2
A (one BCD digit
下列哪项是正确的
1)我们至少需要两个十进制加法器。
2)我们至少需要两个4位二进制加法器。
3) 我们至少需要一个十进制乘法器和一个十进制加法器。
4) 以上皆非。
为什么我们的讲师选择(4)
作为解决方案而不是选择(3)
?任何想法或提示?
谢谢大家。
A Mod 4
在原始等式中给出了 BCD 数字的两个最低有效位A
。因此,让我们分别考虑 A 的两个最高和最低有效位,如下所示:
X = A AND 3 = A Mod 4 (two least significant bits)
Y = A AND Ch (two most significant bits)
其中h
后缀Ch
表示C
十六进制(即Ch
二进制1100
),AND
表示逻辑与运算。
例如,如果我们有
A = abcd
其中a
, b
,c
和d
是任意二进制数字,我们会得到
X = 00cd
Y = ab00
重要的是,请注意
A = X + Y
(ab00 + 00cd = abcd)
这允许我们将乘法的分布应用于加法,特别是
125 * A
= 125 * (X + Y)
= 125 * X + 125 * Y
所以,我们有
125 * A - 100 * (A Mod 4) + 2 (original equation)
= 125 * (X + Y) - 100 * X + 2 (replace A with X + Y)
= 125 * Y + 125 * X - 100 * X + 2 (distributivity)
= 125 * Y + 25 * X + 2 (125 * X - 100 * X = 25 * X)
= 100 * Y + 25 * (X + Y) (125 * Y = 100 * Y + 25 * Y)
= 100 * Y + 25 * A + 2 (replace X + Y with A)
在最终方程100 * Y + 25 * A + 2
中,我们需要计算两项 (100 * Y
和25 * A
),加上一个常数项 ( 2
)。
这个术语100 * Y
在 BCD 中很简单:只需将Y
两位数的位置向左移动到百位。
对于这个25 * A
术语,我们需要一个乘数乘以A
25。
现在,我们需要将所有三个术语相加,但是:
100 * Y
在术语和中设置的位(“一”位)之间没有重叠25 * A
。实际上,term100 * Y
只能设置百位的两个最高位(回到 的定义Y
),而 term25 * A
最多会设置同一位的两个最低位。要看到这一点,请记住25 * A = 100 * A / 4
,这意味着该术语的百位数字不能超过 3。100 * Y
和都是25 * A
25 的倍数,这意味着它们的和也是如此,所以该和的低位只能是 0 (0000) 或 5 (0101)。第二位不能在那个总和中设置,因此也没有与常数2
项重叠。由于在考虑可以设置哪些位位置时所有三个项都不会重叠,我们可以使用简单的逻辑 OR 运算而不是实际的加法器来将所有三个项相加。
事实上,在我们所做的一切中,加法器从来都不是必需的,这意味着 4) 是唯一合适的答案。