有意思的加法器

cpu的alu中,最重要的逻辑部件应该是加法器了,计算机内任何逻辑运算都可以用加法器来完成。

加法器又分为好几种,针对不同的使用场景,可以分为带标示加法器和无标示加法器。

无标示加法器

最基本的一位加法器又三个输入两个输出,分别是低位进位cin,输入a,输入b,高位进位cout以及结果F,逻辑电路比较简单,用逻辑运算表达式则为

F = a Xor b Xor cin
cout = a && b || a && cin || b &&cin
 

举个例子:

1 + 1

cin第一位上的运算为0,a和b都是1,所以F是0,满2进1所以进位cout为1,代表第二位进1。

而n位加法器则是有多个1位加法器组合,前一位的cout作为后一位的cin。

 

带标示的n位加法器

无标示的n位加法器的局限性比较多,比如无法处理溢出行为,举个例子,两个8位无符号数加法

1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 1

结果最高有效位会产生进位,结果会溢出,无标示的n位加法器无法处理这种情况,只能做取余操作,即舍掉最高位的进位,那么结果就错误了。还有一个情况是有符号数的运算,有符号数的最高位是符号位,且计算机内部是用补码进行计算,所以最高位的符号位会参与运算,那么如果没有一个标示位标示符号位的运算,那么结果也会出现错误。

所以带标示的n位加法器解决了这个问题。与普通的n位加法器类似,带标示的n位加法器,也有输入输入及进位,只不过最后结果会有好几个标示,这些标示会存放在专用寄存器中,以便控制器处理。主要有以下几个标示:

  1. 溢出标示,处理最高位的进位问题
  2. 0标示,如果所有位上的加法器运算结果F都为0,那么0标示为1,标示结果是0
  3. 符号标示,标示结果的符号位
  4. 进位/借位标示,加法则是进位标示,减法则是借位标示(计算机对减法的运算会转成加法2-1 = 2 + (-1))

有了这些标示,加法器就可以处理很多复杂的运算,比如和mux结合实现带符号数的加法等等

发表评论

电子邮件地址不会被公开。 必填项已用*标注