计算机组成原理 No4 数据表示和运算-2_第1页
计算机组成原理 No4 数据表示和运算-2_第2页
计算机组成原理 No4 数据表示和运算-2_第3页
计算机组成原理 No4 数据表示和运算-2_第4页
计算机组成原理 No4 数据表示和运算-2_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

计算机组成原理PrinciplesofComputerComposition2第二部分数据的表示和运算

2.1数制与编码

2.2定点数表示和运算

2.3浮点数表示和运算

2.4算术逻辑单元ALU3

2.2定点数表示和运算

2.2.1

定点数的表示

1、无符号数的表示;

2、有符号数的表示。

2.2.2

定点数的运算

1、定点数的位移运算;

2、原码定点数的加/减运算;

3、补码定点数的加/减运算;4、定点数的乘法运算42.2.1

定点数的表示定点数的表示所有数据的小数点位置固定不变理论上位置可以任意,但实际上数据表示有两种方法(小数点位置固定-定点表示法/定点格式):纯小数纯整数定点数表示:有符号数无符号数52.2.1

定点数的表示1、无符号数的表示在寄存器中的每一位均可用来存放数值。8位0~25516位0~6553562.2.1

定点数的表示2、有符号数的表示定点纯小数x0x1x2x3…xn-1xn符号量值小数点固定于符号位之后,不需专门存放位置表示数的范围是0≤|x|≤1-2-n72.2.1

定点数的表示纯小数的表示范围x=0.00...0

x=1.00...0

x=0正0和负0都是0x=0.11...1x=1-2-n

最大x=0.00...01x=2-n

最接近0的正数x=1.00...01

x=-2-n最接近0的负数x=1.11...1

x=-(1-2-n

最小82.2.1

定点数的表示定点纯整数x0x1x2x3…xn-1xn符号量值小数点固定于最后一位之后,不需专门存放位置表示数的范围是0≤|x|≤2n-192.2.1

定点数的表示定点表示法的特点定点数表示数的范围受字长限制,表示数的范围有限;定点表示的精度有限机器中,常用定点纯整数表示;常用的有:原码、补码、反码和移码102.2.1

定点数的表示3、原码表示(1)定义x

为真值n

为整数的位数整数[x]原

=0,x2n

>x≥02n

x0≥x

>2n带符号的绝对值表示如x=+1110[x]原=0,1110[x]原=24+1110=1,1110x=1110用逗号将符号位和数值位隔开112.2.1

定点数的表示小数x

为真值x1>x≥0[x]原

=1–x0≥x

>1x=+0.1101[x]原=0.1101x=0.1101[x]原=1(0.1101)=1.1101x=0.1000000[x]原=1(0.1000000)=1.1000000x=+0.1000000[x]原=0.1000000用小数点

将符号位和数值位隔开用小数点

将符号位和数值位隔开122.2.1

定点数的表示(2)举例例1已知[x]原

=1.0011求x解:x=1[x]原

=11.0011=0.00110.0011由定义得例2已知[x]原

=1,1100求xx=24[x]原

=100001,1100=1100–1100解:由定义得132.2.1

定点数的表示例3已知[x]原

=0.1101求x例4求x=0的原码解:设x=+0.0000解:∴x=+0.1101同理,对于整数[+0]原

=0,0000[+0.0000]原

=0.0000x=0.0000[0.0000]原

=1.0000[0]原

=1,0000∴[+0]原≠[0]原

根据定义∵[x]原

=0.1101142.2.1

定点数的表示(3)原码的表示范围对于定点整数:

一个n+1位原码能表示的最大正数为01…11,即2n-1;能表示的最小数为绝对值最大的负数111…1,即-(2n-1)。所以原码能表示的数值范围为:-(2n-1)≤x≤2n-1。对于定点小数:

一个n+1位定点小数原码能表示的最大正数为0.1…11,即1-2-n;能表示的最小数为绝对值最大的负数为1.11…1,即-(1-2-n)。定点小数原码的数值范围为:

-(1-2-n)≤x≤1-2-n。152.2.1

定点数的表示(4)原码的特点:简单、直观但是用原码做加法时,会出现如下问题:加法正正加加法正负加法负正加法负负减减加

要求数1数2实际操作结果符号正可正可负可正可负负能否只做加法?

找到一个与负数等价的正数

来代替这个负数162.2.1

定点数的表示(5)原码的性质1)原码的最高位表示数的符号,0表示正号,1表示负号。假设小数X的原码为:[X]原

