计算机的运算方法_第1页
计算机的运算方法_第2页
计算机的运算方法_第3页
计算机的运算方法_第4页
计算机的运算方法_第5页
已阅读5页,还剩142页未读 继续免费阅读

下载本文档

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

文档简介

大连理工大学软件学院赖晓晨计算机组成原理大连理工大学软件学院赖晓晨大连理工大学软件学院赖晓晨无符号数和有符号数数的定点表示和浮点表示定点运算浮点四则运算算术逻辑单元第六章计算机的运算方法大连理工大学软件学院赖晓晨6.1无符号数和有符号数计算机中的数均存放在寄存器中,寄存器的位数即机器字长。计算机中参与运算的有两类数:无符号数有符号数大连理工大学软件学院赖晓晨一、无符号数

无符号数:没有符号的数,寄存器的每一位存放的都是数值。8位0~25516位0~65535unsignedint大连理工大学软件学院赖晓晨二、有符号数

有符号数:数字的极性也用二进制数表示,0代表正数,1代表负数,即符号位也被数字化了,符号位放在数字的前端。

这种把符号“数字化”的数,叫做机器数,而数字原本的(带有正负号的)值称为真值。signedint大连理工大学软件学院赖晓晨1、机器数和真值带符号的数符号数字化的数+0.10110

1011小数点的位置+11000

1100小数点的位置–

11001

1100小数点的位置–0.10111

1011小数点的位置真值机器数大连理工大学软件学院赖晓晨1、机器数和真值带符号的数符号数字化的数+0.10110

1011小数点的位置+11000

1100小数点的位置–

11001

1100小数点的位置–0.10111

1011小数点的位置真值机器数

机器数按照不同的编码格式,分为原码、反码、补码、移码等类型。大连理工大学软件学院赖晓晨2、原码表示法符号位为0表示正数,为1表示负数,数值部分为真值的绝对值,又称为带符号的绝对值。约定正数的符号位与数值位用逗号分隔,小数的符号位与数值位用小数点分隔。大连理工大学软件学院赖晓晨整数的原码定义整数x

为真值n

为整数的位数如x=+1110[x]原

=0,1110[x]原

=24+1110=1,1110x=

1110[x]原

=0,x2n

x

≥02n

x0≥

x

>2n用逗号将符号位和数值部分隔开大连理工大学软件学院赖晓晨小数的原码定义x

为真值如x=+0.1101[x]原

=0.1101x=0.1101[x]原

=1(0.1101)=1.1101x1>

x

≥0[x]原

=1–x0≥

x

>1x=0.1000000[x]原

=1(0.1000000)=1.1000000x=

+0.1000000[x]原

=0.1000000用小数点将符号位和数值部分隔开用小数点将符号位和数值部分隔开大连理工大学软件学院赖晓晨原码运算举例例6.1已知[x]原

=1.0011求x解:例6.2已知[x]原

=1,1100求x解:x=1

[x]原

=1

1.0011=0.0011x=24

[x]原

=100001,1100=1100–

–0.00111100由定义得由定义得大连理工大学软件学院赖晓晨例6.4

求x=0的原码解:设x=+

0.0000例6.3已知[x]原

=0.1101求x解:∴

x

=+0.1101同理,对于整数[+0

]原

=0,0000[+

0.0000]原

=0.0000x=

0.0000[

0.0000]原

=1.0000[0

]原

=1,0000∴[+

0]原

[

0]原

根据定义∵[x]原

=0.1101大连理工大学软件学院赖晓晨原码表示法总结优点:表示方法简单,直观缺点:加减运算复杂判断正负确定位置判断结果符号电路复杂、不统一能否把减法转换为加法呢?大连理工大学软件学院赖晓晨3、补码表示法顺时针转3格,与逆时针 转(12-3=9)格的结果一致, 与顺时针转(12+3=15)格的结果也一致。12是一个特殊的数字,是会被“自动丢弃”的,这个数字实际是钟表的“模”,而时间值需要对12求模。3和-9这一对数,对于钟表的意义是相同的,这一对数,互称为以12为模的补数,+3可以用-9代替,同理-3可用+9代替。大连理工大学软件学院赖晓晨3、补码表示法顺时针转3格,与逆时针 转(12-3=9)格的结果一致, 与顺时针转(12+3=15)格的结果也一致。12是一个特殊的数字,是会被“自动丢弃”的,这个数字实际是钟表的“模”,而时间值需要对12求模。3和-9这一对数,对于钟表的意义是相同的,这一对数,互称为一12为模的补数,+3可以用-9代替,同理-3可用+9代替。

