电路是怎么实现运算的?

八位运算电路
    从现在开始将研究能够处理一字节的电路,一字节(byte)也就是8比特(bit),八位运算电路涉及如何处理八条线路的问题。先从较简单的八位非电路开始,它是一位非电路的八个拓展,其原理图如下:

82ae370da917439dbd38fbe0820596ed.png

    后面章节所使用主要使用右图的简记电路符号,注意的是线路引脚的注释8是指示该线路是八位数据线,而不是1位,后期复杂电路可能采用颜色注释标记表示。该八位非可以将八个信号取反输出。
    八位或是另一种八位逻辑电路,可以将两个八位信号逐一“按位与”,“按位与”是一种二元逻辑运算,其运算法则和或门真值表逻辑是一致的:0或0等于0,0或1等于1,1或0等于1,1或1等于1。电路原理图如下: 

4018912c88414d3d92ffb1e75abed412.png

每个输出组的同一位置都连接在相同的与门上,最终通过与门输出八位数据。其简记电路符号如下图所示:

04c67e7d150a4bb1a80c786a5fdc5e86.png

   同样注意的是线路引脚的注释8是指示该线路是八位数据线,而不是1位,后期复杂电路可能采用颜色注释标记表示。该八位或可以将两组八位信号按位与输出。
    对于两输入一输出的基础逻辑门,它们均可以按照八位或这种电路图原理对其本身进行八位拓展,分别有八位与,八位与非,八位或非,八位异或,八位同或,电路符号分别为:8-AND,8-NAND,8-NOR,8-XOR,8-XNOR。

八位加法器
   加法器是计算机中央处理器(CPU)的一个重要部件,加法器最简单,最初级的一种电路便是我们之前讨论过的全加器,然而全加器只能计算三个bit位相加,而我们现在需要能够将两个字节相加。
全加器的简记符号如下:

ac6684fd1e644cf99a6378653c2bceff.png

   我们将能计算三个bit位相加的全加器拓展到八位之前,应该考虑如何拓展到较小的bit位,根据多位二进制加法的相加法则,每位相加的同时,还需要多处理一个来自于前一位的进位,因此每一位需要处理两个加数一个进位。下方示例图中展示了10101+01100的加法,结果等于100001,但最高位超出五位,如果运算此算式的加法器输出只有五位,那么则输出00001,这种现象称为溢出。

d072866d3a2043d9b7ee84667b1e7c71.png

  当然输出五位代表着四位和,一位进位(CAR),进位CAR可以被视为第五位。下图是按照加法法则搭建的2bit加法器,它可以处理两个bit位相加,同时输出是两位+一个进位CAR,可以被视为三位。计算11+11时,结果位110,两个和位分别为1和0,进位为1,不过注意的是该加法器如果不处理进位,则实际有效求和只有两位,我们目的所搭建的八位加法器是八位和位,一个进位CAR,进位如果接入后续电路,可以被视为第九位。八位加法器电路原理图如下: 

7fac64c4266f4922aee1f27f54e779a1.png

    简记符号如下图,它有两个八位输入和一个一位进位输入,通常进位输入不使用,有一个八位输出和一个一位进位输出,进位输出可以利用,也可以不用。 

15870e13bbc245e7b4d37cc8ca59ce01.png

机器数运算
   数值在计算机中我们称之为真值,因为数值在计算机中需要以二进制存储,因此真值在计算机中的表现形式为机器数。机器数对应的实际数值叫真值。
    我们刚刚研究过一字节的电路,现在我们先具体来讨论一字节的机器数。我们先引入机器字长的概念,所谓机器字长就是存储真值所用的bit位。一字节机器字长也就是八比特的机器字长,如下图表示:

51285a20cd31464d8ce017901d3979b9.png

    该图中展示了bit数位以及对应的十进制数,当相应位置为1时,对应的十进制应该相加。该机器数是采用的是无符号整数码制,意味着该机器数对应的真值是正整数。其最大值为1111 1111,即按对应的十进制从1加到128,为255。因此8bit机器字长能表示0-255的十进制范围。
    为了后续将数字运算代入电路,我们引入两种元件:集线器和分线器,它们的作用是将多位线分成低位线,比如8位数据线可通过分线器分成8个一位数据线,8个一位数据线也可以通过集线器合成1个八位数据线。八位分线器示意图如下图,将展示通过八位数据线输入7,分线后,八个一位线的输出情况。下图是分线后又集线,操纵每位数据线可以在它们之间添加电路。

