为什么二进制减法总是通过补码相加来完成?

3

我正在寻找一个好的解释,为什么(不是如何,我知道)二进制减法总是(?)通过添加补码等方式完成。这只是因为需要更多的逻辑门吗,还是有其他更为复杂的原因?例如,如果结果为负数,则可能会出现问题 - 表示法可能必须更改。你能想到更多的原因吗?


你可能想看一下这个相关的问题:https://dev59.com/13NA5IYBdhLWcg3wBo5m - Rick Regan
3个回答

5
考虑一个8位加法器。有两组8个信号输入,以及一个进位比特。你可以构建两个几乎相同的电路,然后包括一个多路复用器来选择存储在结果寄存器中的结果。或者你可以在一个操作数的路径中添加一行XOR门。通过与1进行异或操作,你可以得到补码。你还将这个“1”馈送到加法器的进位输入中,因为X-Y = X + ~Y +1。现在你有了一个略微更大的电路,可以完成两个操作,而不是更多的电路。你还可以将一个参数馈送0,并使用XOR门来实现NOT。加法器也可以稍微修改以执行其他操作 - 如对两个操作数进行XOR - 只需很少的电路即可。这一切都追溯到小规模集成电路时代,当时需要最小化门电路。自那时以来,没有任何理由改变它。请参见以下74181 4位ALU电路图,它可以执行许多操作:74181描述

这是一个很好的提示。我之前在有关微处理器的书中看到过74181 ALU,但没有那么详细和特别是交互式的应用程序。 - tmr

0

你已经说到点子上了,这完全与芯片上的空间有关。为什么要用更多的电路拖累ALU呢?那是可以用于逻辑运算、一个更小的ALU和更多内存的空间。


0
在汇编级别上将减法分解成两个操作比向处理器电路添加额外的功能更容易。本质上,您只是在添加相同的东西,只不过这将成为一个单一的操作,如果将其留作补码的加法,则可以重复使用加法和补码电路,而不是浪费处理器空间来添加已经拥有的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接