减去一个数,可以用加上这个数的补数来代替,从而可以把减法转变为加法。可归纳出以下结论:1.一个负数可用其正的补数来代替,这个正补数可以用此负数加模来求得。2.一个正数和负数互为补数时,他们的绝对值之和即为模数。3.正数的补数即该正数本身。4.互为补数大连理工大学软件学院赖晓晨看一个二进制的例子用二进制数计算6-3的值。6-3 =[[6-3]] =[[6]+[-3]] =[0,110+1,101] =[10,011] =[0,011] =+3大连理工大学软件学院赖晓晨补码的定义整数x

为真值n

为整数的位数(不包括符号位)[x]补

=0,x2n

x

≥02n+1+x0

x

≥2n(mod2n+1)如x=+1010[x]补

=27+1+(1011000)=[x]补

=0,1010x=10110001,0101000用逗号将符号位和数值部分隔开1011000100000000大连理工大学软件学院赖晓晨补码的定义x

为真值x=+0.1110[x]补

=x1>

x

≥02+x

0>

x

≥1(mod2)如[x]补

=0.1110x=0.11000001.0100000[x]补

=2

+

(0.1100000)=用小数点将符号位和数值部分隔开0.110000010.0000000小数大连理工大学软件学院赖晓晨求补码的方法定义法(负数的补码)反码+1法(p224前10行)(负数的补码)符号位不变,数值位从左到右依次取反,最右边的1及其后的0不变。补码的补码为原码大连理工大学软件学院赖晓晨补码举例解:x=+0.0001解:由定义得x=[x]补

–2=1.0001–10.0000例6.6已知[x]补

=1.0001求x由定义得例6.5已知[x]补

=0.0001求x=0.1111

–大连理工大学软件学院赖晓晨补码练习:求下列真值的补码真值0,10001101,01110100.11101.00100.00000.00001.00000,10001101,10001100.11101.11100.00001.0000不能表示[+0]补

=[0]补=1000110[x]补

[x]原x=+70x=0.1110x=0.0000x=70x=0.1110x=0.0000x=1.0000=1000110大连理工大学软件学院赖晓晨4、反码表示法反码经常用作求补码的过渡。定义如下:整数[x]反

=0,x2n

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

>2n(mod2n+1

1)如x

=+1101[x]反

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

=(24+11)1101=111111101用逗号将符号位和数值部分隔开x

为真值n

为整数的位数大连理工大学软件学院赖晓晨4、反码表示法小数x

=+0.1101[x]反

=

0.1101x=0.1010[x]反

=(22-4)

0.1010=1.1111

0.1010=1.0101如[x]反

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

>1(mod22-n)用小数点将符号位和数值部分隔开x

为真值n为小数的位数大连理工大学软件学院赖晓晨反码举例例6.10

求0的反码设x=+

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

=1,1110求x例6.8已知[x]反

=0,1110求x解:由定义得x=+1110解:=1,111011111=0001由定义得x=[x]反

(24+11)x=

0.0000[

0.0000]反=1.1111[0]反=1,1111∴[+0]反≠[0]反

大连理工大学软件学院赖晓晨三种机器数的小结最高位为符号位,书写上用“,”(整数)或“.”(小数)将数值部分和符号位隔开。对于正数,原码=补码=反码对于负数,符号位为1,其数值部分为: 原码除符号位外每位取反末位加1得到补码,原码除符号位外每位取反得到反码。大连理工大学软件学院赖晓晨例6.11000000000000000100000010…011111111000000010000001111111011111111011111111…128129-0-1-128-127-127-126二进制代码

无符号数对应的真值原码对应的真值补码对应的真值反码对应的真值012127…253254255…-125-126-127…-3-2-1…-2-1-0…+0+1+2+127…+0+1+2+127…+0+1+2+127…+0

设机器数字长为8位(其中1位为符号位)对于整数,当其分别代表无符号数、原码、补码和反码时,对应的真值范围各为多少?大连理工大学软件学院赖晓晨例6.12解:已知[y]补求[y]补<正>[y]补

=0.y1

y2

yn…y=0.y1y2

yn…y=0.y1

y2

yn…[y]补

=1.y1

y2

yn+2-n…<负>[y]补

=1.y1

y2

yn…[y]原

=1.y1y2

yn+2-n…

y

=(0.y1y2

yn

+2-n)…

y

=0.y1y2

yn+2-n…[y]补

=0.y1

y2

yn+2-n…设[y]补

=y0.y1y2

yn…大连理工大学软件学院赖晓晨例6.12解:已知[y]补求[y]补<正>[y]补

=0.y1

y2

yn…y=0.y1y2

yn…y=0.y1

y2

yn…[y]补