=XS.Xn-1Xn-2…X2X1X0,Xs是符号位,可用下式来表示一个数的原码:

[X]原

=Xs+|X|2)对于定点小数,把Xs作为数值位看待时,其位权为1,则有:当Xs=0时,1>[X]原≥0,故1>X=[X]原≥0;当Xs=1时,2>[X]原≥1,故0≥1-[X]原>-1

即2>[X]原≥0,其范围是:0~2-2-(n-1)

,真值为1>X>-1,其范围是:-(1-2-(n-1))~+(1-2-(n-1))。

3)0不唯一定点小数[+0]原=0.0…0[-0]原=1.0…0

整数[+0]原=00…0[-0]原=10…0172.2.1

定点数的表示4.补码表示法(1)补的概念

时钟逆时针-363顺时针+9615-123可见3可用+9代替记作3≡+9(mod12)同理4≡+8(mod12)5≡+7(mod12)

时钟以

12为模减法加法称+9是–3以12为模的补数182.2.1

定点数的表示再如:79-38=4179+62=141

如果要求是两位十进制运算器,多余的100将自动丢弃。所以有79-38=79+62这里的12和100,在数学上叫做模。模是指一个计量系统的测量范围,其大小以计量进制的基数为底,位数为指数的幂。两位十进制数测量范围0~99,溢出量是100,模就是102=100。192.2.1

定点数的表示结论一个负数加上“模”即得该负数的补两个互为补数的数它们绝对值之和即为模数计数器(模16)10110000?–101110110000+0101101110000自然去掉可见1011可用+0101代替记作1011≡+0101(mod24)同理011≡+101(mod23)0.1001≡+1.0111(mod2)202.2.1

定点数的表示(2)补码定义整数

x

为真值,n

为整数的位数例如:x=+1010

则[x]补

=0,1010[x]补

=0,x2n

>x≥02n+1+x0>x≥2n(mod2n+1)x=1011000[x]补

=27+1+(1011000)=10000000010110001,0101000用逗号

将符号位和数值位隔开212.2.1

定点数的表示小数x

为真值x=+0.1110[x]补

=x1>x≥02+x0>x≥1(mod2)如[x]补

=0.1110x=0.11000001.0100000[x]补

=2+(0.1100000)=10.00000000.1100000用小数点

将符号位和数值位隔开222.2.1

定点数的表示(3)求补码的快捷方式=100000=1,011010101+1=1,0110

又[x]原

=1,1010则[x]补

=24+11010=11111+11010=1111110101010+1设x=1010时当真值为负时,补码可用原码除符号位外,每位取反,末位加1

求得232.2.1

定点数的表示(4)举例解:x=+0.0001解:由定义得x=[x]补

–2=1.0001–10.0000[x]原

=1.1111例6已知[x]补

=1.0001求x[x]补

[x]原

?由定义得例5已知[x]补

=0.0001求x∴x=0.1111–=0.1111–242.2.1

定点数的表示已知[x]补

=1,1110求x由定义:x=[x]补

–24+1

=1,1110–100000=–0010[x]补

[x]原

?∴x=0010[x]原

=1,0010当真值为负时,原码可用补码除符号位外,每位取反,末位加1

求得252.2.1

定点数的表示“0”的补码表示法当x=0时,

[+0.0000]补=0.0000

[-0.0000]补=2+(-0.0000)=10.0000-0.0000=0.0000显然[+0]补=[-0]补=0.0000,即补码中的“零”只有一种表示表示形式。262.2.1

定点数的表示(5)补码的表数范围。一个n+1位整数补码能表示的最大数是011…1,即2n-1;能表示的最小数为100…0,即-2n。所以它能表示的数值范围是:-2n≤x≤2n-1

一个n+1位小数补码能表示的最大数是0.11…1,即1-2-n;能表示的最小数为1.00…0,即-1。所以它能表示的数值范围是:-1≤x≤1-2-n

