第三章3计算机组成与结构_第1页
第三章3计算机组成与结构_第2页
第三章3计算机组成与结构_第3页
第三章3计算机组成与结构_第4页
第三章3计算机组成与结构_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第三章:运算方法和运算器3.1数据与文字的表示方法

3.2定点加法、减法运算

3.3定点乘法运算

3.4定点除法运算

3.5定点运算器的组成

3.6浮点运算方法和浮点运算器

3.1数据的表示方法和转化3.1.1数值型数据的表示和转化1.数制:基于r个基本符号表示数值,称其为基r数制。2.不同数制间的数据转化

(1)二进制数、八进制数和十六进制数之间的转化从二进制到八进制,以3位为1组例3.4(1101.0101)2=(001101.010100)2=(15.24)8从二进制到十六进制,以4位为1组例3.5(11101.0101)2=(00011101.0101)2=(1D.5)16

从八进制或十六进制到二进制,顺序将1位写成3位或4位例3.6(15.24)8=(001101.010100)2=(1101.0101)2从八进制到十六进制,用二进制为媒介(2)二进制数转化成十进制数利用(N)2=∑Di*2i

Di为权,2为“底”。(3)十进制数转化成二进制数整数部分采用除2取余,小数部分采用乘2取整(4)十进制数转化成八进制数参照上面3.数据符号的标示用正(+)负(-)号后跟绝对值表示真值,在计算机中用0表示正号,1表示负号,正号有时可以省略。3.1.2十进制数位的编码与运算1.十进制数位的编码与运算(1)有权码

表示一位十进制数的二进制码的每一位有确定的权。

BCD码:4位二进制表示一位十进制数,每一位的权值分别为8、4、2、1,所以又称8421码。

运算规则:如果两个一位BCD码相加之和小于或等于(1001)2,即(9)10,不需要修正;否则加6修正,并向高位进位。例3.101+8=90001+10001001不需要修正4+9=130100+10011101+0110修正100119+7=161001+011110000+01110修正10110还有几种有权码,如2421,5211,4311码,见课本63页表3.2(2)无权码表示一个十进制的二进制的每一位没有固定的权值。

余3码:在8421码的基础上,给每个编码都加3。

运算规则:两个余3码相加不产生进位时,减去3;否则加上3,同时将进位送入高位。例3.1128+55=83

0101+1000111000111011101110000011+00110110另外的无权码参见课本63页表3.32.数字串在计算机的表示与存储(1)字符形式。一个字节存放一个十进制的数位或符号位。为了指明这样一个数,需要给出该数在主存中的起始地址和位数(串的长度)。例:+15400101011001100010011010100110100即2B313534-23001011010011001000110011即2D3233(2)压缩的十进制数形式。一个字节存放两个十进制的数位。它比前一种形式节省存储空间,又便于直接完成十进制数的算术运算,是广泛采用的较为理想的方法。用压缩的十进制数串表示一个数,要占用主存连续的多个字节。每个数位占用半个字节(即4个二进制位),其值可用二-十编码(BCD码)或数字符的ASCII码的低4位表示。符号位也占半个字节并放在最低数字位之后,其值选用四位编码中的六种冗余状态中的有关值,如用12(c)表示正号用13(d)表示负号。在这种表示中,规定数位加符号位之和必须为偶数,当和不为偶数时,应在最高数字位之前补一个0。此时,表示一个数要占用该偶数值的一半那么多个字节。例:假定用1110即E表示正(+)号,用1111即F表示负(-)号

+5630101011000111110即十六进制的563E-5630101011000111111即十六进制的563F-370000001101111111

即十六进制的037F注意:规定数字,符号位个数之和为偶数;否则,前边补零凑足偶数。采用字符形式表示时,符号在最前面表示;采用压缩的十进制数形式表示时,符号在最后表示。3.2带符号的二进制数据在计算机中的表示方法及加减法运算3.2.1原码、补码、反码及其加减运算

1.原码表示法

若定点小数的原码形式为x0x1x2…xn,则原码表示的定义是

在计算机中对数据进行运算操作时,符号位如何表示呢?是否也同数值位一道参加运算操作呢?为了妥善的处理好这些问题,就产生了把符号位和数字位一起编码来表示相应的数的各种表示方法,如原码、补码、反码、移码等。为了区别一般书写表示的数和机器中这些编码表示的数,通常将前者称为真值,后者称为机器数或机器码。式中[x]原是机器数,x是真值例如,x=+0.1001,则[x]原=0.1001x=-0.1001,则[x]原=1.1001对于0,原码机器中往往有“+0”、“-0”之分,故有两种形式:

[+0]原=0.000...0[-0]原=1.000...0若定点整数的原码形式为x0x1x2…xn,则原码表示的定义是

采用原码表示法简单易懂,但它的最大缺点是加法运算复杂。这是因为,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号。为了解决这些矛盾,人们找到了补码表示法。2.补码表示法

我们先以钟表对时为例说明补码的概念。假设现在的标准时间为4点正;而有一只表已经7点了,为了校准时间,可以采用两种方法:一是将时针退7-4=3格;一是将时针向前拨12-3=9格。这两种方法都能对准到4点,由此可以看出,减3和加9是等价的,就是说9是(-3)对12的补码,可以用数学公式表示

-3=+9(mod12)mod12的意思就是12模数,这个“模”表示被丢掉的数值。上式在数学上称为同余式。