4038a8f6f6314bae8b3937b27e29672b.png

根据八位二进制-十进制按权展开公式:

bfa30b2fc43d4cdd8698f54cb107fde0.png

d0a413afd7f34d378d42af553a244898.png

也就意味着所有位权的幂被加一,同时可以被视为B序列整体向高位移动一位。由于在计算机中高位到低位在逻辑上是按从左往右排列,因此这种向高位移动称之为左移,当二进制的每个位均向左移动一位时,从相对运动来看,每个位对应的位权序列在向右移动,这就意味着64位权数移动后被前方128位权数覆盖,每一位皆是如此,所以左移后的值整体乘以了2,同理右移是除以2。需要注意的是当最高位左移后将溢出,此时的数值并不是整体乘以了2,我们所讨论的所有结论都应该是正常的不溢出的现象。对于集线器和分线器,我们可以将分线器分出的每一位线错开一位接在集线器上来制作左移器和右移器,来实现乘以2和除以2的操作。

321f1bcb78c04f5da6e909b5620d6322.png 

    取补运算是另外一个重要的运算,我们之前所研究过的八位非电路可以来实现此功能,两个互补的数相加必定每一位都是满位,例如:101010+010101=111111。
    在十进制中,6482+3517=9999,我们可以说:6和3是互补的,4和5是互补的等。一个八位机器数经过八位非后再与其经过前的数相加会使各位均为1,如果此时再加1,则将全部进位。 

b90a581fd2854e5baa65c6d99a200059.png

    接下来我们开始介绍负数,之前所有的讨论均是正数,那么负数该如何表示?我们前面所有机器数采用的是无符号整数码制,机器数都表示正整数的真值。下面我们将采用原码码制。八位机器字长的原码码制机器数中,第八位是符号位,剩下七位为数位,符号位为0时,表示正数,符号位为1时表示负数。下面将给出+1,-1,+127,-127,+45,-45的原码表示: 

37678788b6104fa0b96c99b397c8b800.png

    特殊的是,在原码中,0可以表示为1000 0000和 0000 0000。引入正负数之后,原码进行加减法运算较为繁琐,因此下面介绍采用补码的方式。
    在补码中,正数的补码和原码是一致的,负数的补码相当于原码的非符号位取反再加1,例如原码-1表示为1000 0001,其取反码后为1111 1110,再加1得1111 1111。因此1111 1111在补码的码制中表示-1,还可以如下图权位来展开,最高位变成了-128。在补码码制下进行二-十进制准换时,如果符号位是0,则正常读取,如果是1,则可以计算-128+(非符号位的二进制数),11111111的符号位是1,因此是负数,所以计算方法为-128+(111 1111),即-128+127=-1。补码1000 0001表示的是-128+(000 0001),即-128+1=-127。 

522564c890824216ab9cdd1655e1181c.png

   下面将搭建一个八位的元件,在补码的码制下,它可以将输入的机器数经过处理,变成绝对值大小相等的负数,也就是相反数,例如把-45变成45,32变成-32等等。首先注意的是在补码的码制下,因此我们很容易想到符号位直接接入非门取反即可,因为符号位1或0接入非门后便会变成0或1,因此来完成正负号转换。并且我们之前提到过,原码的非符号位实际就是该数值的绝对值,而补码的非符号位实际是原码的取反加一,因此如果逆向,将补码的非符号位同样的减一后再取反,便可以复原原本的原码非符号位,此时便是绝对值。
    我们搭建电路时需要注意,减一这项操作我们之前并没有做过任何相应的元件来满足这个功能,因此另外一种思路是,将补码的非符号位取反后加一也可以得到原码的非符号位。因此已知补码,实际上有两种方式可以推导出原码,惊讶的是从原码到补码的相互转换并不只有逆向转换。下图给出了原码补码相互转换的基础方式,这是一种不唯一的映射关系。 

adc8c92d93d746e5acfb6399fdaba35c.png

    我们使用补码非符号位按位取反后+1的规则来转换原码非符号位,+1操作我们可以使用一个八位加法器来实现。最终取相反数的元器件电路原理图如下。 

68a4bad265664fd09a64d4357c4aa8f4.png

    A-B实际上被看作为A+(-B),因此取反器在减法器中有重要作用,而减法器的详细讨论将会在算术引擎AE中介绍。 

 

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值