=1.y1

y2

yn+2-n…<负>[y]补

=1.y1

y2

yn…[y]原

=1.y1y2

yn+2-n…

y

=(0.y1y2

yn

+2-n)…

y

=0.y1y2

yn+2-n…[y]补

=0.y1

y2

yn+2-n…设[y]补

=y0.y1y2

yn…[y]连同符号位在内,按位取反,末位加1,即得[-y]大连理工大学软件学院赖晓晨5、移码表示法补码表示很难直接判断其真值大小如十进制x=+21x=–21x=

+31x=–31x+25+10101+100000+11111+10000010101+10000011111+1000000,101011,010110,111111,00001+10101–

10101+11111–

11111=110101=001011=111111=000001二进制补码x=+21x=–21x=

+31x=–31大连理工大学软件学院赖晓晨移码的定义x

为真值,n

为整数的位数[x]移

=2n+x(2n>x

≥2n)大连理工大学软件学院赖晓晨移码的定义x

为真值,n

为整数的位数[x]移

=2n+x(2n>x

≥2n)x

为真值n

为整数的位数(不包括符号位)[x]补

=0,x2n

x

≥02n+1+x0

x

≥2n(mod2n+1)补码的定义大连理工大学软件学院赖晓晨移码的定义x

为真值,n

为整数的位数[x]移

=2n+x(2n>x

≥2n)x

为真值n

为整数的位数(不包括符号位)[x]补

=0,x2n

x

≥02n+1+x0

x

≥2n(mod2n+1)补码的定义移码与补码的数值部分相同,符号位相反。大连理工大学软件学院赖晓晨移码在数轴上的表示[x]移码2n+1–12n2n

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

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

=25

–10100[x]移

=2n+x(2n>x

≥2n)=1,10100=0,01100大连理工大学软件学院赖晓晨移码的特点

当x=0时[+0]移

=25+0

当n=5时可见,最小真值的移码为全0。用移码表示浮点数的阶码能方便地判断浮点数的阶码大小=1,00000=1,00000=000000[0]移

=250∴[+0]移=[0]移[

100000]移=25

100000最小的真值为25=

100000大连理工大学软件学院赖晓晨-100000-11111-11110-00001±00000+00001+00010+11110+11111……真值x(n

=

5)[x]补[x]移[x]移对应的十进制整数真值、补码和移码的对照表……012313233346263……000000000010000001011111100000100001100010111110111111……011111011110000010000001000000111111100010100001100000-100000±00000+11111000000111111000000100000大连理工大学软件学院赖晓晨6.2数的定点表示和浮点表示小数点按约定方式标出一、定点表示Sf

S1S2

Sn…数符数值部分小数点位置Sf

S1S2

Sn…数符数值部分小数点位置或定点机小数整数原码补码反码–(1–2-n)~+(1–2-n)–(2n

–1)~+(2n

–1)–1~+(1–2-n)–(1–2-n)~+(1–2-n)–(2n

1)~+(2n

–1)–2n~+(2n

–1)大连理工大学软件学院赖晓晨二、浮点表示N=S×rj浮点数的一般形式S

尾数j

阶码r

基数(基值)计算机中r

取2、4、8、16

等当r=2N=11.0101=0.110101×210=1.10101×21=1101.01×2-10

=0.00110101×2100

S

小数、可正可负,j

整数、可正可负

规格化数二进制表示大连理工大学软件学院赖晓晨1、浮点数的表示形式Sf

代表浮点数的符号n

其位数反映浮点数的精度m

其位数反映浮点数的表示范围jf

和m

共同表示小数点的实际位置jf

j1

j2

jm

Sf

S1S2

Sn

……j

阶码S

尾数阶符数符阶码的数值部分尾数的数值部分小数点位置大连理工大学软件学院赖晓晨2、浮点数的表示范围–2(2m–1)×(1

2–n)–2–(2m–1)×2–n2(2m–1)×(1

2–n)2–(2m–1)×2–n最小负数最大负数最大正数最小正数负数区正数区下溢0上溢上溢–215

×(1

2-10)

–2-15

×2-10

215

×(1

2-10)

设m=4

n=10上溢阶码>最大阶码中断溢出处理下溢阶码<最小阶码按机器零处理2-15

×2-10

大连理工大学软件学院赖晓晨练习

设机器数字长为24位,欲表示±3万的十进制数,试问在保证数的最大精度的前提下,除阶符、数符各取1位外,阶码、尾数各取几位?满足最大精度可取

m=4,n=18解:…m=4,5,6,指数为15

可反映±3万之间的十进制数∴215

=32768214

=16384∵215×0.×××