上例中其所以7-3和7+9(mod12)等价,原因就是表指针超过12时,将12自动丢掉,最后得到16-12=4。从这里可以得到一个启示,就是负数用补码表示时,可以把减法转化为加法。这样,在计算机中实现起来就比较方便。若定点小数补码形式为x0.x1x2…xn,则补码表示的定义是例如,x=+0.1011,则[x]补=0.1011x=-0.1011,则[x]补=10+x=10.0000-0.1011=1.0101对于0,[+0]补=[-0]补=0.0000

(mod2)

注意,0的补码表示只有一种形式。

采用补码表示法进行减法运算就比原码方便得多了。因为不论数是正还是负,机器总是做加法,减法运算可变为加法运算。但根据补码定义,求负数的补码要从2减去|x|。为了用加法代替减法,结果还得在求补码时作一次减法,这显然是不方便的。下面介绍的反码表示法可以解决负数的求补问题。例3.19设X=-0.1011,Y=-0.0101,则有[X+Y]补=[X]补+[Y]补=1.0101+1.1011=11.0000=1.0000mod2而X+Y的真值=-0.1011+(-0.0101)=-1.0000,为-1。由此说明一个数的补码值的范围在-1和(1-2-n)之间(假设数值部分为n位)。

对定点整数,补码表示的定义是3.反码表示法

所谓反码,就是二进制的各位数码0变为1,1变为0。也就是说,若Xi=1,则反码为xi=0;若xi=0,则反码xi=1。数值上面的一横表示反码的意思。在计算机中用触发器寄存数码,若触发器Q端输出表示原码,则其Q端输出就是反码。由此可知,反码是容易得到的。对定点小数,反码表示的定义为一般情况下,对于正数x=+0.x1x2…xn,

[x]反=0.x1x2…xn

对于负数x=-0.x1x2…xn,则有

[x]反=1.x1x2…xn对于0,有[+0]反和[-0]反之分:

[+0]反=0.00...0[-0]反=1.11...1我们比较反码与补码的公式

[x]反=(2-2-n)+x[x]补=2+x可得到

这就是通过反码求补码的重要公式。这个公式告诉我们,若要一个负数变补码,其方法是符号位置1,其余各位0变1,1变0,然后在最末位(2-n)上加1。

对定点整数,反码表示的定义为4.数据从补码和反码表示表示形式转换成原码(1)将反码表示的数据转换成原码。转换方法:符号位保持不变,正数的数值部分不变,负数的数值部分取反。例3.23设〔x〕反=0.1010,则〔x〕原=0.1010,真值x=0.1010例3.24设〔x〕反=1.1010,则〔x〕原=1.0101,真值x=-0.0101(2)将补码表示的数据转换成原码。例3.25设〔x〕补=0.1010,则〔x〕原=0.1010,真值x=0.1010例3.25设〔x〕补=1.1010,则〔x〕原=1.0110,真值x=-0.0110(3)原码和补码、反码之间相互转换的实现。例3.27设〔x〕原=1.1010,则〔x〕反=1.0101,〔x〕补=1.0110补充:补码加法

:负数用补码表示后,可以和正数一样来处理。这样,运算器里只需要一个加法器就可以了,不必为了负数的加法运算,再配一个减法器。

补码加法的公式是

现分四种情况来证明。假设采用定点小数表示,因此证明的先决条件是︱x︱﹤1,︱y︱﹤1,︱x+y︱﹤1。(1)x﹥0,y﹥0,则x+y﹥0。

相加两数都是正数,故其和也一定是正数。正数的补码和原码是一样的,可得:

[x]补+[y]补=x+y=[x+y]补(mod2)

(2)x﹥0,y﹤0,则x+y>0或x+y<0。

相加的两数一个为正,一个为负,因此相加结果有正、负两种可能。根据补码定义,

∵[x]补=x,[y]补=2+y

∴[x]补+[y]补=x+2+y=2+(x+y)当x+y>0时,2+(x+y)>2,进位2必丢失,又因(x+y)>0,故[x]补+[y]补=x+y=[x+y]补(mod2)

当x+y<0时,2+(x+y)<2,又因(x+y)<0,故

[x]补+[y]补=2+(x+y)=[x+y]补(mod2)(3)x<0,y>0,则x+y>0或x+y<0。这种情况和第2种情况一样,把x和y的位置对调即得证。(4)x<0,y<0,则x+y<0。

相加两数都是负数,则其和也一定是负数。∵[x]补=2+x,[y]补=2+y∴[x]补+[y]补=2+x+2+y=2+(2+x+y)上式右边分为”2”和(2+x+y)两部分.既然(x+y)是负数,而其绝对值又小于1,那么(2+x+y)就一定是小于2而大于1的数,进位”2”必丢失.又因(x+y)<0,所以[x]补+[y]补=2+(x+y)=[x+y]补(mod2)

至此我们证明了,在模2意义下,任意两数的补码之和等于该两数之和的补码.这是补码加法的理论基础,其结论也适用于定点整数。补码减法

负数的减法运算也要设法化为加法来做,其所以使用这种方法而不使用直接减法,是因为它可以和常规的加法运算使用同一加法器电路,从而简化了计算机的设计。数用补码表示时,减法运算的公式为只要证明[-y]补=-[y]补,上式即得证。现证明如下:∵[x+y]补=[x]补+[y]补(mod2)∴[y]补=[x+y]补-[x]补

(a)∵[x-y]补=[x+(-y)]补=[x]补+[-y]补∴[-y]补=[x-y]补-[x]补

