本系列主要是《数字设计和计算机体系结构》和一些相关书籍的读书笔记,并没有专门为读者的阅读体验认真做设计,敬请谅解(时间不多)。
下边这些数字电路模块是构成CPU的基础,在了解CPU执行指令过程之前,需要把这些模块的原理都搞清楚。
加法器
前边说过处理单个二进制位相加的加法器:
但是我们使用的加法是好多位的,这也好说,把多个全加器串联起来就好了:
从右到左看这个电路图,这是一个32位二进制加法的电路图。初始的时候进位为0,然后每一位相加的进位输出当作高一位相加的进位输入,这样就跟接力棒一样,以此经过各个全加器之后,最后 C31S31S30S29S28…S2S1S0 就是最后的加法结果。我们把这个电路画个简单的示意图:
这种加法器由于需要先使用低位的加法器,把进位输出当作高一位的进位输入类似接力棒的方式传递进位,所以效率有点慢。后来人们又发明了些别的加法器电路,以求更快的实现二进制加法运算,比如先行进位加法器、行波进位加法器啥的,由于时间有限,我就不想看了,等以后时间充裕了再研究。
对于减法来说,某种程度上可以把它转换成一种加法。比方说我们现在处理10以内的减法,比方说下边这个式子:
5 - 2 = 3
其实这个减法可以转换成这样的写法:
5 + (10 - 2) - 10 = 5 + 8 - 10
其中,2和8是相对于10的补数,a-b相当于a和b补数的和再减去进位。对于二进制减法,我们也可以用这个方式。比方说我们做4位二进制内的减法,比方说这样
1001 - 0010 = 1001 + (10000 - 0010) - 100