×××18位…大连理工大学软件学院赖晓晨3、浮点数的规格化表示r=2,尾数的最高位为1r=4,尾数的最高2位不全为0r=8,尾数的最高3为不全为0大连理工大学软件学院赖晓晨4、浮点数的规格化r=2左规尾数左移1位,阶码减1右规尾数右移1位,阶码加1r=4左规尾数左移2位,阶码减1右规尾数右移2位,阶码加1r=8左规尾数左移3位,阶码减1右规尾数右移3位,阶码加1基数r

越大,可表示的浮点数的范围越大基数r

越大,浮点数的精度降低大连理工大学软件学院赖晓晨最大正数=215×(1–2–10)

2+1111×0.111111111110个1最小正数最大负数最小负数=2–15×2–1

=–215×(1–2–10)

=2–16=–2–15×2–1

=–2–162-1111×0.10000000009个02-1111×(–0.1000000000)9个02+1111×(–0.1111111111)10个1设m=4,n=10,r=2尾数规格化后的浮点数表示范围例题大连理工大学软件学院赖晓晨例题将+写成二进制定点数、浮点数及在定点机和浮点机中的机器数形式。其中数值部分均取10位,数符取1位,浮点数阶码取5位(含1位阶符)。19128解:设

x=+19128二进制形式定点表示浮点规格化形式[x]原

=1,0010;0.1001100000[x]补

=1,1110;0.1001100000[x]反

=1,1101;0.1001100000定点机中浮点机中000x=0.0010011x=0.0010011x=0.1001100000×2-10[x]原

=[x]补

=[x]反

=0.0010011000大连理工大学软件学院赖晓晨x=–1110100000例题

将–58表示成二进制定点数和浮点数,并写出它在定点机和浮点机中的三种机器数及阶码为移码、尾数为补码的形式(其他要求同上例)。解:设

x=–58二进制形式定点表示浮点规格化形式[x]原

=1,0000111010[x]补

=1,1111000110[x]反

=1,1111000101[x]原

=0,0110;1.1110100000[x]补

=0,0110;1.0001100000[x]反

=0,0110;1.0001011111定点机中浮点机中[x]阶移、尾补

=1,0110;1.0001100000x=–111010x=–(0.1110100000)×2110大连理工大学软件学院赖晓晨例6.15

写出对应下图所示的浮点数的补码形式。设n=10,m=4,阶符、数符各取1位。负数区正数区下溢0上溢上溢–2(2m–1)×(1

2–n)2(2m–1)×(1

2–n)2–(2m–1)×2–n最小负数最大正数最小正数–2–(2m–1)×2–n最大负数解:真值最大正数最小正数最大负数最小负数215×(1

2–10)2–15×2–10–2–15×2–10–215×(1

2–10)0,1111;0.11111111111,0001;0.00000000011,0001;1.11111111110,1111;1.0000000001补码大连理工大学软件学院赖晓晨

当浮点数尾数为0

时,不论其阶码为何值

按机器零处理机器零

当浮点数阶码等于或小于它所表示的最小数时,不论尾数为何值,按机器零处理如m=4n=10当阶码用移码,尾数用补码表示时,机器零为0,0000;0.000

1,0000

;×.×××

…×,××××;0.000

…有利于机器中“判0”电路的实现当阶码和尾数都用补码表示时,机器零为(阶码=16)大连理工大学软件学院赖晓晨短实数长实数临时实数符号位S

阶码尾数总位数1

8233211152641156480S

阶码(含阶符)尾数数符小数点位置阶码用移码表示,尾数为规格化表示四、IEEE754标准大连理工大学软件学院赖晓晨Pentium处理器浮点运算错误1994年6月,英特尔公司推出其划时代产品一一奔腾处理器。在芯片推出的前几天,英特尔发现奔腾芯片除法运算会发生偏差。90亿次除法可能出现1次错误,每27000年中会遇到一次。弗吉尼亚州的数学教授尼斯利博士发现了该错误。英特尔仅仅指出尚没有人发现类似的错误,但未肯定是因为奔腾芯片的技术问题导致。最后,Intel当时的CEOAndyS.Grove安迪·格鲁夫向公众道歉,并承诺为所有的用户无条件更换处理器。大连理工大学软件学院赖晓晨五、定点数和浮点数比较数的表示位数相同时,浮点数的表示范围远大于定点数的表示范围。当浮点数为规格化数时,其相对精度比定点数高。浮点数表示方法复杂,运算复杂,速度慢。在溢出判断和编程方面,定点数比浮点数繁琐(定点数:比例因子;浮点数:上溢)大连理工大学软件学院赖晓晨6.3定点运算一、移位运算1、移位的意义15m=1500cm小数点右移2位机器用语15相对于小数点左移2位(小数点不动)..左移:绝对值扩大右移:绝对值缩小在计算机中,移位与加减配合,能够实现乘除运算移位导致寄存器中出现空位,如何处理?大连理工大学软件学院赖晓晨2、算术移位(有符号数移位)规则1右移添1左移添00反码补码原码负数0原码、补码、反码正数添补代码码制符号位不变大连理工大学软件学院赖晓晨例6.16设机器数字长为8位(含1位符号位),写出A=+26时,三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。解:A=+26则[A]原