(b)将式(a)与(b)相加,得

[-y]补+[y]补=[x+y]补+[x-y]补-[x]补-[x]补=[x+y+x-y]补-[x]补-[x]补=[x+x]补-[x]补-[x]补=0故

从[y]补求[-y]补的法则是:对[y]补包括符号位“求反且最末位加1”,即可得到[-y]补。写成运算表达式,则为其中符号﹁表示对[y]补作包括符号位在内的求反操作,2-n表示最末位的13..2.2加减法运算的溢出处理

当运算结果超出机器数所能表示的范围时,称为溢出。

在定点小数机器中,数的表示范围为|x|<1.在运算过程中如出现大于1的现象,称为“溢出”。在定点机中,正常情况下溢出是不允许的。两个正数相加,结果大于机器所能表示的最大正数,称为上溢。而两个负数相加,结果小于机器所能表示的最小负数,称为下溢。为了判断“溢出”是否发生,可采用三种检测的方法。第一种方法是当符号相同的两数相加时,如果结果的符号与加数(或被加数)不相同,则为溢出例3.28中(3)、(4)。即溢出条件=fAfBfS+fAfBfS.第二种方法是当任意符号相加时,如果C=Cf,运算结果正确,其中C为数值最高位的进位,Cf为符号位的进位。如果C=Cf,则为溢出,所以溢出条件=C

Cf。

第三种方法是采用双符号位fs1fs2.正数双符号位为00,负数的双符号位为11.符号位参与运算,当结果的两个符号位fs1和fs2不相同时,为溢出。所以溢出条件=fs1fs2。

采用多符号位的补码又叫“变形补码”。采用变形补码后,如果两个数相加后,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。这是因为两个绝对值小于1的数相加,其结果不会大于或等于2,所以最高符号位永远表示结果的正确符号。3.2.3定点数和浮点数

1、定点数:约定机器中所有数据的小数点位置是固定不变的。将数据表示成定点纯小数或定点纯整数。

假设用一个n+1位字来表示一个定点数X,在定点机中可表示为如下形式:

X0

X1X2...Xn-1

Xn符号

数值部分

如果数X表示的是纯小数:0≤|X|≤1-2-n

如果数X表示的是纯整数:

0≤|X|≤2n-1

2、浮点数,即小数点的位置是浮动的:

N=RE.M

其中M称为浮点数的尾数,用定点小数表示。E称为浮点的指数,是一个整数,常称为阶码。比例因子的基数R对二进制的机器是一个常数,一般规定R为2,8或16。因此一个机器浮点数应当由阶码和尾数及其符号位组成:

阶符

阶码

数符

尾数

EsE1E2...Em

MsM1M2...Mn

313023220

IEEE标准:32位浮点数

32位浮点数中,Ms是浮点数的符号位,占1位,安排在最高位,Ms=0表示正数,Ms=1表示负数。M是尾数,放在低位部分,占有23位,用小数表示,小数点放在尾数域的最前面。E是阶码,占有8位,阶符采用隐含方式,即采用移码方法来表示正负指数。MsEM

尾数通常用规格化形式表示:当R=2,且尾数值不为0时,其绝对值应大于或等于(0.5)10。对非规格化浮点数,通过将尾数左移或右移,并修改阶码值使之满足规格化要求。假设浮点数的尾数为0.0011,阶码为0100(设定R=2),规格化时,将尾数左移2位,而成为0.1100,阶码减去(10)2修改成0010,浮点数的值保持不变。移码的数学定义:〔X〕移=2n+X-2n≦X﹤2n整数补码定义:与整数补码定义作比较,可知

当0

≦X﹤2n时,〔X〕移=2n+X=2n+〔X〕补当-2n≦X﹤0时〔X〕移=2n+X=2n+〔X〕补由此可知,将〔X〕补的符号位取反就可得〔X〕移例3.30X=+1011〔X〕补=01011〔X〕移=11011

X=-1011〔X〕补=10101〔X〕移=00101移码具有以下特点:(1)最高位为符号位,1表示正号,0表示负号。(2)在计算机中,移码执行加减运算,且需要对得到的结果进行修正,修正量为2n,即对结果的符号位取反,得到〔X〕移。设X=+1010Y=+0011,则〔X〕移=11010〔Y〕移=100113.计算机中数据的数值范围和精度

数值范围是指机器所能表示的一个最大值和最小值之间的范围。数值精度是指一个数的有效位数。例如,32位定点小数(补码)的范围为-1~1-2-31,定点整数(补码)的范围是-231~+231-1,数据精度为31位。〔补充〕〔X+Y〕移=〔X〕移+〔Y〕补当Y≧0时,〔X〕移+〔Y〕补=2n+X+Y=〔X+Y〕移当Y﹤0时,〔X〕移+〔Y〕补=2n+X+2n+1+Y=2n+1+2n+X+Y=〔X+Y〕移例X=+1010Y=+0011,则〔X〕移=11010〔Y〕补=00011

〔X+Y〕移=11010+00011=11101(3)数据0有唯一编码,即〔+0〕移=〔-0〕移=1000…0。执行加法运算〔X〕移+〔Y〕移=11010+10011=101101,加2n后得〔X+Y〕移,X+Y〕移=01101+10000=11101一、计算:1、x=23/128[x]补=[x]原=2、x=-35/64[x]补=[x]原=3、x+y=1010[x+y]补=[x+y]原=4、x-y=-1101[x-y]补=[x-y]原=二、设机器字长为5位,采用定点整数表示,x=+110,求[x]原,[x]补解:因为n+1=5,所以n=4,[x]原=0,0110[x]补=0,0110↑↑↑

