什么是移位器
前面我们解决了加法问题,那乘法问题如何解决呢?——移位器。
举个例子,有一个二进制数是00010000,转换成10进制是16,现在左移一位,变成00100000,转换成10进制就变成了32,这说明什么?——在二进制中,左移就是乘以2,右移就是除以2,这样就把乘法和除法解决了。
我们来看看左移具体是怎么实现的?

很简单,就是两个寄存器,连线的时候左移1位即可。当R1的“e”处于on时,R2的“s”先on后off,这样R1中所有数据就会传递到 R2中,不过数据左移了一位。通常情况下,shift in会和shift out连接。
和左移类似,右移就是两个寄存器连线的时候右移1位。

我们可以把左移和右移抽象成如下形式:

L左移 R右移
什么是比较器
顾名思义,比较器的功能就是对输入的两个数据进行比较,输出两个标志位:是否相等;若不等,谁大?
相等是比较容易实现的,用 异或门 就可以实现:每一位输出相同,则异或门输出off,如果所有位的输出都是off,则两个输入相等。

如果是 8 位的话,可以将输入输出端用总线表示:
也就是说我们可用用异或门实现两个输入是否相同;要比较两个数谁大,事需要一点小技巧的。要从最开始为进行比较,开始位若不同,则为1的那个数大;若开始位不同,则比较下一位;如此往复,直至最后一位。
就需要的异或门的基础上,再增加4个逻辑门,比较器中每一位的实现逻辑如下:

每一位比较器的输入有2个:a和b;
从上一位传递过来的另外2个输入(前面位的比较结果):all bits above are equal,“a”larger。
输出是截止至当前位的比较结果:all bits equal so far,“a”larger。
下面具体分析一下:
- 当异或门1输出为on时,表明a和b不相同;经过非门2后,为off,意为unequal;
- 当异或门1输出为off时,表明a和b相同;经过非门2后,为on,意为equal;
如果非门2当前位输出为on,且从之前位传过来的标志也为on,表明截止至当前位,输入a和b是相同的,这个可以通过与门3来实现;
与门 4输出为on时需要满足三个条件:
1)当前位a和b不同;
2)a的状态为on;
3)所有之前位都是相等的。
当这三个条件都满足时,表示a大;
当 与门 4输出为on时, 或门 5输出为on;并且在当前位之后的所有位置, 或门 5都是on。
当b大的时候,equal标志位和a larger 标志位都为off。
把8个1位比较器堆积起来,就是一个8位比较器了,如下所示:

可以简单抽象成:

比较器可以和异或门共用一部分电路,同时增加两个输出标志equal和 a larger 。
#总线# #量子计算机操作系统# #硬件工程师# #CPU选AMD还是英特尔#
#华为开发电脑用的 CPU 与 GPU#