=[A]补

=[A]反

=0,0011010+

60,0000110+130,0001101+1040,1101000+

520,0110100+260,0011010移位前[A]原=[A]补=[A]反对应的真值机器数移位操作=+11010左移一位左移两位右移一位右移两位大连理工大学软件学院赖晓晨例6.16设机器数字长为8位(含1位符号位),写出A=+26时,三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。解:A=+26则[A]原

=[A]补

=[A]反

=0,0011010+

60,0000110+130,0001101+1040,1101000+

520,0110100+260,0011010移位前[A]原=[A]补=[A]反对应的真值机器数移位操作=+11010左移一位左移两位右移一位右移两位

对于正数,三种机器数移位后符号位均不变,左移时最高位丢失1,则结果出错;右移时最低位丢失1,影响精度。大连理工大学软件学院赖晓晨例6.17设机器数字长为8位(含1位符号位),写出A=–26时,三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。解:A=–26–61,0000110–131,0001101–1041,1101000–521,0110100–261,0011010移位前对应的真值机器数移位操作原码=–11010左移一位左移两位右移一位右移两位大连理工大学软件学院赖晓晨例6.17设机器数字长为8位(含1位符号位),写出A=–26时,三种机器数左、右移一位和两位后的表示形式及对应的真值,并分析结果的正确性。解:A=–26–61,0000110–131,0001101–1041,1101000–521,0110100–261,0011010移位前对应的真值机器数移位操作原码=–11010左移一位左移两位右移一位右移两位

对于负数,三种机器数移位后符号位均不变,负数的原码左移时,高位丢1,结果出错;右移时,低位丢1,影响精度。大连理工大学软件学院赖晓晨–61,1111001–131,1110010–1041,0010111–521,1001011–261,1100101移位前对应的真值机器数移位操作–71,1111001–131,1110011–1041,0011000–521,1001100–261,1100110移位前对应的真值机器数移位操作补码反码左移一位左移两位右移一位右移两位左移一位左移两位右移一位右移两位大连理工大学软件学院赖晓晨–61,1111001–131,1110010–1041,0010111–521,1001011–261,1100101移位前对应的真值机器数移位操作–71,1111001–131,1110011–1041,0011000–521,1001100–261,1100110移位前对应的真值机器数移位操作补码反码左移一位左移两位右移一位右移两位左移一位左移两位右移一位右移两位

对于负数,三种机器数移位后符号位均不变。负数的补码左移时,高位丢0,结果出错,右移时,低位丢1,影响精度;负数的反码左移时,最高位丢失0,则结果出错;右移时最低位丢失0,影响精度。大连理工大学软件学院赖晓晨3、算术移位的硬件实现(a)真值为正(b)负数的原码(c)负数的补码(d)负数的反码00010丢

1丢

1出错影响精度出错影响精度正确影响精度正确正确大连理工大学软件学院赖晓晨4、算术移位和逻辑移位的区别算术移位:有符号数的移位逻辑移位:无符号数的移位逻辑左移:低位补0,高位移丢逻辑右移:高位补0,低位移丢例如

01010011逻辑左移10100110逻辑右移01011001算术左移算术右移0010011011011001(补码)10110010大连理工大学软件学院赖晓晨二、加减法运算1、补码加减运算公式(1)加法(2)减法整数[A]补

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

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

)整数[A

–B]补=[A+(–B

)]补=[A]补

+[

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

–B]补=[A+(–B

)]补(mod2)连同符号位一起相加,符号位产生的进位自然丢掉=[A]补

+[

B]补大连理工大学软件学院赖晓晨2.举例解:[A]补[B]补[A]补

+[B]补+=0.1011=1.1011=10.0110=[A+B]补验证例6.18设A=0.1011,B=–

0.0101求[A+B]补0.1011–0.01010.0110∴A+B

=0.0110[A]补[B]补[A]补

+[B]补+=1,0111=1,1011=11,0010=[A+B]补验证–1001–1110–0101+例6.19设A=–9,B=–5求[A+B]补解:∴A+B

