第二章运算方法与运算器
运算方法:指算术(四则)运算和逻辑运算,在运算器的实现方法,而实现这两种运算的硬设备就是算术逻辑部件ALU(Arithmetic
and Logic Unit)或称运算器
由于逻辑运算及实现较简单,所以本章主要讨论计算机中算术四则运算以及运算器的逻辑结构。
2.1.1为什么要进行运算方法的研究
将实际数,用机器数表示;计算机特定的运算方式:定点,浮点;早期运算器只设加法器和寄存器;采用什么样的额算法与运算器的结构密切相关,这两者的设计是相互影响的
2.1.2一个实际数机内表示所面临的问题
一个实际数通常由数符。数码。小数点三部分组成,因此,讲一个实际数机内表示要解决的三个问题:
符号的处理
两种方法1.,一种是舍弃符号,采用无符号数表示;2另一种是采用符号,并对呼号加以处理;
处理符号只有一条途径,符号数码化。0表示正,1表示负,完全从定义出发得到的。
数码处理
采用二进制数表示,优点:计算机中,数码是有电瓶的高低来表示的,通常高电平代表1,低电平代表0,所以二进制方便,易实现
存在问题:二进制数码效率太低,书写冗长
引进组合二进制数—八十六进制数
具体方法是:从最低有效位开始,三位一划分组成八进制数;四位一划分组成十六进制数。
这种引进,主要是为了书写方便而已,机器内表示并不区别(注意在计算机中式二进制,否则效率会降低,划不来)
BCD码
由于ASCII码与BCD码低四位相同,转换方便(脱马甲)
BCD码中,不采用其它6个二进制数,需要校正
注意:.BCD中商业计算机用的很广,有专门的硬件电路,因为ascii转化二进制校正太复杂划不来
二进制太长,惹人讨厌,引入组合二进制,在机器不变只是书写方便
3小数点处理
不能用数码表示小数点,无法区分!怎么办?
E叫做阶码,mi叫做原数,
当E=0时,参与运算的数是纯小数,为定点小数格式 noa
当E=n时,参与运算的数是纯整数,为定点证书格式
pdp-11
当E=m时,且n>m>0,参与运算的数是浮点数,m不确定浮点表示格式
2.1.3负数如何处理
1符号—绝对值表示
用二进制的最高位(最左边位)用来表示符号,例如0表示正数,1表示负数,但是做运算行不通
2补码表示方法
编码方法:规律(+x) + (-x)=0 x表示十进制数
[-X]=[X]+1 [X]表示二进制的补码
2采用补码表示时,不管多少为二进制数多少位一定十进制数表示为-1,这样就解决了补码数的扩充问题(很重要)即可以简单复制最高位
3补码表示中 0
的表示法师唯一的 这在数学运算中十分有利
5采用补码运算,符号位作为代码可以与数位一起参加运算,无须单独设置符号处理线路
6就大多数小型计算机ALU,只设加法器就可以了,采用了补码运算后,补码可以将正数加负数转化为正数加正数。可以只设加法就可以了
反码
优点:具有对称性,生成容易
存在问题
1.+0
-0不一样
2.
需要加权操作,即反码运算若符号位有进位,则运算结果还要加1(很少使用)
由于补码使用广泛,重点讲解
2.2.1补码加减运算
补码加法:两个补码表示的数相加,符号位参加运算,且两数和的补码等于两书补码之和
2.补码减法
[-Y]补码经[Y]补码怎么得到,算法:最后一个1后不变,其他包括符号1变0
,0变1
2.2.2补码的溢出判断与检测
超出容量,数值位跑到了符号位产生溢出
2溢出检测方法
1, 直接判断法,写出各种情况
2, 采用变形补码(双符号位补码)当结果两位符号的值不一致时表示溢出
3, 采用双高位判断,数值部分最高位产生的进位与符号部分向上产生的进位不一致时表示溢出
2.2.4补码定点加减运算的实现, 实现线路图
2.3
加法器逻辑结构的改进
2.3.1全加器(加法单元)
加法单元式一个三端输入,两端输出的加法网络。
三个输入端:被加数A1,加数B1和低位传来的进位;两个输出端:和Si与本位向高位的进位Ci。当Ai,Bi和Ci-1的撒个变量中1的个数是奇数时,和Si=1:当三个变量中1的个数等于或大于2时,进位Ci=1
1串行加法器与并行加法器
加法器有串、并之分,只设一个全加器的加法器成为串行加法器
如何提高加法器的工作速度,
并行加法器解决了同事对数的各位相加,减少了本身求和延迟。然而,低位向高位产生的进位,姗姗来迟,提高加法器速度仍然是一句空话
所以必须解决进位链的问题
2进位链
通常我们将各位之间传递进位信号的逻辑连接构成的进位线路成进位链
对于ci关系式得出,AiBi,取决于本位参加的两个数,而与低位的进位无关,称其为第i位的进位函数,或称为本地进位,记作Gi
1串行进位方式
即每一级进位直接依赖于前一级的进位,称为串行进位
影响速度原因,所以必须斩断链
2.并行进位方式
从串行进位方式得知,若想尽可能地减少进位传递时间,就要该串行进位位并行进位方式并行进位方式又称为先行进位或同时进位
若想改串行进位方式为并行进位方式,则必须斩断串行进位链,从数学角度就是去掉数据相关项。
每一项只需要2ty时间,但是没有那么多的输入项的门,所以要继续改进
3.分组并行进位方式
具体做法如下:设加法器自唱16位,每4位一组,则可将进位链分为两级
第一级:小组内采用并行进位链
第二级:小组间并行进位链
就是真正的解决了进位链的问题
2.4算术逻辑运算单元举例
算术逻辑运算单元ALU又称多功能函数发生器。通常以典型的四位ALU芯片(74181)为例,介绍其结构
一位ALU逻辑
将其分为三个部分:1有两个半加器构成的全加器;对算术运算和逻辑运算的选择控制门M,3由与或非组成的输入选择逻辑
2.5定点乘法运算
2.5.1原码一位乘法
原码一位乘法基本是从手算演变过来的,即用两操作数的绝对值相乘,符号单独“同号相乘为正,异号相乘为负”的原则处理
于是,原码与原码一位乘法,就变成如何进行两个正数相乘的问题了
手算法存在问题:
1小数点的移动2常规加法器重,一次只能进行两个数相加,无法解决n个数一次性相加3.n位数相乘2N+1加法器
需要解决:1小数点固定2一次只能进行两个数相加3由n位加法器完成
必须进行算法改造:算术结果右移一位
实施方案:
考察乘数Y(被乘数和积已经体现在算法内了, 不用再考察)
1. 运算中,若Yi=1,+X操作;若Yi=0,则Yi=0,则不加X
说明Yi只起判断作用。运算后,Y值无需保留。这样,可将判断Yi操作固定在最低位,即要求Y每完成一步操作,右移一位
2.由于相加在高N位进行,右移出的低位部分,可存入乘数寄存器空出的位置中
为了在机器中实现乘数运算,运算器必须设置三个寄存器AB、C,A寄存器用来存放部分积其初值为0和最后乘积的高位部分,B存放被乘数X、C存放乘数Y,运算后不再保留乘数Y、C寄存器存放乘积的低位部分。
开始Y装乘数,算法结束后,Y装的积的低位部分。
实际上本算法的实质是一个递推关系。
2.5.2
较正法
考虑到,采用补码后(相当于引入负数),当Y<0时[Y]补得位除最后一个1,与原码相同外,它前面的每一位值,均与【Y】原表示相反,所以简单套用上述不行。所以我们想到将补码按普通原码取反,然后将结构较正,使其得到【XY】补,这就是较正法的思想
具体算法:当Y>0时,直接按照补码相乘的结果即为积的补码,当Y<0时,按照补码相乘后再加上【-X】的补码才是积的补码
比较法(重点)
比较法是由布斯夫妇提出的,它是由较正的统一公式出发进一步导出而得到的,
注意,比较法,比较的是Yn+1 与Yn 即 Yn+1 –
Yn得出运算下一步
补码一位乘比较法的运算规则如下
1被乘数与部分积一般采用双符号位,并参与运算。
2乘数可取单符号位以决定最后一步是否需要校正,即是否加【-X】
2. 乘数末增设附加位Yn+1,初始值为0
3. 根据Yn,Yn+1判断位, 0, 0 部分积右移一位;0,1 +【X】补,部分积右移一位;1,0,
+【-X】补,部分积右移一位,;1,1部分积右移一位。
4. 运算n+1步,不移位
2.5.3补码两位乘法
将补码一位乘法(比较法)的两步合为一步进行
补码两位乘法,运算方法可概括为:
1、 被乘数与乘数均以补码表示,且它们的符号参加运算。
2、 设部分积补值为0,并设置了三个符号位。若乘数Y,数值部分的位数为偶数,前设两个符号位;若乘数Y数值部分的位数为奇数,前设1个符号位,且设Yn+1=0、
3、 运算步骤:根据Yn-1、Yn、Yn+1判断操作如上表。
4、 若乘数Y数值部分的位数为偶数,最后一步不移位、若乘数Y数值部分的位数位技术最后一步移一位
2.6定点除法运算
2.6.1原码恢复余数法
算法步骤:
1、 符号单独处理:Qs=Xs异或Ys,取绝对值相除。
2、 做减法,若不溢出(定点小数,要求商小于1)运算开始。
3、 若余数(R)为正,表示够减,商上”1”,左移一位,做减法(+[-Y]补);若余数为负,表示不够减,商上“0”,恢复余数(加上减数),左移一位,做减法(+[-Y]补)
4、 重复N步
5、 最后一步余数为负(不够减),应恢复为正余数。
2.6.2原码不恢复余数法
设连续三个余数为Ri-1、Ri、Ri+1,用定流量方法考查原码恢复系数上商规则,有:
Ri>0,商上1,Ri+1=Ri-Y
Ri<0,商上0,Ri+1=2(Ri+Y)-Y=2Ri+Y
该式表明,当出现不够减时,可不恢复余数,商上0后直接做右移一位做加法:2Ri+Y。这种方法称为原码加减交替法,即不恢复余数法。
总结:算法与计算机具体实现结合起来考虑,才能评价,单从理论求解来看不恢复余数法更好,但是结合计算机硬件实现,恢复余数法更优。
2.6.2补码加减交替法
步骤概括:1比较
2上商 3下一步操作 4商符 5商的较正
注意:正商即为补码商;负商要上反码商,(因为补码商不好算,。用反码商+1较正)
由表格可以看出:R与Y同号上商1,左移一位,+[-Y]补;异号,上商0,左移一位,+[Y]补
上商符 两种常见做法:(以下所说特指商符号,其实除商符号外,其余位商两种方法结果相同)
1第一步先做X补+(-)Y补,
如果X、Y同号,做X补-Y补, 如果X、Y异号,做X补+Y补
这种方法的优点是:求商符与求商值的规则一致。
2一开始就将被除数X当作初始余数ro,ro、Y同号商符为1,ro、Y异号商符为0,显然,按商值规律求得的商符与正确值相反,将它称作假商符,通过求反将它较正
商的较正(注意这是近似算法,但是误差在2(-n))
1对于第一种方法:采用末位恒置1,即+2(-n)修正
对于第二种方法:令假商加(1+2(-n)),即获得较正法的真商。
对于余数注意:如11.1110 右移四位得到,111111.1110
2.7浮点四则运算
2.7.1浮点加减运算
算法步骤:1求阶差,对大阶(使阶码相等)2尾数运算3进行规格化处理,|w|>=0.5
;4。舎入处理:采用0舎1入法,由于原数部分右规溢出位为0,舍去。
5判断溢出:由于阶码两符号位相同,不溢出。
总结:通过加法,可以类比减法。乘除法也可以由加法,得到。本章结束