对于小数,若x=-1,则根据小数补码定义,有[x]补=2+x=10.0000-1.0000=1.0000。可见,-1本不属于小数范围,但却有[-1]补存在(其实在小数补码定义中已指明),这是由于补码中的零只有一种表示形式,故它比原码能多表示一个“-1”。272.2.1

定点数的表示(6)补码的性质1)在补码表示法中,0的补码是唯一的,即 整数0[+0]补=00…0 [-0]补=2n+1-00…0=2n+1=00…0(mod2n+1)

小数0[+0]补=0.00…0 [-0]补=2-0.00…0=2=0.00…0(mod2)2)假设一整数X的补码表示为:[X]补=XSXn-1Xn-2…X1X0,XS是补码的符号位,标志整数X的符号,XS=0时,X为正数;XS=1时,X为负数。

3)补码的表示范围是: 正整数2n>X≥0

负整数0>X≥-2n

负数的范围比正数范围大,即多表示一个数-2n。当X=-2n时,它的补码为:

[X]补

=[-2n]补

=2n+1-2n=2n=100…0282.2.1

定点数的表示5、反码表示法

(1)定义:整数反码[x]反

=0,x2n

>x≥0(2n+1–1)+x0≥x

>2n(mod2n+1

1)x

为真值,n

为整数的位数如x=+1101[x]反

=0,1101=1,0010x=1101[x]反

=(24+11)1101=111111101292.2.1

定点数的表示小数反码[x]反

=x1>x≥0(2–2-n)+x0≥x

>1(mod22-n)x

为真值x=+0.1101[x]反

=0.1101x=0.1010[x]反

=(22-4)0.1010=1.11110.1010=1.0101如302.2.1

定点数的表示(2)举例例:求0的反码设x=+0.0000x=–0.0000则:[+0.0000]反=0.0000则:[–0.0000]反=1.1111∴[+0]反≠[–0]反

解:同理,对于整数[+0]反=0,0000[–0]反=1,1111例:已知[x]反

=1,1110求x由定义得x=[x]反–(24+1–1)=1,1110–11111=–0001例:已知[x]反

=0,1110求x解:由定义得x=+1110解:312.2.1

定点数的表示(3)“0”的反码表示法当x=0时,

[+0.0000]反=0.0000

[-0.0000]反=(10.0000-0.0001)-0.0000=1.1111可见[+0]反不等于[-0]反,即反码中的“零”也有两种表示形式。(4)反码的表数范围定点整数反码的数值范围为:-(2n-1)≤x≤2n-1。定点小数原码的数值范围为:-(1-2-n)≤x≤1-2-n。

实际上,反码也可看作是mod(2-2-n)(对于小数)或mod(2n+1-1)(对于整数)的补码。与补码相比,仅在末位差1,因此有些书上称小数的补码为2的补码,而称小数的反码为1的补码。322.2.1

定点数的表示三种机器数的小结最高位为符号位,书写上用“,”(整数)或“.”(小数)将数值部分和符号位隔开对于正数,原码=补码=反码对于负数,符号位为1,其数值部分:原码除符号位外每位取反末位加1补码原码除符号位外每位取反反码332.2.1

定点数的表示例题:已知[y]补求[y]补解:<Ⅰ>[y]补

=0.y1

y2

yn

y=0.y1

y2…yn

所以

-y=-0.y1

y2…yn[y]补

=1.y1y2

yn+2-n<Ⅱ>[y]补

=1.y1

y2

yn所以

[y]原

=1.y1

y2

yn+2-ny=(0.y1

y2

yn+2-n)所以

y=0.y1y2

yn+2-n……[y]补

=0.y1y2

yn+2-n[y]补连同符号位在内,每位取反,末位加1即得[-

y]补342.2.1

定点数的表示6、移码表示补码表示很难直接判断其真值大小如十进制x=+21x=–21x=+31x=–31x+25+10101+100000+11111+10000010101+10000011111+100000大大错错大大正确正确0,101011,010110,111111,00001+10101–10101+11111–11111=110101=001011=111111=000001二进制补码352.2.1

定点数的表示(1)移码定义