=–1110大连理工大学软件学院赖晓晨例设机器数字长为8位(含1位符号位)且A=15,B=24,用补码求A

–B解:A=15=0001111B=24=0011000[A]补

+[–

B]补+[A]补=0,0001111[–

B]补=1,1101000=1,1110111=[A

B]补[-B]原

=1,0011000练习1设x=y=,用补码求x+y9161116x+y=–0.1100=1216–练习2设机器数字长为8位(含1位符号位)且A=–97,B=+41,用补码求A

BA

–B=+1110110=+118∴A

–B=–1001=–9错错大连理工大学软件学院赖晓晨3、溢出

运算结果超出计算机字长所能表示范围的情况,称为溢出。 加减运算可能出现的三种情况,假设A、B均为正数。

A+B:有可能溢出

A-B:一定不会溢出

-A-B:有可能溢出大连理工大学软件学院赖晓晨溢出判断1)(符号相同两数)一位符号位判断溢出参加运算的两个数(减法时即为被减数和求补后的减数)符号相同,其结果的符号与原操作数的符号不同,即为溢出。A=-0.1011B=-0.0111[A]补

+[B]补+[A]补=1.0101[B]补=1.1001=10.1110=0.1110两数符号位相同,结果的符号位发生变化,溢出。大连理工大学软件学院赖晓晨溢出判断2)(任意符号位两数)一位符号位判断溢出参加运算的两个数,符号位可以不同,如果运算结果中最高数值位的进位与符号位的进位不同,则发生了溢出。A=-0.1011B=-0.0111[A]补

+[B]补+[A]补=1.0101[B]补=1.1001=10.1110=0.1110最高数值位无进位,符号位有进位,溢出。大连理工大学软件学院赖晓晨溢出判断3)两位符号位判断溢出参加运算的两个数,均采用双符号位(变形补码),如果结果的两位符号位不同,则发生了溢出。A=-0.1011B=-0.0111[A]补

+[B]补+[A]补=11.0101[B]补=11.1001=110.1110=10.1110结果两位符号位不同,溢出。大连理工大学软件学院赖晓晨溢出判断3)两位符号位判断溢出参加运算的两个数,均采用双符号位(变形补码),如果结果的两位符号位不同,则发生了溢出。A=0.1011B=0.0111[A]补

+[B]补+[A]补=00.1011[B]补=00.0111=01.0010结果两位符号位不同,本例上溢出,前例下溢出。

无论是否发生溢出,双符号位的高位总代表真正的符号,如果该位为1,表示结果为负,此时称为下溢,如果该位为0,表示结果为正,此时称为上溢。 上述结论对整数同样适用。大连理工大学软件学院赖晓晨4、补码加减法硬件电路V0

A

nGAGS

加法器(n+1)溢出判断求补控制逻辑0

X

nA、X均n+1位用减法标记GS

控制求补逻辑大连理工大学软件学院赖晓晨三、乘法运算定点数一位乘法1、定点原码一位乘法2、定点补码一位乘法校正法布斯法(booth)定点数二位乘法3、定点原码两位乘4、定点补码两位乘大连理工大学软件学院赖晓晨 0.1101× 0.1011 1101 1101 0000 11010.10001111积的符号是乘数和被乘数符号位的异或1、定点原码一位乘手算分析:X=0.1101,Y=0.1011;求X·Y按照乘数低位构造部分积权值相同位对齐多数相加积倍长大连理工大学软件学院赖晓晨

若[X]原=X0X1X2…Xn,[Y]原=Y0Y1Y2…Yn

则[X·Y]原=[X]原·[Y]原 =(X0Y0)|(X1X2…Xn)·(Y1Y2…Yn)人工算法和机器算法的异同性多个部分积相加不能一次完成乘积是乘数的2倍长,加法器需倍长,我们希望仍使用一倍长的加法器。

符号位

数值部分机器运算分析大连理工大学软件学院赖晓晨 0.1101× 0.1011

1101

1101

0000 11010.10001111右移代替左移。部分积相加时最低位只用了一次,此位将来不再参与运算,因此可将部分积寄存器右移一位乘数的各个位从右向左均只用一次,最低位不再使用,因此部分积右移时,乘数寄存器也可右移一位,即可用乘数寄存器的最高位接收部分积移出的位。被乘数乘数部分积部分积乘数抛弃大连理工大学软件学院赖晓晨乘法总结手算乘法的两个要素:按照乘数的低位来确定加被乘数,还是加0。加的时候被乘数要相对部分积左移一位导致手算缺点:加法器要倍长分析手算乘法还具备两个特点:乘数各位,从右到左依次只用一次。部分积低位只用一次结论:每计算一次部分积乘数可以右移一位,移出位丢弃,同时左侧最高位空出部分积每计算一次右移一位,等同于被乘数左移,同时移出位可以保存在乘数寄存器的最高位中大连理工大学软件学院赖晓晨例设X=0.1101,Y=0.1011,求X·Y。0.00000.11010.11010.11010.00000.1101初态,部分积=0乘数为1,加被乘数乘数为1,加被乘数乘数为0,加01.001110.1001111.0001111乘数为1,加被乘数0.100011111,得结果,符号位01011=0.01101,形成新的部分积1101=0.10011,形成新的部分积1110=0.01001,形成新的部分积1111=

