计算机组成原理第3章 运算器和运算方法.docx
- 文档编号:15343609
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:31
- 大小:2.64MB
计算机组成原理第3章 运算器和运算方法.docx
《计算机组成原理第3章 运算器和运算方法.docx》由会员分享,可在线阅读,更多相关《计算机组成原理第3章 运算器和运算方法.docx(31页珍藏版)》请在冰点文库上搜索。
计算机组成原理第3章运算器和运算方法
第三章运算方法和运算器
3.1补码的移位运算
1、左移运算:
各位依次左移,末位补0
对于算术左移,若没有改变符号位,左移相当于乘以2。
2、右移运算:
算术右移:
符号位不变,各位(包括符号位)依次右移。
(相当于除以2)
逻辑右移:
最高位补0,其余各位依次右移
例1:
已知X=0.1011,Y=-0.0101求[0.5X]补;[0.25X]补;
[-X]补;2[-X]补;[0.5Y]补;[0.25Y]补;[-Y]补;2[-Y]补
[X]补=0.1011[Y]补=1.1011
[0.5X]补=0.01011[0.5Y]补=1.11011
[0.25X]补=0.001011[0.25Y]补=1.111011
[-X]补=1.0101[-Y]补=0.0101
2[-X]补=0.1010(溢出)2[-Y]补=0.1010
3.2定点加减法运算及其实现
3.2.1补码加减法运算方法
由于计算机中的进行定点数的加减运算大都是采用补码。
(1)公式:
[X+Y]补=[X]补+[Y]补
[X-Y]补=[X]补+[-Y]补
(证明过程见教材P38)
例1X=0.001010Y=-0.100011求[X-Y]补,[X+Y]补
解:
[X]补=0.001010[-Y]补=0.100011
则[X-Y]补=[X]补+[-Y]补
=0.001010+0.100011=0.101101
[X]补=0.001010[Y]补=1.011101
则[X+Y]补=[X]补+[Y]补
=0.001010+1.011101=1.100111
例2:
已知X=+0.25,Y=-0.625,求X+Y;X-Y写出计算的过程.
例3:
已知X=25,Y=-9,求X+Y;X-Y写出计算的过程.
例4:
已知X=-25,Y=-9,求X+Y;X-Y写出计算的过程.
解:
(8位二进制表示)
例2:
X=0.0100000Y=-0.1010000
[X]补=0.0100000[Y]补=1.0110000
则[X+Y]补=[X]补+[Y]补
=0.0100000+1.0110000=1.1010000
[X+Y]原=-0.0110000=(-0.375)D
[X]补=0.0100000,[-Y]补=0.1010000
则[X-Y]补=[X]补+[-Y]补
=0.0100000+0.1010000=0.1110000
[X+Y]原=0.1110000=(0.875)D
例3:
X=+0011001Y=-0001001
[X]补=00011001,[Y]补=11110111
则[X+Y]补=[X]补+[Y]补=00011001+11110111=00010000
[X+Y]原=+0010000=(+16)D
[X]补=00011001,[-Y]补=00001001
则[X-Y]补=[X]补+[-Y]补=00011001+00001001=00100010
[X+Y]原=+0100010=(34)D
例4:
X=-0011001Y=-0001001
[X]补=11100111,[Y]补=11110111
则[X+Y]补=[X]补+[Y]补=11100111+11110111
[X+Y]原=-00100010=(-34)D
[X]补=11100111,[-Y]补=00001001
则[X-Y]补=[X]补+[-Y]补=11100111+00001001=11110000
[X+Y]原=-0010000=(-16)D
3.2.2定点加减法运算中的溢出问题
溢出:
运算结果大于机器所能表示的最大正数或者小于机器所能表示的最小负数.溢出只是针对带符号数的运算.
比如:
[X]补=0.1010,[Y]补=0.1001,那么
[X]补+[Y]补=1.0011(溢出)
溢出是一种错误,计算机中运算时必须能够发现这个现象,并加以处理
判断溢出的方法:
1、采用变形补码法
[X+Y]变补=[X]变补+[Y]变补
[X-Y]变补=[X]变补+[-Y]变补
例1X=0.1011Y=0.0011求[X+Y]补
解:
[X]变补=00.1011,[Y]变补=00.0011
[X+Y]变补=00.1011+00.0011=00.1110
所以[X+Y]补=0.1110
例2X=0.1011Y=0.1001求[X+Y]补
解:
[X]变补=00.1011[Y]变补=00.1001
[X+Y]变补=00.1011+00.1001=01.0100
运算结果的两符号位是01,不相同,发生溢出,因第一符号位是0,代表正数,所以称这种溢出为“正溢出”。
例3X=-0.1101Y=-0.1010求[X+Y]补
解:
[X]变补=11.0011[Y]变补=11.0110
结果的两符号位是10,不相同,发生溢出,因第一符号位是1,代表负数,所以称这种溢出为“负溢出”。
总结:
判断溢出的原则:
当两符号位相同时,正确。
“00”表正数,“11”表负数。
当两符号位不同时,溢出;“01”表正溢出,“10”表负溢出
2、利用符号位的进位信号判断
原理:
设数码位向符号位的进位为Cn-1,符号位向更高位的进位为Cn。
则
OF=Cn-1⊕Cn
当OF为“0”表示无溢出,为“1”表示溢出了。
比如:
[X]补=0.1010,[Y]补=0.1001
[X]补+[Y]补=1.0011
Cn-1=1,Cn=0则OF=1
3根据加数、被加数、和的符号判断
当操作数中的加数与被加数符号相同时,若结果的符号与操作数的符号不一致,表示溢出;否则,表示无溢出.
3.2.1补码加减法运算的实现
补码运算只需要设置一个加法器。
采用串行进位方式的n位并行加法器的逻辑结构。
n个全加器(FAn-1~FA0),进位信号Ci从低位向高位逐位串行传送。
两个n位长的补码A和B,连同C-1一起传送到全加器的输入端,得到n位运算结果S,最高位为符号位。
左上方的半加器用来判定溢出。
如何区分加减运算?
M=0时C-1=0实现加法运算
M=1时C-1=1实现减法运算
3.3定点乘法运算及其实现
3.3.1原码一位乘法
(1)运算规则
设x=xfx1x2...xn,y=yfy1y2...yn,乘积为P,乘积的符号位为Pf则:
Pf=xf⊕yf|P|=|x||y|,求|P|的运算规则:
①被乘数和乘数均取绝对值参加运算,符号位单独考虑。
②被乘数取双符号,部分积的长度同被乘数,初值为0。
③从乘数的最低位yn开始判断:
yn=1,则部分积加上被乘数|x|,然后右移一位:
yn=0,则部分积加上0,然后右移一位。
①重复③判断n次。
(2)逻辑实现和操作流程
实现原码一位乘法的硬件逻辑如图所示。
原码一位乘法的操作流程如图所示,图中的i用于计数,它表示循环次数(相加/移
位的次数),随着y的右移,yn位总是表示乘数将要被判断的那一位。
3.3.2补码一位乘法
补码一位乘法的运算算法是Booth夫妇首先提出来的,所以也称Booth算法,其运算规
则如下:
1符号位参与运算,运算的数均以补码表示。
②被乘数一般取双符号位参加运算,部分积初值为0。
③乘数可取单符号位以决定最后一步是否需要校正,即是否加[-xl补
④乘数末位增设附加位yn+1,且初值为0。
⑤按下表所示进行操作。
⑥按照上述算法进行n+l步操作,但第n+l步不再移位,仅根据y0与yl的比较结果作
相应的运算即可。
YnYn+1操作
00部分积右移一位
01部分积加X补,右移一位
10部分积加-X补,右移一位
11部分积右移一位
(2)逻辑实现和操作流程
3.4定点除法运算及其实现
3.4.1原码除法运算
1.恢复余数法:
(1)对于n位除数来说,为了保证商数的数码位n位,必须要求被除数的高端n位小于除数,否则,商数的小数点前将位1,表示除法运算产生溢出,对于定点除法运算来说这是不能允许的,遇到这种情况,除法运算应终止。
(2)每次上商总是比较一下余数和除数的大小,若余数大于除数时,则商“1”,且将余数减去除数后左移1位得新的余数,若余数小于除数则商“0”,只将余数左移1位得新的余数,上述过程重复进行n次,共上n位商数,完成n位除法运算的全过程。
(3)最后根据符号位单独运算的结果,给商数冠以正确符号,余数的符号位应与被除数相同。
上述操作过程在计算机中实现,需要稍做如下改动:
(1)为判定本次除法运算是否产生溢出,首先需要将被除数的高n位减去除数,若其余数大于“0”,则判定本次运算溢出,立即终止除法运算过程;若余数小于“0”,则应将除数加回去恢复被除数,继续除法运算过程。
(2)每次上商之前总要做一次余数减除数的操作。
若该余数大于或等于“0”,则表示够减,商“0”后将该余数左移一位得新余数;若该余数小于“0”,则表示不够减,商“0”,而且本次减法运算不该做,应将除数加回去,恢复原来的余数后将其左移一位得新余数,“恢复余数法”因此面遇名。
上述手算例子采用原码恢复余数法在计算机中的操作过程如下:
例题1:
已知:
X=+0.1001,Y=-0.1101,求X/Y=?
解:
符号位单独运算:
Qf=Xf⊕Yf=1
[∣X∣]原=[∣X∣]原=0.1001,[∣Y∣]原=[∣Y∣]原=0.1101,
[-∣Y∣]原=1.0011,
最后给出结果,冠以正确得符号:
商数Q=-0.1011
余数R=+0.0001×2-4
例题2:
已知:
X=-0.01010,Y=-0.11001,求X/Y=?
从上述操作过程可以看出,恢复余数法存在两个明显的缺点:
(1)商“0”时,需要恢复余数,降低了除法运算得速度。
(2)操作步骤不规则,商“0”时只需做3步操作,而商“1”时需要做5步操作。
2.加减交替法
“加减交替法”又称做“不恢复余数法”它是由“恢复余数法”改进而来的。
我们先分析恢复余数法的操作过程:
第i次操作是将余数Ri左移一位后减去除数Y得新的余数Ri+1,即Ri+1=2Ri-Y。
若Ri+1≥0则商“1”,然后进入第i+1次的操作为:
2Ri+1-Y
若Ri+l<0则商“0”,然后需恢复余数,即:
完成Ri+l+Y=2Ri,才进入第i+1次操作为:
4Ri-Y
如果当第i次操作商“0”时,不恢复余数,而是直接进入第i+1次操作,将小于“0”的余数(Ri+1)继续左移一位后“+Y”,即:
2Ri+1+Y=2(2Ri-Y)+Y=4Ri-Y
这样做的结果与恢复余数后的第i+1次操作完全相同。
说明恢复余数的操作并不是必需的。
可将恢复余数法改进为:
若Ri+l≥0,商“1”,下次作2Ri+l-Y
若Ri+l<0,商“0”,下次作2Ri+l+Y
“加减交替法”由此而得名。
加减交替法得操作步骤可用流程图描述如图3-7所示。
例题3:
已知:
X=+0.1001,Y=-0.1101,求X/Y=?
最后给商数和余数冠以正确得符号:
商数Q=0.01100
余数R=-0.10100×2-5
对上述操作过程作如下说明:
(1)商的第一位应为“0”,它仅仅表示未产生除法溢出,若该位商为“1”;,则表示除法运算溢出,应立即终止除法运算过程,并向CPU报告本次除法运算产生了溢出。
(2)若最后余数为负值,则需要纠余,增加一次+[|Y|]补的操作。
(3)最后应给商数和余数冠正确符号。
(4)加、减交替法完全克服了恢复余数法所存在的两个缺点,因此在现代计算机中原码除法运算广泛采用加、减交替法。
实现原码加减交替法的除法器逻辑结构如图3—8所示。
从图3—8中可以看出,组成该除法器的主体是一个n+1位的加法器,用来完成+Y或-Y的操作;n+1位的寄存器R。
,运算前用来存放被除数的高端n+1位,运算后用来存放余数;n+1位的寄存器R1,运算前用来存放被除数的低n位,运算后用来存放商数,这两个寄存器应能连接起来向左移位;n+1位的R2寄存器用来存放除数,它能以正送和反送两种方式将除数Y送至加法器的右输入端,以实现+Y或-Y的操作。
∑f是加法器的最高位,即余数的符号位,当余数为正时(即∑f=0)商上“1”(qn=1),R2寄存器中的除数反送至加法器并在加法器的末位加1,实现+[-|Y|]补功能。
当余数为负时(即∑f=1)商上“0”(qn=0),R2寄存器中的除数正送至加法器,实现+[|Y|]补功能。
计数器用来计上商的位数,其初始值为-n,做完n次操作计数器计到“0”,将C÷触发器置“0”,除法运算结束。
图3-8中部的异或门用来完成符号位的单独运算。
3.4.2补码除法运算
原码除法像原码乘法一样具有明显的缺点,尤其是对于补码存储的计算机,采用原码除法更不方便。
“补码除法”是指“符号位和数码位一起参加运算,自然得到商数和余数得正确符号”。
补码除法仍然采用加减交替法,参加运算的操作数是补码,求得的商数和余数也是补码。
于是,要分两种情况来上商:
(1)商为正数(即:
X、Y同号)
按原码上商:
够减,商“1”,下次作2Ri+l+Y
不够减,商“0”,下次作2Ri+l-Y
(2)商为负数(即:
X、Y异号)
按反码上商:
够减,商“0”,下次作2Ri+l+Y
不够减,商“1”,下次作2Ri+l-Y,最后要在商数得末位加“1”
从上述上商原则中发现,够减还是不够减已经不能成为商“0”还是商“0”的依据,因此在补码除法中必须妥善地解以下两个问题:
(1)对于两个带符号的数,应如何比较它们的大小,以确定够减还是不够减?
(2)应如何确定应该商“1”还是商“0”。
稍作分析可得到如下的结论:
(1)两个符号相同的数比较大小,应该用减法来比较器大小;两个符号不同得数,应该用加法来比较其大小。
(2)两数比较后所得到得余数与减数得符号相同,则商应为“1”,反之,若所得余数与减数的符号不相同,则商为“0”。
于是,采用补码加减交替法的除法操作过程可概括为:
(1)若X与Y同号,则第—次做X-Y,且商‘0”为商得符号位,后做2R+Y操作得余数。
若X与Y异号,则第一次做X+Y,且商为“1”为商的符号位,后做2R-Y操作得余数。
(2)若余数与Y同号,商“1”,后做2Ri-Y。
若余数与Y异号,商“0”,后做2Ri+Y。
,
(3)第
(2)步操作重复进行n-1次。
(4)第n次上商后不再进行余数左移和+Y、-Y的操作。
(5)若商数为负值,则在商数的末位加“1”。
(6)若最后余数与被除数X异号,则需要纠余,增加如下操作:
若X、Y同号,用+Y纠余;
若X、Y异号,用-Y纠余。
上述操作过程可用操作流程图描述,如图3—9所示。
所以:
Q补=[X/Y]补=1.0101
Q原=[X/Y]原=1.1011
由于最后余数与被除数符号相同,所以不需要纠余:
R补=1.1111
R原=1.0001×2-4
R=-0.0001×2-4
所以:
[Q]补=110100
[Q]原=101101
Q=-01100=-12
[R]补=010100=[R]原
R=+10100=20
对上述实例操作过程作如下说明:
(1)补码加减交替法不能自动溢出,因此在补码除法运算之前,必须先比较被除数高端n位与除数的绝对值,确认不会产生除法溢出后,才可开始除法运算。
(2)补码加减交替法完全克服了原码加减交替法的缺点,符号位不需要单独运算,可自然得到商数和余数得正确符号。
(3)若最后一次余数与被除数异号,则需要纠余:
X、Y同号,则+Y纠余,X、Y异号,则-Y纠余。
3.5浮点算术运算
3.5.1浮点数的加、减法运算
设有两个浮点数x和y,它们分别为
x=2m•Mx
y=2n•My
其中m和n分别为数x和y的阶码,Mx和My为数x和y的尾数。
(1)对阶
对阶的原则:
小阶向大阶看齐。
若m>n则将操作数y的尾数右移一位,y的阶码n加1,直到m=n。
若m (2)尾数相加 尾数相加与定点数的加、减法相同。 (3)结果规格化 ①当运算结果的尾数部分不是11.0XX…X或00.1XX…X的形式时,则应进行规格化处理。 ②当尾数符号位01或10需要右规(右规的方法是尾数连同符号位右移一位、和的阶码加1),右规处理后就可得到11.0XX…X或00.1XX…X的形式,即成为规格化的数。 ③当运算结果的符号位和最高有效位为11.1或00.0时需要左规。 左规的方法是尾数连同符号位一起左移一位、和的阶码减1,直到尾数部分出现11.0或00.1的形式为止。 说明: (1)关于舍入的操作 在进行对阶和规格化的过程中,都会遇到舍入的问题,采用不同的舍入法,可以使算结果具有不同的精度。 比较常用的舍入法有: ①截尾法。 遇到舍入时,不管被舍掉的是什么值,应全部将其舍弃,这是最简单的舍入法。 这种方法精度低。 ②恒置“1”法。 遇到舍入时,不管右移多少位,总是将右移后保留的最后一位恒置“1”。 这种方法精度稍高于前者。 ③“0”舍“1”入法。 遇到舍入,若被舍弃的最高位为“0”则舍弃,若为“1”则在保留的最末位上加1。 这是一种精度较高的舍入法,但速度较慢,“1”入时要增加一次加法操作。 (2)浮点加减法运算中的溢出问题 尽管浮点数表示数的范围很大,但是在加减法运算中,同样有可能出现运算溢出的情况。 而浮点运算中溢出判定的方法与定点运算完全不同,浮点加减法运算的溢出与尾数无关,由它的阶码来决定。 当运算结果的阶码大于它所能表示的最大正数或小于它所能表示的最小负数时,表示浮点运算产生了溢出。 例如,若某次浮点加减法运算的结果为: [X±Y]’补=00.111,10.1011100111 则应对其进行向右规格化操作,即将尾数右移一位成为: 11.010*******,阶码应加l,即应进行如下操作: 00.111 +00.001 01.000 这是因为阶码已超出它所能表示的最大正数(+7),表明本次浮点运算产生了“溢出”。 同样,若某次浮点加减法运算的结果为: [X±Y]’补=11.010,00.0000110111 应对它进行向左规格化操作,即将尾数左移4位成为: 00.1101110000;阶码应减4,即进行如下操作: 11.010 +11.100[-4]补 10.110 这是因为阶码已超出它所能表示的最小负数(-8),表明本次浮点运算产生了“溢出”。 由此可以看出,浮点加减法运算是否产生了: 溢出”是由运算结果的阶码来确定的,当阶码的两位符号位相异时,表示产生了溢出,这也正是阶码要采用两位符号位的原因。 但是溢出的性质是由尾数的符号位来确定的,若其尾数的符号位为正,则为“正溢出”,否则为“负溢出”。 3.5.2浮点乘法运算 设x=2m•Mx,y=2n•My则x•y=2m+n(Mx·My),其中,Mx,My分别为x和y的尾数。 浮点乘法运算也可以分为3个步骤: 1.阶码相加 2.尾数相乘 尾数相乘可按定点乘法运算的方法进行运算。 3.结果规格化 3.5.3浮点除法运算 x=2m•Mx,y=2n•My则x÷y=2m+n(Mx÷My),其中,Mx,My分别为x和y的尾数。 浮点除法运算也可以分3步进行: (1)如果被除数的尾数大于除数的尾数,则将被除数的尾数右移一位并相应调整阶码。 (2)阶码求差 (3)尾数相除 两个尾数相除与定点除法相同。 3.5.4浮点数的阶码运算 [x+y]移=[x]移+[y]补 [x-y]移=[x]移+[-y]补 使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符号位总用0参加加减运算,则溢出条件是结果的最高符号位为1。 此时,当低位符号位为0时,表明结果上溢;为1时,表明结果下溢。 当最高符号位为0时,表明没有溢出;低位符号位为1,表明结果为正;为0时,表明结果为负。 下面通过一个实例来说明其运算过程 例如: 已知X=0.0100×2-111,Y=+0.1111×2-010,求Q=X/Y=? 解: [X]’原=11.111,11.0100[X]’补=11.001,11.1100 [Y]’原=11.010,00.1111[Y]’补=11.110,00.1111 (1)阶码相减 [Xe]’补=11.001 +[-Ye]’补=00.010 [Qe]’补=11.011 (2)尾数相除(拟采用补码除法) [Xm]’补=11.1100 [Ym]’补=00.1111 [-Ym]’补=11.0001 于是: [Qm]’补=11.1100 [Rm]’补=11.1100×2-4 (3)对结果规格化――将尾数左移一位,阶码减1 [Q]’补=11.011,11.1100=11.011,1.1000 [Qm]’原=11.110,11.100 最后得: 商数Q=-0.1000×2-110 余数R=-0.0100×2-4 3.6逻辑运算及其实现 计算机中除了进行加、减、乘、除等基本算术运算以外,还可对两个或一个逻辑数进行逻辑运算。 所谓逻辑数,是指不带符号的二进制数。 利用逻辑运算可以进行两个数的比较,或者从某个数中选取某几位等操作。 例如,当利用计算机做过程控制时,我们可以利用逻辑运算对一组输入的开关量做出判断,以确定哪些开关是闭合的,哪些开关是断开的。 总之,在非数值应用的广大领域中,逻辑运算是非常有用的。 计算机中的逻辑运算,主要是指逻辑非、逻辑或、逻辑与、逻辑异或等四种基本运算。 1.逻辑非 “逻辑非”由反相器来实现。 2.逻辑与 “逻辑与”由与门来实现。 3.逻辑或 “逻辑或”直接由或门来实现。 4.逻辑异或 “逻辑异或”由异或门来实现。 3.7运算器的分析与组成 1.运算器中数据传送通路 由于计算机内部的主要工作过程是信息传送和加工的过程,因此在机器内部各部件之间的数据传送非常频繁。 为了减少内部数据传送线并便于控制,通常将一些寄存器之间数据传送的通路加以归并,组成总线结构,使不同来源的信息在此传输线上分时传送。 根据总线所处的位置,总线分为内部总线和外部总线两类。 内部总线是指CPU内各部件的连线,而外部总线是指系统总线,即CPU与存储器、I/O系统之间的连线。 本节只讨论内部总线。 按总线的逻辑结构来说,总线可分为单向传送总线和双向传送总线。 所谓单向总线,就是信息只能向一个方向传送。 所谓双向总线,就是信息可以向两个方向传送,既可以发送数据,也可以接收数据。 下图图(a)是带有缓冲驱动器的4位双向数据总线。 其中所用的基本电路就是三态逻辑电路。 当“发送”信号有效时,数据从左向右传送。 反之,当“接收”信号有效时,数据从右向左传送。 这种类型的缓冲器通常根据它们如何使用而叫做总线扩展器、总线驱动器、总线接收器等等。 图(b)所示的是带有锁存器的4位双向数据总线。 它主
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机组成原理第3章 运算器和运算方法 计算机 组成 原理 运算器 运算 方法