移码在数轴上的表示[x]移

=2n+x(2n>x≥2n)x

为真值,n

为整数的位数[x]移码2n+1–12n2n

–1–2n00真值如x=10100[x]移

=25+10100=1,10100用逗号将符号位和数值位隔开x=–10100[x]移

=25–10100=0,0110036练习题1、一个C语言程序在一台32位机器上运行。程序中定义了三个变量xyz,其中x和z是int型,y为short型。当x=127,y=-9时,执行赋值语句z=x+y后,xyz的值分别是

A.X=0000007FH,y=FFF9H,z=00000076H

B.X=0000007FH,y=FFF9H,z=FFFF0076H

C.X=0000007FH,y=FFF7H,z=FFFF0076H

D.X=0000007FH,y=FFF7H,z=00000076H37练习题2、假定有4个整数用8位补码分别表示r1=FEH,r2=F2H,r3=90H,r4=F8H,若将运算结果存放在一个8位寄存器中,则下列运算会发生溢出的是()A.r1xr2B.r2xr3C.r1xr4D.r2xr438练习题339练习题

40练习题(1)R1的内容为134,转换为二进制10000110B,十六进制为86H;R5的值为x-y=-112,-01110000B,补码表示10010000B=90H;R6的值为x+y=380,101111100B,7CH,溢出。(2)m的内容为原x的值,10000110B,为补码表示,所以原码为11111010B,即-122。n的内容二进制11110110B,原码为10001010B,即-10。所以K1的内容为-112。412.2.2

定点数的运算1、定点数的移位运算移位的意义

15米=1500厘米小数点右移2位机器中15相对于小数点左移2位左移:绝对值扩大右移:绝对值缩小在计算机中,移位与加减配合,能够实现乘除运算422.2.2

定点数的运算算术移位规则对有符号数的移位运算成为算术移位。不论是正数还是负数,移位后其符号位均不变,这是算术移位的重要特点。1右移添1左移添00反码补码原码负数0原码、补码、反码正数添补代码码制432.2.2

定点数的运算(1)机器数为正时,不论左移或右移,添补代码均为0。(2)由于负数的原码其数值部分与真值相同,故在移位时只要使符号位不变,其空位均添0。(3)由于负数的反码其各位除符号位外与负数的原码正好相反,故移位后所添的代码应与原码相反,即全部添1。(4)分析任意负数的补码可发现,当对其由低位向高位找到第一个“1”时,在此“1”左边的各位均与对应的反码相同,而在此“1”右边的各位(包括此“1”在内)均与对应的原码相同,即添0;右移时空位出现在高位,则添补的代码应与反码相同,即添1。442.2.2

定点数的运算算术移位的特点:对于正数,三种机器数算术移位后符号位均不变,左移最高位丢1,结果错误;右移最低位丢1,影响精度。对于负数,三种机器数算术移位后符号位不变。原码左移,高位丢1,结果出错;原码右移低位丢1,影响精度。补码左移,高位丢0,结果出错;补码右移低位丢1,影响精度。反码左移,高位丢0,结果出错;反码右移低位丢0,影响精度。452.2.2

定点数的运算算术移位的硬件实现(a)真值为正(b)负数的原码(c)负数的补码(d)负数的反码000100丢1丢1出错影响精度出错影响精度正确影响精度正确正确462.2.2

定点数的运算逻辑移位对无符号数的移位运算成为逻辑移位。逻辑移位的规则:

逻辑左移,高位丢失,低位补0

逻辑右移,低位丢失,高位补0472.2.2

定点数的运算2、原码定点数的加/减运算

两个原码表示的数相加,首先要判断符号位:如果符号位相同,就把两个数的绝对值相加,结果符号不变;如果符号位不相同,则做减法,将绝对值大的减去绝对值小的,结果的符号与绝对值大的数的符号相同。两个原码表示的数相减,首先将减数的符号取反,在按加法进行运算。482.2.2

定点数的运算3、补码定点数的加/减运算(1)补码加法补码加法的特点:符号位作为数的一部分参加运算,符号位的进位丢掉。运算结果为补码形式整数[A]补

+[B]补=[A+B]补(mod2n+1)小数[A]补