部分积乘数说明++++大连理工大学软件学院赖晓晨例设X=0.1101,Y=0.1011,求X·Y。0.00000.11010.11010.11010.00000.1101初态,部分积=0乘数为1,加被乘数乘数为1,加被乘数乘数为0,加01.001110.1001111.0001111乘数为1,加被乘数0.100011111,得结果,符号位01011=0.01101,形成新的部分积1101=0.10011,形成新的部分积1110=0.01001,形成新的部分积1111=

部分积乘数说明++++思考:为什么最后一次加法后还需要一次移位?大连理工大学软件学院赖晓晨

部分积循环迭代

z0=0 z1=(z0+XYn)2-1 z2=(z1+XYn-1)2-1

… zi+1=(zi+XYn-i)2-1

… zn=(zn-1+XY1)2-1

移位-相加

乘法运算的控制流程大连理工大学软件学院赖晓晨例已知x=–0.1110y=0.1101求[x•y]原解:

0.00000.11100.11100.00000.11100.1110部分积初态z0=0

部分积乘数说明0.011101.0001101.01101100.101101101,得

z4逻辑右移1101=0.01111,得

z10110=0.00111,得

z21011=0.10001,得

z31101=逻辑右移逻辑右移逻辑右移+++++x*+0+x*+x*大连理工大学软件学院赖晓晨②数值部分按绝对值相乘①乘积的符号位

x0

y0=10=1x*•

y*=0.10110110则[x

y]原

=1.10110110特点绝对值运算逻辑移位用移位的次数判断乘法是否结束结果分析大连理工大学软件学院赖晓晨A、X、Q均n+1位移位和加受末位乘数控制0An

加法器控制门0Xn

移位和加控制计数器CSGM0Qn右移原码一位乘的硬件配置大连理工大学软件学院赖晓晨预备知识1:补码与真值的转换关系设[X]补=X0.X1X2…XnX=-X0+Xi2-i=-X0+0.X1X2…Xn

X<0时:[X]补=1.X1X2…Xn=2+XX=[X]补-2=1.X1X2…Xn

–2=-1+0.X1X2…Xn2、定点补码一位乘大连理工大学软件学院赖晓晨预备知识2:补码右移连同符号位将数右移一位,并保持符号位不变,相当于乘1/2。

2、定点补码一位乘[X]补=X0.X1X2…Xn[(1/2)*X]补=X0.X0X1X2…Xn大连理工大学软件学院赖晓晨补码一位乘用到的公式2、定点补码一位乘设[X]补=X0.X1X2…Xn

[Y]补=Y0.Y1Y2…YnYi2-i=(0.Y1Y2…Yn)[X*Y]补=[X]补

(-Y0+Yi2-i) 大连理工大学软件学院赖晓晨[X*Y]补=[X]补

(-Y0+Yi2-i)

[X*Y]补=[X]补*Yi2-i-[X]补*Y0

当y为正时,不校正;[X·Y]补=[X]补·

Y=[X]补(0.Y1Y2…Yn)

当y为负时,须校正;[X·Y]补=[X]补(0.Y1Y2…Yn)+[-X]补例设X=-0.1101,Y=+0.1011

求[X·Y]补设X=-0.1101,Y=-0.1011

求[X·Y]补

1)校正法实现补码一位乘大连理工大学软件学院赖晓晨[X*Y]补=[X]补

(-Y0+Yi2-i)

[X*Y]补=[X]补*Yi2-i-[X]补*Y0

当y为正时,不校正;[X·Y]补=[X]补·

Y=[X]补(0.Y1Y2…Yn)

当y为负时,须校正;[X·Y]补=[X]补(0.Y1Y2…Yn)+[-X]补例设X=-0.1101,Y=+0.1011

求[X·Y]补设X=-0.1101,Y=-0.1011

求[X·Y]补