x0x1…x4

显然,正数的原码与补码形式相同。三、设机器字长8位并用定点整数表示,模为28,若x=-110,求[x]原,[x]补。解:因为n+1=8,所以n=7,[x]原=10000110[x]补=M+x=28+(-110)=(100000000)2-110=11111010

【习题】四、由补码求原码与真值:对于正数,原码与补码相同,其真值在略去正号后,形式上与机器数相同;对于负数,保持符号位为1,其余各位变反末位加1,即得到原码表示,将负数原码符号恢复为负号,即得到真值表示。例:如[x]补=00000110,则[x]原=00000110,x=+110

如[x]补=11111010,则[x]原=10000110,所以x=-110[x]原的具体计算如下:

[x]补=11111010

变反10000101

末位加1+1

10000110

五、

以定点整数为例,用数轴形式说明原码、反码、补码表示范围和可能的数码组合情况。

解:原码、反码、补码表示分别示于下图。与原码、反码不同,在补码表示中“0”只有一种形式,且用补码表示负数时范围可到-2n。

11...1

10...01

10...0

00...0

00...01

01...1

-(2n-1)

-1

-00

+1

+(2n-1)

原码

10...0

11...10

11...1

00...0

00...01

01...1

-(2n-1)

-1

-0

0

+1

+(2n-1)

反码

10...0

10...01

11...1

00...0

00...01

01...1

-2n

-(2n-1)

-1

0

+1

+(2n-1)

补码

六、设机器字长16位,定点表示,尾数15位,数符1位,问:

(1)定点原码整数表示时,最大正数是多少?最小负数是多少?

(2)定点原码小数表示时,最大正数是多少?最小负数是多少?

解:(1)定点原码整数表示

最大正数值=(215-1)10=(+32767)10

0

111111

111

111

111

最小负数值=(215-1)10=(-32767)10

1

111111

111

111

111

(2)定点原码小数表示

最大正数值=(1-2-15)10=(+0.111...11)2

最小负数值=(1-2-15)10=(-0.111...11)23.3二进制乘法运算3.3.1定点数一位乘法1.定点原码一位乘法在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。设n位被乘数和乘数用定点小数表示(定点整数也同样适用)被乘数[X]原=X0·X1…Xn-1Xn

乘数[Y]原=Y0·Y1…Yn-1Yn

乘积[Z]原=(X0⊕Y0)·(0.X1…Xn-1Xn)(0.Y1…Yn-1Yn)

式中,X0为被乘数符号,Y0为乘数符号。

乘积符号的运算法则是:同号相乘为正,异号相乘为负。由于被乘数和乘数

和符号组合只有四种情况(XfYf)=(00,01,10,11),因此积的符号可按"异或"(按位加)运算得到。为了说明在计算机中如何实现定点原码一位乘法先从人工计算开始,举例如下:设X=0.1101,Y=0.1011,让我们先用习惯方法求其乘积,其过程如下:

0.1101(X)

×0.1011(Y)--------------------

1101

1101

0000

+1101

--------------------

0.10001111(Z)

运算的过程与十进制乘法相似:从乘数Y的最低位开始,若这一位为"1",则将被乘数X写下;若这一位为"0",则写下全0。然后再对乘数Y的高一位进行乘法运算,其规则同上,不过这一位乘数的权与最低位乘数的权不一样,

因此被乘数X要左移一位。依次类推,直到乘数各位乘完为止,最后将它们统统加起来,便得到最后乘积Z。

如果被乘数和乘数用定点整数表示,我们也会得到同样的结果。

但是人们习惯的算法对机器并不完全适用。原因之一,机器通常只有n位长,两个n位数相乘,乘积可能为2n位。原因之二,只有两个操作数相加的加法器,难以胜任将n个位积一次相加起来的运算。原因之三,部分积右移时,乘数寄存器同时右移一位。因此,在早期计算机中为了简化硬件结构,采用串行的1位乘法方案,而多次执行“加法、移位”操作来实现。这种方法并不需要很多器件。然而串行方法毕竟太慢,不能满足科学技术对

高速乘法所提出的要求。在计算机中实现定点原码一位乘法如例3.32所示。定点原码一位乘流程图如右图所示:从流程图上可以清楚地看到,这里的原码一位乘是通过循环迭代的办法实现的。每次迭代得到的部分积(P0,P1,…,Pn)可用下述式(3.14)表示:式(3.14)中的2-1表示二进制数据右移一位,相当于乘以2-1.2.定点补码一位乘法有的机器为方便加减法运算,数据以补码形式存放。如采用原码乘法,则在相乘之前,要将负数还原成原码形式,相乘之后,如乘积为负数,又要将其转换成补码形式,增加了操作步骤。为此,有不少计算机直接采用补码相乘。为了得出补码乘法规律,先讨论补码与真值的转换关系和补码右移的性质。(1)补码与真值的转换关系设[X]补=X0。.X1X2…Xn,当真值X≥0时,X0=0,[X]补=0.X1…Xn-1Xn=∑Xi·

2-I=X

当真值X<0时,X0=1,

[X]补=1.X1…Xn-1Xn=2+XX=[X]补-2=1.X1…Xn-1Xn–2=-1+0.X1…Xn-1Xn=-1+∑Xi·