+[B]补=[A+B]补(mod2)

证明:任意两个数的补码之和,等于该两个数的和的补码分四种情况:(|x|<1,|y|<1,|x+y|<1)492.2.2

定点数的运算证明[x]补+[y]补=[x+y]补假设︱x︱﹤1,︱y︱﹤1,︱x+y︱﹤1现分四种情况来证明(1)x﹥0,y﹥0,则x+y﹥0[x]补=x,[y]补=y,[x+y]补=x+y

等式成立.(2)x﹥0,y﹤0,则x+y>0或x+y<0[x]补=x,[y]补=2+y,[x]补+[y]补=x+2+y当x+y>0时,2+(x+y)>2,进位2必丢失,又因(x+y)>0,故[x]补+[y]补=x+y=[x+y]补

当x+y<0时,2+(x+y)<2,又因(x+y)<0,故[x]补+[y]补=2+(x+y)=[x+y]补

所以上式成立502.2.2

定点数的运算(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]补

512.2.2

定点数的运算例如:x=0.1001,y=0.0101,求x+y=?[X]补=0.1001[Y]补=0.0101[X]补

0.1001+[Y]补

0.0101所以,x+y=0.1110

[X+Y]补

0.1110例如:X=+0.1011Y=-0.0101,求X+Y解:[X]补=0.1011[Y]补=1.1011[X]补

0.1011+[Y]补

1.1011[X+Y]补

10.0110

所以X+Y=+0.0110522.2.2

定点数的运算例:设A=–9,B=–5,求[A+B]补解:[A]补=1,0111[B]补=1,10111,0111+1,1011∴[A]补

+[B]补=1,001011,0010A+B=–1110532.2.2

定点数的运算(2)补码减法因为A–B=A+(–B),所以有补码减法:整数[A–B]补=[A+(–B)]补=[A]补

+[–B]补(mod2n+1)小数[A–B]补=[A+(–B)]补=[A]补

+[–B]补(mod2)

连同符号位一起相加,符号位产生的进位自然丢掉542.2.2

定点数的运算证明:(|x|<1,|y|<1,|x+y|<1)[X–Y]补=[X]补

–[Y]补

=[X]补

+[–Y]补(mod2)

只要证明[–Y]补

=–[Y]补则上式成立(可见教材P253)因为[X+Y]补=[X]补+[Y]补(mod2)

所以[Y]补=[X+Y]补-[X]补(1)

又[X–Y]补=[X+(–Y)]补

=[X]补

+[–Y]补所以

[

–Y]补=[X–Y

]补-[X]补

(2)

将(1)(2)相加,得

[Y]补+[

–Y]补=[X+Y]补-[X]补+[X–Y

]补-[X]补

=[X+Y+X-Y]补-[X]补-[X]补

=[X+X]补-[X]补-[X]补

=0证毕552.2.2

定点数的运算从[Y]补求[-Y]补的法则是:对[Y]补包括符号位“求反且最末位加1”例:设机器数字长为8位(含1位符号位)且A=15,B=24,用补码求A–B。562.2.2

定点数的运算练习1:设x=+0.1001,y=+0.1011用补码求x+y练习2:设机器数字长为8位(含1位符号位)且A=–97,B=+41,用补码求A–B[x+y]补=1.0100所以:X+Y=–0.1100[A–B]补

=01110110所以A-B=+118572.2.2

定点数的运算4.溢出的检测溢出:运算结果超出机器的表数范围定点加减法溢出条件:★同号数相加或异号数相减。★运算结果超载。1)溢出的检测可能产生溢出的情况两正数加,变负数,上溢(大于机器所能表示的最大数)两负数加,变正数,下溢(小于机器所能表示的最小数)582.2.2

定点数的运算2)溢出的检测方法◆双符号位法(参与加减运算的数采用变形补码表示)

x2>x≥0[x]’补=4+x0≥x>-2Sf1SF200 正确(正数)

01 上溢

10 下溢

11 正确(负数)

Sf1表示正确的符号,逻辑表达式为V=Sf1⊕Sf2,可以用异或门来实现592.2.2

定点数的运算例如:X=+0.

温馨提示

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

评论

0/150

提交评论