1)校正法实现补码一位乘由Y的补码的最低位乘X的补码,然后右移一位,再加Y的补码的次低位乘X的补码,然后接着右移一位,再加。。。直到Y补码的最高数据位乘x补码,最后右移一位,得到XY积的补码大连理工大学软件学院赖晓晨例设X=-0.1101,Y=0.1011,求X·Y。

部分积 P 乘数Y

00.0000 1011 +[X] 11.0011 11.0011

右移1位→ 11.1001 1101 +[X] 11.0011 10.1100

右移1位→ 11.0110 0110 +0 00.0000 11.0110

右移1位→ 11.1011 0011 +[X] 11.0011 10.1110

右移1位→ 11.0111 0001

乘积高位 乘积低位

[X·Y]补=1.01110001X·Y=-0.10001111[X]补=11.0011[Y]补=00.1011大连理工大学软件学院赖晓晨例设X=-0.1101,Y=0.1011,求X·Y。

部分积 P 乘数Y

00.0000 1011 +[X] 11.0011 11.0011

右移1位→ 11.1001 1101 +[X] 11.0011 10.1100

右移1位→ 11.0110 0110 +0 00.0000 11.0110

右移1位→ 11.1011 0011 +[X] 11.0011 10.1110

右移1位→ 11.0111 0001

乘积高位 乘积低位

[X·Y]补=1.01110001X·Y=-0.10001111[X]补=11.0011[Y]补=00.1011为什么用两个符号位?大连理工大学软件学院赖晓晨例设X=-0.1101,Y=0.1011,求X·Y。

部分积 P 乘数Y 00.0000 1011 +[X] 11.0011 11.0011

右移1位→ 11.1001 1101 +[X] 11.0011

10.1100

右移1位→ 11.0110 0110 +0 00.0000 11.0110

右移1位→ 11.1011 0011 +[X] 11.0011 10.1110

右移1位→ 11.0111 0001

乘积高位 乘积低位

[X·Y]补=1.01110001X·Y=-0.10001111[X]补=11.0011[Y]补=00.1011用补码运算,“加”后的和可正可负,高位符号位代表了实际极性,所以可以防止因溢出而丢掉正确的符号。大连理工大学软件学院赖晓晨例设X=-0.1101,Y=-0.1011,求X·Y。

部分积 P 乘数Y

00.0000 0101 +[X] 11.0011 11.0011

右移1位→ 11.1001 1010 +0 00.0000 11.1001

右移1位→ 11.1100 1101 +[X] 11.0011 10.1111

右移1位→ 11.0111 1110 +0 00.0000 11.0111

右移1位→ 11.1011 1111

+[-X] 00.1101 00.10001111

乘积高位 乘积低位[X]补=11.0011[Y]补=11.0101[X·Y]补=0.10001111X·Y=0.10001111注意:乘数用Y的补码!大连理工大学软件学院赖晓晨

[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]补充一项Yn+1=0,则上式可写为:2)布斯(Booth)法补码一位乘大连理工大学软件学院赖晓晨按机器执行顺序求出每一步的部分积。[z0]补=0[z1]补={[z0]补+(Yn+1-Yn)[X]补}2-1

Yn+1=0[z2]补={[z1]补+(Yn-Yn-1)[X]补}2-1…[zi]补={[zi-1]补+(Yn-i+2-Yn-i+1)[X]补}2-1…[zn]补={[zn-1]补+(Y2-Y1)[X]补}2-1[zn+1]补={[zn]补+(Y1-Y0)[X]补}=[X·Y]补Booth法控制流程大连理工大学软件学院赖晓晨具体步骤:乘数附加位,置0,即Yn+1=0

分析[X]的系数可能性,(Yi+1-Yi)可能有不同的组合加法重复n+1步,最后一次不移位,得到[X·Y]补例X=-0.1101,Y=0.1011求[X·Y]补

YiYi+1操作0/10/1Pi

+0,右移1位01Pi

+[X]补,右移1位10Pi

+[-X]补,右移1位大连理工大学软件学院赖晓晨例设X=-0.1101,Y=0.1011,求X·Y。

部分积 P 乘数Y 00.0000 0.10110 +[-X] 00.1101 00.1101

右移1位→ 00.0110 101011 +0 00.0000 00.0110

右移1位→ 00.0011 010101 +[X] 11.0011 11.0110

右移1位→ 11.1011 001010 +[-X] 00.1101 00.1000

右移1位→ 00.0100 000101 +[X] 11.0011 11.0111 00010

乘积高位 乘积低位[X]补=11.0011[Y]补=00.1011Yi+1Yi00/11Pi+010Pi+

[X]补01Pi+[-X]补[X·Y]补=1.01110001

X·Y=-0.10001111

温馨提示

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

评论

0/150

提交评论