2-I

得出对X为正负数都合适的公式如下:

X=-X0

+∑Xi·

2-I=-X0+0.X1…Xn-1Xn

(2)补码的右移在补码运算中,不论正负,连同符号位将数右移一位,并保持符号位不变,相当于乘1/2.现证明如下:设[X]补=X0.X1X2…Xn

X=-X0+0.X1X2…Xn=-X0+∑Xi·

2-i

(I=1~n)

得出(1/2)X=-(1/2)X0+(1/2)

∑Xi·

2-i=-X0+(1/2)X0+(1/2)

∑Xi·

2-i=-X0+(1/2)(X0+∑Xi·

2-i)=-X0+∑Xi·

2-(I+1)=-X0+0.X0

X1X2…Xn[(1/2)X]补=X0.X0X1…Xn(3)补码一位乘法设被乘数[X]补=X0·X1…Xn-1Xn,乘数[Y]补=Y0·Y1…Yn-1Yn,则有:

[X·

Y]补=[X]补·(-Y0+∑Yi·

2-I)

证明如下:①

X正负任意,Y为正数根据补码定义及模2运算性质:[X]补=2+X=2n+1+Xmod2[Y]补=Y则:[X]补·

[Y]补=2n+1·Y+X·

Y=2+X·

Y

mod2

[X]补·

[Y]补=[X·Y]补即:[X·Y]补=[X]补·

[Y]补=[X]补·

Y=[X]补·

(-Y0+∑Yi·

2-I)

=[X]补·(∑Yi·

2-I)

=[X]补(0.Y1…Yn-1Yn)②

X正负任意,Y为负数[X]补=X0。.X1X2。。。Xn

[Y]补=1。Y1Y2。。。Yn=2+Y

得Y=[Y]补-2=0.Y1…Yn-1Yn-1

X·Y=X(0.Y1…Yn-1Yn)-X

[X·Y]补=[X(0.Y1…Yn-1Yn)]补+[-

X]补因为0.Y1…Yn-1Yn>0,所以[X(0.Y1…Yn-1Yn)]补=[X]补(0.Y1…Yn-1Yn)

[X·Y]补=[X]补(0.Y1…Yn-1Yn)+[-X]补即按①的方法运算后,还需要补充进行加[-

X]补操作。③

X和Y正负都任意将上述①与②两种情况综合起来,可得补码乘法的统一算法,具体式子如下:[X·Y]补=[X]补(0.Y1…Yn-1Yn)-[X]补·

Y0

=[X]补(-Y0+0.Y1…Yn-1Yn)=[X]补(-Y0+∑Yi·

2-I)具体实例请看例3.33和例3.34.将前述补码乘法公式进行变换,可得出另一公式,是由布斯提出的,又称为“布斯公式”。[X·Y]补=[X]补·

(-Y0+∑Yi·

2-I)=[X]补·

[-Y0+Y12-1+Y22-2+……+Yn2-n]=[X]补·

[-Y0+(Y1-

Y12-1)

+(Y22-1-Y22-2)

+……+Yn2-(n-1)-

Yn2-n)

]=[X]补·

[(Y1-

Y0)

+(Y2-

Y1)

2-1+……+(Yn-

Yn-1)

2-(n-1)+(0-

Yn)

2-n

]=[X]补·

∑(Yi+1-Yi)2-I乘数的最低1位为Yn,在其后面再添加1位

Yn+1,其值为0。再将式(3.17)加以变换:按机器执行顺序求出每一步的部分积。

Yi+1与Y为相邻两位,(Yi+1-Yi)有0,1,-1三种情况,其运算规则如下:(1)Yi+1-Yi=0,部分积加0,右移一位

(2)Yi+1-Yi=1,部分积加[X]补,右移一位

(3)Yi+1-Yi=-1,部分积加[-X]补,右移一位最后一步不移位。具体实例见例3.35。本小节所举例中,X与Y的绝对值都没有变化,所以最后的乘积(真值)的数值部分都相等。

3.3.2定点数二位乘法1.原码两位乘两位乘数有四种组合,每种组合对应于以下操作:00——相当于0·X。部分积Pi右移2位,不进行其他操作。01——相当于1·X。部分积Pi+X,右移2位。10——相当于2·X。部分积Pi+2X,右移2位。11——相当于3·X。部分积Pi+3X,右移2位。+2X是利用X左移1位得到的,在机器中是通常采用向左斜送1位来实现。+3X是利用(4X-X)代替的。在本次运算中执行-X,+4X则归并到下一步来执行。此时部分积已经右移,上一步欠下的+4X变为+X。在实际线路中用触发器C来记录是否欠下+4X,若是则1→C。表3.4原码两位乘法规则Yi-1YiC操作000001010011100101110111(Pi+0)2-2(Pi+X)2-2(Pi+X)2-2(Pi+2X)2-2(Pi+2X)2-2(Pi-X)2-2(Pi-X)2-2(Pi+0)2-20→C0→C0→C0→C0→C1→C1→C1→C例3.36,如果最后一次欠下+X,则最后一次右移2位需补充+X操作,+X后不移位。2.补码两位乘根据前述的布斯算法,将两步合成一步,即可退到出补码两位乘的公式。假设上一步的部分积为[Pi]补,本步的部分积为[Pi+1]补={[Pi]补+(Yn-i+1-Yn-i)·[X]补}2-1下一步的部分积应为:[Pi+2]补={[Pi+1]补+(Yn-i-Yn-i-1)·[X]补}2-1将上式的[Pi+1]补代入[Pi+2]补,则[Pi+2]补={[Pi]补+(Yn-i+1-Yn-i)·[X]补}2-1+(Yn-i-Yn-i-1)·[X]补}2-1={[Pi]补+(Yn-i+1-Yn-i)·[X]补}+2(Yn-i-Yn-i-1)·[X]补}2-2={[Pi]补+(Yn-i+1+Yn-i-2Yn-i-1)·[X]补}2-2上述公式表明,产生了部分积[Pi]补之后,可加上乘数寄存器最低两位和附加位的组合值于[X]补的积,再右移两位,可得到[Pi+2]补。Yn-i-1

Yn-iYn-i+1

组合值[Pi+2]补0000010100111001011101110112-2-1-10([Pi]补+0)2-2([Pi]补+[X]补)2-2([Pi]补+[X]补)2-2([Pi]补+2[X]补)2-2([Pi]补+2[-X]补)2-2([Pi]补+[-X]补)2-2([Pi]补+[-X]补)2-2([Pi]补+0)2-2表3—5组合值Yn-i-1Yn-iYn-i+1与[Pi+2]补的关系

由上表可得,执行补码两位乘过程中,有[Pi]补+0,[Pi]补+[X]补,[Pi]补+2[X]补

,[Pi]补+2[-X]补,[Pi]补+[-X]补五种操作,应有[X]补,[-X]补及其左斜一位(相当与2[X]补和2[-X]补)送加法器的线路;另外部分积和乘数每次右移两位,应用向右斜送两位的逻辑电路和移位寄存器实现。与此相应的,加法器可使用三位符号位,以避免[X]补左斜送一位加法器时运算结果溢出的情形。求部分积的次数和右移操作的控制问题。当乘数由1位符号位和n位(奇数)位数值位组成时,求部分积的次数为(1+n)/2,而且最后一次的右移操作只右移一位。若数值位本身为偶数n,则可以采取以下方法:(1)可在乘数的最后一位补一个0,乘数的数据位就成为奇数,而且其值不变,求部分积的次数为[1+(n+1)]/2,即n/2+1,最后一次右移操作也只右移一位。(2)乘数增加一位符号位,使总位数仍为偶数,此时求部分积的次数为n/2+1,而且最后一次不再执行右移操作。现举例3.37(1)

3.37(2)3.3.3阵列乘法器如书上P823.4二进制除法运算3.4.1定点除法运算1.定点原码一位除法恢复余数法和加减交替法,在计算机中常用的是加减交替法。两个原码相除,商的符号位为两数符号位的异或值,数值则为两数绝对值相除后的结果。(1)恢复余数法设被除数X=0.1011,除数Y=0.1101除法的人工计算过程如下:0.11010.1101)0.10110

110110100

11010111人工进行二进制除法的规则:判断被除数和除数的大小,若被除数小,则上商0,并在余数最低位补0,再用余数和最低一位的除数比,若够除,则商1,否则商0。然后继续重复上述步骤,直到除尽或以得到的商的位数满足精度要求为止。在进行除法操作的时候,要求加法器的位数为除数位数的两倍。右移除数可以通过左移被除数来替代,并且利用被除数和除数做剑法判断结果的符号位。当差为负数的时候,上商为0,同时余数左移且要恢复余数;若减的差为0或正值,商为1,余数左移。例3.38恢复余数法的缺点是:当被减数的绝对值小于减数的绝对值时,要恢复余数。所以我们采用了加减交替法。(2)加减交替法加减交替法是对恢复余数法的一种修正。当求得的差为负数时,不是恢复他,而是继续求下一位商。用加上(+Y)的办法来取代(-Y)操作。原理证明如下:在恢复余数除法中,若第i-1次求商的余数为Ri-1,下一次求商的余数为R,则Ri=2Ri-1-Y如果Ri<0,商的第I位上0,恢复余数(+Y),将余数左移一位,再减Y,得2Ri+1。用公式表示如下:Ri+1=2(Ri+Y)-Y=2Ri+Y加减交替法得规则:当余数为正时,商上1,求下一位商得办法,是余数左移一位,再减去除数;当余数为负时,商上0,求下一位商得办法,是余数左移一位,再加上除数。又名不恢复余数法。例3.39所以总结原码一位除法得步骤如下:(1)首先比较被除数和除数得大小,以检查是否商溢出得情况。(2)商得符号为相除二数得符号得半加和。(3)被除数得位数是除数得两倍,其低位得数值部分开始放在商寄存器中。运算过程中,被除数和商寄存器同时移位,并将商寄存器得最高位移到被除数寄存器得最低位中。(4)与乘法得逻辑电路相似。A中放被除数、余数,B中放除数,C放商。此外,移位电路应有左移1位得功能,及将Y/[Y]补送ALU得功能。2.定点补码一位除法(加减交替法)运算说明:判别是否够减,要比较他们绝对值得大小。若两数同符号,要用减法,若异号,要用加法。当商为正时,商得值为原码表示形式。当商为负时,商得值一般为反码形式的,然后采用最低位加1得办法求出正确得补码值。运算规则:(1)被除数和除数同号,用被除数减去除数;若两数相异,用被除数加上除数。若所得余数和商同号商1,若余数和除数异号,商0,这是结果得符号位。(2)如果上次商为1,将余数左移一位后减去除数;如果上次商0,将余数左移一位后加上除数。然后判断本次得操后得余数与除数得符号是否相同。若相同则商1,若异号则商0。如此重复n-1次。(3)商的最后一位一般采用恒置1得办法,并省略最低位得加1操作。例3.40例3.41例3.42X补.Y补符号商符第一步操作r补,Y补符号上商下一步操作同号0减同号(够减)12[r]补-Y补异号(不够减)02[r]补+Y补异号1加同号(不够减)12[r]补-Y补异号(够减)02[r]补+Y补3.4.2提高除法运算速度得方法举例1.跳0跳1除法规则:(1)如果余数R≥0,且其高K个数位均为0,则本次直接商1,后跟K-1个0。R左移K位后,减去除数Y,得新余数。(2)如果余数R≤0,且其高K个数位均为1,则本次直接商0,后跟K-1个1。R左移K位后,加上除数Y,得新余数。(3)不满不(1)(2)按一位除法上商。例3.432.除法运算通过乘法操作来实现即找寻一组数使分母趋向于1,则分子等于分母。3.5浮点数的运算方法3.5.1浮点加法、减法运算设有两个浮点数x和y,它们分别为x=2Ex·Mxy=2Ey·My其中Ex和Ey分别为数x和y的阶码,Mx和My为数x和y的尾数。两浮点数进行加法和减法的运算规则是x±y=(Mx2Ex-Ey±My)2Ey,Ex>=Ey完成浮点加减运算的操作过程大体分为四步:

1.0操作数的检查;

2.比较阶码大小并完成对阶;

3.尾数进行加或减运算;

4.结果规格化并进行舍入处理。5.判溢,检查阶码是否溢出。浮点加减运算的操作流程(1)0操作数检查浮点加减运算过程比定点运算过程复杂。如果判知两个操作数x或y中有一个数为0,即可得知运算结果而没有必要再进行后续的一系列操作以节省运算时间。0操作数检查步骤则用来完成这一功能。(2)比较阶码大小并完成对阶两浮点数进行加减,首先要看两数的阶码是否相同,即小数点位置是否对齐。若二数阶码相同,表示小数点是对齐的,就可以进行尾数的加减运算。反之,若二数阶码不同,表示小数点位置没有对齐,此时必须使二数阶码相同,这个过程叫作对阶。

要对阶,首先应求出两数阶码Ex和Ey之差,即

△E=Ex-Ey若△E=0,表示两数阶码相等,即Ex=Ey;若△E>0,表示Ex>Ey;若△E<0,表示Ex<Ey。当Ex≠Ey时,要通过尾数的移动以改变Ex或Ey,使之相等。原则上,既可以通过Mx移位以改变Ex来达到Ex=Ey,也可以通过My移位以改变Ey来实现Ex=Ey。但是,由于浮点表示的数多是规格化的,尾数左移会引起最高有效位的丢失,造成很大误差。尾数右移虽引起最低有效位的丢失,但造成误差较小。

因此,对阶操作规定使尾数右移,尾数右移后阶码作相应增加,其数值保持不变。显然,一个增加后的阶码与另一个阶码相等,增加的阶码的一定是小阶。因此在对阶时,总是使小阶向大阶看齐,即小阶的尾数向右移位(相当于小数点左移)每右移一位,其阶码加1,直到两数的阶码相等为止,右移的位数等于阶差△E。(3)尾数求和运算对阶结束后,即可进行尾数的求和运算。不论加法运算还是减法运算,都按加法进行操作,其方法与定点加减法运算完全一样。(4)结果规格化在浮点加减运算时,尾数求和的结果也可以得到01.ф…ф或10.ф…ф,即两符号位不等,这在定点加减法运算中称为溢出,是不允许的。但在浮点运算中,它表明尾数求和结果的绝对值大于1,向左破坏了规格化。此时将运算结果右移以实现规格化表示,称为向右规格化。规则是:尾数右移1位,阶码加1。当尾数不是1.M时需向左规格化。(5)舍入处理在对阶或向右规格化时,尾数要向右移位,这样,被右移的尾数的低位部分会被丢掉,从而造成一定误差,因此要进行舍入处理。简单的舍入方法有两种:一种是"0舍1入"法,即如果右移时被丢掉数位的最高位为0则舍去,为1则将尾数的末位加"1"。另一种是"恒置一"法,即只要数位被移掉,就在尾数的末尾恒置"1"。在IEEE754标准中,舍入处理提供了四种可选方法:就近舍入其实质就是通常所说的"四舍五入"。例如,尾数超出规定的23位的多余位数字是10010,多余位的值超过规定的最低有效位值的一半,故最低有效位应增1。若多余的5位是01111,则简单的截尾即可。对多余的5位10000这种特殊情况:若最低有效位现为0,则截尾;若最低有效位现为1,则向上进一位使其变为0。朝0舍入即朝数轴原点方向舍入,就是简单的截尾。无论尾数是正数还是负数,截尾都使取值的绝对值比原值的绝对值小。这种方法容易导致误差积累。朝+∞舍入对正数来说,只要多余位不全为0则向最低有效位进1;对负数来说则是简单的截尾。朝-∞舍入处理方法正好与朝+∞舍入情况相反。对正数来说,只要多余位不全为0则简单截尾;对负数来说,向最低有效位进1。(6)浮点数的溢出下图表示了浮点机器数在数轴上的分布情况。当机器浮点数值大于最大正数A值,或小于最小负数B值时,称为上溢,这两种情况意味着阶码运算值超出了它所表示的范围,机器必须做中断处理。当机器浮点数值小于最小正数a值,或大于最大负数b值时,称为下溢。下溢不是一个严重问题,通常看作为机器零。

浮点数的溢出是以其阶码溢出表现出来的。在加\减运算过程中要检查是否产生了溢出:若阶码正常,加(减)运算正常结束;若阶码溢出,则要进行相应处理。另外对尾数的溢出也需要处理。阶码上溢超过了阶码可能表示的最大值的正指数值,一般将其认为是+∞和-∞。

阶码下溢超过了阶码可能表示的最小值的负指数值,一般将其认为是0。

尾数上溢

两个同符号尾数相加产生了最高位向上的进位,将尾数右移,阶码增1来重新对齐。

尾数下溢在将尾数右移时,尾数的最低有效位从尾数域右端流出,要进行舍入处理。[例25]设x=2010×0.11011011,y=2100×(-0.10101100),求x+y。解:

为了便于直观理解,假设两数均以补码表示,阶码采用双符号位,尾数采用单符号位,则它们的浮点表示分别为[x]浮=00010,0.11011011

[y]浮=00100,1.01010100<1>求阶差并对阶△E=Ex-Ey=[Ex]补+[-Ey]补=00010+11100=11110

即△E为-2,x的阶码小,应使Mx右移两位,Ex加2,

[x]浮=00100,0.00110110(11)

其中(11)表示Mx右移2位后移出的最低两位数。<3>规格化处理尾数运算结果的符号位与最高数值位同值,应执行左规处理,结果为1.00010101(10),阶码为00011。<4>舍入处理采用0舍1入法处理,则有<5>判溢出

阶码符号位为00,不溢出,故得最终结果为

x+y=2011×(-0.11101010)<2>尾数求和3.5.2浮点乘法、除法运算1.浮点乘法、除法运算规则设有两个浮点数x和y:

x=2Ex·Mxy=2Ey·My浮点乘法运算的规则是

x×y=2(Ex+Ey)·(Mx×My)

即乘积的尾数是相乘两数的尾数之积,乘积的阶码是相乘两数的阶码之和。当然,这里也有规格化与舍入等步骤。浮点除法运算的规则是x÷y=2(Ex-Ey)·(Mx÷My)商的尾数是相除两数的尾数之商,商的阶码是相除两数的阶码之差。也有规格化和舍入等步骤。2.浮点乘、除法运算步骤浮点数的乘除运算大体分为四步:第一步,0操作数检查;第二步,阶码加/减操作;第三步,尾数乘/除操作;第四步,结果规格化及舍入处理。(1)浮点数的阶码运算对阶码的运算有+1、-1、两阶码求和、两阶码求差四种,运算时还必须检查结果是否溢出。在计算机中,阶码通常用补码或移码形式表示。补码运算规则和判定溢出的方法,前面已经讲过。这里只对移码的运算规则和判定溢出的方法进行讲解。移码的定义为

[x]移=2n+x2n>x≥-2n按此定义,则有

[x]移+[y]移=2n+x+2n+y

=2n+(2n+(x+y))

=2n+[x+y]移即直接用移码实现求阶码之和时,结果的最高位多加了个1,要得到正确的移码形式结果,必须对结果的符号再执行一次求反。当混合使用移码和补码时,考虑到移码和补码的关系:对同一个数值,其数值位完全相同,而符号位正好完全相反。而[y]补的定义为

[y]补=2n+1+ymod2n+1则求阶码和用如下方式完成:

[x]移+[y]补=2n+x+2n+1+y

=2n+1+(2n+(x+y))即[x+y]移=[x]移+[y]补(mod2n+1)同理

[x-y]移=[x]移+[-y]补

上二式表明执行阶码加减时,对加数或减数y来说,应送移码符号位正常值的反码。如果阶码运算的结果溢出,上述条件则不成立。此时,使用双符号位的阶码加法器,并规定移码的第二个符号位,即最高符号位恒用0参加加减运算,则溢出条件是结果的最高符号位为1。此时,当低位符号位为0时,表明结果上溢,为1时,表明结果下溢。当最高符号位为0时,表明没有溢出;低位符号位为1,表明结果为正;为0时,表明结果为负。[例26]x=+011,y=+110,求[x+y]移和[x-y]移,并判断是否溢出。[解:][x]移=01011,[y]补=00110,[-y]补=11010

[x+y]移=[x]移+[y]补=10001,结果上溢。

[x-y]移=[x]移+[-y]补=00101,结果正确,为-3。(2)尾数处理浮点加减法对结果的规格化及舍入处理也适用于浮点乘除法。第一种简单方法是,无条件地丢掉正常尾数最低位之后的全部数值。这种办法被称为截断处理,好处是处理简单,缺点是影响结果的精度。第二种简单办法是,运算过程中保留右移中移出的若干高位的值,最后再按某种规则用这些位上的值修正尾数。这种处理方法被称为舍入处理。3.7校验码元件故障\噪声干扰等各种因素常常导致计算机在处理信息过程中出现错误。为了防止错误,可将信号采用专门的逻辑线路进行编码以检测错误,甚至校正错误。通常的方法是,在每个字上添加一些校验位,用来确定字中出现错误的位置。1.奇偶校验码

最简单且应用广泛的检错码是采用一位校验位的奇校验或偶校验。设x=(x0x1…xn-1)是一个n位字,则奇校验位C定义为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论