第二章运算方法与运算器_第1页
第二章运算方法与运算器_第2页
第二章运算方法与运算器_第3页
第二章运算方法与运算器_第4页
第二章运算方法与运算器_第5页
已阅读5页,还剩238页未读 继续免费阅读

下载本文档

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

文档简介

第二章运算方法与运算器

运算方法和运算器本章内容:

2.1数据与文字的表示方法

2.2定点加法、减法运算

2.3定点乘法运算

2.4定点除法运算

2.5定点运算器的组成

2.6浮点运算方法和浮点运算器本章小结运算方法和运算器2.1数据与文字的表示方法2.1.1数据格式2.1.2数的机器码表示2.1.3字符与字符串的表示方法2.1.4汉字的表示方法2.1.5校验码数据与文字的表示方法2.1.1数据格式

计算机中常用的数据表示格式有两种:(1)定点格式(2)浮点格式

定点格式(小数点位置固定)容许的数值范围有限,但要求的处理硬件比较简单。

浮点格式(小数点位置浮动)容许的数值范围很大,但要求的处理硬件比较复杂。数据格式1.

定点数的表示方法定点表示:约定机器中所有数据的小数点位置是按约定固定不变的,小数点就不再使用记号“.”来表示。定点数据的形式:纯小数或纯整数。

(设:定点数表示为x=x0x1x2…xn

其中:x0符号位,0代表正号,1代表负号)小数点的位置约定在符号位x0的后面(不显示)小数点的位置约定在数值位xn的后面(不显示)定点数的表示方法定点数例例:X=+1010110.纯整数:X=01010110.正数,符号位取0Y=-1101001.纯整数:Y=11101001.负数,符号位取1X=+0.11011Y=-0.10101符号位取0纯小数:X=0.11011符号位取1纯小数:X=1.10101纯整数:X=01010110符号位取0纯整数:Y=11101001符号位取1符号位取0纯小数:X=0.11011符号位取1纯小数:X=1.10101注意到:无论是整数或是小数,在机器数的表示中,都不出现小数点“.”,只是约定其位置。定点数例(x0x1x2…xn

各位均为0时最小;各位均为1时最大)纯小数的表示范围:0≤|x|≤1-2-n

(2.1)

纯整数的表示范围为:

0≤|x|≤2n-1

(2.2)

目前计算机中多采用定点纯整数表示,因此将定点数表示的运算简称为整数运算。

定点数的表示方法2、浮点数的表示方法例:156.78 =15.678×101

=

1.5678×102

=0.15678×103=M×RE其中:M为尾数;R为基数;E为阶码(指数)。二进制数在定点计算机中,一般约定:尾数|M|<1.0,并按此原则确定各数据的浮点表示格式。∴上例+156.67=0.15678×103

(规格化表示法)同理:对于二进制数+1011.1101=+0.10111101×2+4

=0.10111101×2+100=M×RE那么,计算机中究竟采用哪种数据形式?显然存在多种数据形式浮点数的表示方法浮点数表示可见: 一个机器浮点数由阶码E和尾数M及其符号位组成。约定:尾数M用定点小数表示,给出有效数字的位数,M决定了浮点数的表示精度;

阶码E:用整数形式表示,指明小数点在数据中的位置,其决定了浮点数的表示范围。∴浮点数的一般形式为:

浮点数表示按照IEEE754的标准,32位浮点数和64位浮点数的标准格式为:其中:S=浮点数的符号位,0表示正数,1表示负数。

M=尾数,23位,用纯小数表示。E=阶码,8位,阶符采用隐含方式,即采用移码方式来表示正负指数。

其中:S=浮点数的符号位,0表示正数,1表示负数。

M=尾数,52位,用纯小数表示。E=阶码,11位,阶符采用隐含方式,即采用移码方式来表示正负指数。

浮点数表示几点注释:

为了提高数据的表示精度,当尾数的值不为

0时,其绝对值|M|应≥0.5,即:尾数绝对值域的最高有效位应为1,否则通过修改阶码同时左右移小数点的办法,使其变成这一表示形式,这称为浮点数的规格化表示。浮点数所表示的范围显然远比定点数大。以下两种情况计算机都把该浮点数看成零值,称为机器零。⑴当浮点数的尾数M为0;(不论其阶码E为何值)⑵当阶码E的值<Emin值时。(不管其尾数M为何值)

浮点数表示[解:]首先分别将整数和分数部分转换成二进制数:20.59375=10100.10011然后移动小数点,使其在第1,2位之间

10100.10011=1.010010011×24

小数点被左移了4位,

于是得到:e=4

尾符

S=0,阶码

E=4+127=131,尾数

M=010010011

最后得到32位浮点数的二进制存储格式为:0100000110100100110000000000

0000

=(41A4C000)16此“1”被隐藏[例]:将十进制数20.59375转换成位浮点数的二进制格式来存储。

3.十进制数串的表示方法十进制数串在计算机内主要有两种表示形式:

1.字符串形式字符串形式:每一个十进制的数位或符号位都用一个字节存放。如:+12

+12-38-382.压缩的十进制数串形式压缩的十进制数串形式:一个字节存放两个十进制的数位。如:+123、-12

123C(+123)012D(-12)十进制数的表示方法在传统的计算机体系结构中,用指令本身来说明操作数据的类型。如:定点加法表示操作数是纯小数或纯整数;浮点加法表示操作数是浮点数;十进制加法表示操作数是BCD数。由于操作数据类型不同,要设三种不同的指令(操作码)来加以区分。4.

自定义数据表示数串的表示自定义数据表示则用数据本身来说明数据类型。表示形式有两种,即标志符数据表示和描述符数据表示。标志符数据表示:要求对每一个数据都附加标志符,其格式如下:标识符数据其中:标志符指明后面的数据所具有的类型,如整数、浮点数、BCD数、字符串等。数串的表示描述符数据表示:主要用来描述多维结构的数据类型,如向量、矩阵、记录等。其格式为:描述符标志位特征标记数据块长度数据块起始地址

指明这是一个数据描述符指明数据的特征指明数组中元素个数指明数据块的首地址注:描述符指令中并未给出具体数据,仅指出数据的性质和存储地点。标志符与描述符表示的区别:参见教材P23数串的表示2.1.2数的机器码表示

基本思想:把符号位和数字位一起编码来表示一个 实际的数。主要表示方法有:原码、补码、反码、移码等。各种编码表示的数称为机器数或机器码;其对应的真实数值称为该编码对应的真值。数的机器码表示1.原码表示法若定点小数为x=±0.x1x2…xn,则其原码表示的定义是:式中[x]原是机器数,x是真值。例如,x=+0.1001,则[x]原=0.1001x=-0.1001,则[x]原=1.1001数值符号数的原码表示x1>x≥01-x=1+|x|0≥

x>-1对于定点整数

x=±x1x2…xn,则原码的定义是:对于定点整数,其原码形式为:

[x]原=x0x1x2…xn,注意到:原码机器中“+0”、“-0”有两种形式:对于定点小数:[+0]原=0.000…0[-0]原=1.000…0对于定点整数:[+0]原=0000…0.[-0]原=1000…0.数的原码表示x2n>x≥02n-x=2n+|x|

0≥x>-2n(2.8)符号数值一般情况下,对于定点小数,其真值与原码之间的转换符合下面的规律:

x=+0.x1x2…xn[x]原=0.x1x2…xnx=-0.x1x2…xn[x]原=1.x1x2…xn对于定点整数,其真值与原码之间的转换符合下面的规律:

x=+x1x2…xn[x]原=0x1x2…xn.x=-x1x2…xn[x]原=1x1x2…xn.数的原码表示

原码表示法的主要特点是简单、易懂,但它的最大缺点是:由于数值部分采用绝对值表示,因而使得加减法运算比较复杂,而加减法运算正是计算机中最常使用的运算。所以,必须探讨解决方法——补码则正是一种解决方法。数的原码表示2.补码表示法

补码的概念(以钟表对时为例)

假设现在的标准时间为4点正;而有一只表已经7点了,为了校准时间,可以采用两种方法:

(1)倒拨3小时 7-3=4 (2)顺拨9小时 7+9=12+4=0+4=4显然: 7-3=7+9 (mod12)即 -3=+9 (mod12)

当模数Mod=12时,(-3)是+9补码。[X]补=模数+X其中,模数=基数n,n为计算装置的位数(字长),模数也与零等值。

∴从这里可以得到一个启示,就是负数用补码表示时,可以把减法转化为加法。数的补码表示补码的定义:1、定点小数例如

x=+0.1011,则[x]补=0.1011;x=-0.1011,则[x]补=10+x=10.0000-0.1011

=1.0101正数的补码就是本身负数的补码需作运算数的补码表示x1>x≥02+x=2-|x|0≥

x≥-1(mod2)10.0000

-0.10111.0101根据补码定义,求负数的补码时需作一次减法运算,这显然是不补码方法的初衷。后面将介绍反码表示法可以解决负数的求补问题。2、定点整数例:已知 x=+10111, y=-11011,求[x]补、[y]补

(n=5)按定义:[x]补=010111 [y]补=25+1+y=1000000-11011=100101数的补码表示x2n

>x≥0

2n+1+x=2n+1-|x|0≥

x≥-2n(mod

2n+1)

100000011011100101注:上式机器数的位数为n+1数的补码表示注:0的补码只有一种形式

对于定点小数:[+0]补=[-0]补=0.0000

对于定点整数:[+0]补=[-0]补=00000.

因此,补码的表示范围相对于原码、反码来讲多一种,定点小数可以表示-1,n+1位定点整数可以表示-2n。3.反码表示法二进制数求反:就是二进制的各位数码0变为1,1变为0。即:若xi=0,则=1。若xi=1,则=0.对定点小数,反码的定义参见书(2.11)式。数的反码表示正数的反码就是本身负数的反码则是符号位为1,数值位求反。x1>x≥0(2-

2-n)

+x=(2-

2-n)_|x|0≥

x>-1(2.11)由式(2.11)可以得出:[x]反+|x|=1.111…1=10.0…0-0.00…1=2-

2-n

得出:

[x]反=(2-2-n)+x

0≥

x>-1数的反码表示比较反码与补码的公式

[x]反=(2-2-n)+x

[x]补=2+x可得到:[x]补=[x]反+2-n由此可知一个由反码求补码的重要公式,即:一个负数的补码,可以通过将该数符号位置1,其余取反,然后在最末位(2-n)上加1

的方法直接获得。数的补码与反码关系例:已知 x=+0.1011, y=-0.1101,求[x]补、[y]补按定义:[x]补=0.1011 (注:正数的补码就是该数本身)

[y]补=1.0010+0.0001 =1.0011 [y]反2-n注意到:1、0的反码不唯一:[+0]反=0.00…0;[-0]反=1.11…12、比较反码与补码的公式:[x]反=(2-2-n)+x

[x]补=2+x可知:补码与反码的关系为:[x]补=[x]反+2-n数的补码与反码关系

上面的公式告诉我们,若要一个负数变补码,其方法是符号位置1,其余各位0变1,1变0,然后在最末位(2-n)上加1。对定点整数,反码表示的定义为:也可以用同样的方法得出定点整数的补码与反码的关系,找出利用反码求定点整数补码的方法。x2n

>x≥0

(2n+1-1)+x0≥

x≥-2n

(2.13)_数的补码与反码关系

求一个数的补码的另一种有效的转换方法:

对于负数,将原码的符号位不变(或支将真值的符号位至1),数值部分由低位向高位转换,对开始遇到的0和第一个1取其原码,以后的各位均取反。例:y=-0.110100,求[y]补解:[y]补=1.001

100保持不变逐位取反[y]反=1.001011[y]补=1.001011+0.000001=1.001100数的补码与反码关系4.移码表示法

在计算机中,移码通常用于表示浮点数的阶码。由于阶码一般取整数,所以移码通常只用于整数的表示。对定点整数,移码的定义是:

[x]移=2n+x

2n>x≥-2n(n为移码数值部分的位数)移码的表示方法例:若阶码数值部分为5位,以x表示真值,则

[x]移=25+x

25>x≥-25

又例:当正数x=+10101时,[x]移=1,10101

当负数x=-10101时,[x]移=25+x=25-10101=0,01011。注意到:移码中的逗号不是小数点,而是表示左边一位是符号位。显然,移码中符号位x0表示的规律与原码、补码、反码相反。移码的表示范围和补码一致,0只有一种表示方式,只是符号位正好相反。移码的表示方法机器码表示法小结:在数据的四种机器表示法中,正数的原码、反码、补码等于真值,只有负数才分别有不同的表示方法。补码和移码的0只有一种表示方法,因此其表示范围相对于原码和反码多一种,定点小数可表示-1(移码没有小数形式),正数可表示-2n。移码表示法主要用于表示浮点数的阶码,可以直接比较大小。表示范围和补码相同,只有最高位相反。机器码表示法小结由于补码表示对加减法运算十分方便,因此目前机器中广泛采用补码表示法。在这类机器中数用补码表示,补码存储,补码运算。(也有些机器,数用原码进行存储和传送,运算时改用补码。还有些机器在做加减法时用补码运算,在做乘除法时用原码运算)机器码表示法小结[例3]以定点整数为例,用数轴形式说明原码、反码、补码表示范围和可能的数码组合情况。

[解:]

原码、反码、补码表示分别示于下图。与原码、反码不同,在补码表示中“0”只有一种形式,

且用补码表示负数时范围可到-2n

机器码表示法小结[例4]将十进制真值(-127,-1,0,+1,+127)列表表示成二进制数及原码、反码、补码、移码值。

[解:]

二进制真值x及其诸码值列于下表,其中0在[x]原[x]反中有两种表示。由表中数据可知,补码值与移码值差别仅在于符号位不同。机器码表示法小结[例5]

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

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

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

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

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

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

(15个1)机器码表示法小结(2)定点原码小数表示

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

最小负数值=-(1-2-15)10=(-0.111..11)2

[例6]假设由S,E,M三个域组成的一个32位二进制字所表示的非零规格化浮点数x,真值表示为:

x=(-1)s×(1.M)×2E-128

问:它所表示的规格化的最大正数、最小正数、最大负数、最小负数是多少?

[解:](1)最大正数11111111111111111111111111111110x=[1+(1-2-23)]×2127(2)最小正数

00000000000000000000000000000000x=1.0×2-128机器码表示法小结(4)最大负数

00000000000000000000000000000000x=-1.0×2-128

11111111111111111111111111111111x=-[1+(1-2-23)]×2127

(3)最小负数机器码表示法小结2.1.3字符与字符串的表示方法1.字符的表示方法

目前国际上普遍采用的字符系统是七单位的ASCII码(美国国家信息交换标准字符码),它包括10个十进制数码,26个英文字母和一定数量的专用符号,如$,%,+,=等,共128个元素,因此二进制编码需7位,加一位偶校验位,共8位一个字节。

ASCII码规定8个二进制位的最高一位为0,余下的7位可以给出128个编码,表示128个不同的字符。字符和字符串的表示方法表2.1ASCII字符编码表0000010100111001011101110000NULDELSP0@Pp0001SOHDC1!1AQaq0010STXDC2“2BRbr0011ETXDC3#3CScs0100EOTDC4$4DTdt0101ENQNAK%5EUeu0110ACKSYN&6FVfv0111DELETB7GWgw1000BSCAN(8HXhx1001HTEM)9IYiy1010LFSUB*:JZjz1011VTESC+;K[k{1100FFFS,<L\1|1101CRGS-=M]m}1110SORS.>Nn~1111SIUS/?O_oDEL0-3位4-6位2.字符串字符串:是指连续的一串字符,通常方式下,它们依次占用主存中连续的多个字节,每个字节存一个字符。[例]将字符串:

IF└┘A>B└┘THEN└┘READ(C)

从高位字节到低位字节依次存在主存中。[解:]设:主存单元长度由4个字节组成。每个字节中存放相应字符的ASCII值,文字表达式中的空格“└┘”在主存中也占一个字节的位置。因而每个字节分别存放十进制的73、70、32、65、62、66、32、84、72、69、78、32、82、69、65、68、40、67、41、32。

字符和字符串的表示方法IF空A>B空THEN空READ(C)空主存各字节单元内容字符和字符串的表示方法2.1.4汉字的表示方法1.汉字的输入编码包括:数字码、拼音码和字形码数字码:常用的是国标区位码,用数字串代表一个汉字输入。区位码是将国家标准局公布的6763个两级汉字分为94个区,每个区分94位,实际上把汉字表示成二维数组,每个汉字在数组中的下标就是区位码。区码和位码各两位十进制数字,因此输入一个汉字需按键四次。数字编码输入的优点是无重码,且输入码与内部编码的转换比较方便,。缺点是代码难以记忆。拼音码:拼音码是以汉字拼音为基础的输入方法。使用简单方便,但汉字同音字太多,输入重码率很高,同音字选择影响了输入速度。汉字的表示方法(汉字的输入编码)字形码:字形编码是用汉字的形状来进行的编码(例:五笔字型)。把汉字的笔划部件用字母或数字进行编码,按笔划的顺序依次输入,就能表示一个汉字。为了加快输入速度,在上述方法基础上,发展了词组输入\联想输入等多种快速输入方法。但是都利用了键盘进行“手动”输入。理想的输入方式是利用语音或图象识别技术“自动”将拼音或文本输入到计算机内,使计算机能认识汉字,听懂汉语,并将其自动转换为机内代码表示。目前这种理想已经成为现实。

汉字的表示方法(汉字的输入编码)2.汉字内码

汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。英文字符的机内代码是七位的ASCII码,当用一个字节表示时,最高位为“0”。为了与英文字符能相互区别,汉字机内代码中两个字节的最高位均规定为“1”。注意:有些系统中字节的最高位用于奇偶校验位,这种情况下用三个字节表示汉字内码。汉字的表示方法(汉字的内码)3.汉字字模码字模码是用点阵表示的汉字字形代码,它是汉字的输出形式。。例如:字模码汉字的表示方法(汉字字模码)汉字的字模码为:16位×16位=32字节注意到:字模点阵只能用来构成汉字库,而不能用于机内存储。字库中存储了每个汉字的点阵代码,用于汉字的显示输出或打印输出。当显示输出或打印输出时才检索字库,输出字模点阵,得到字形。汉字的输入编码、汉字内码、字模码是计算机中用于输入、内部处理、输出三种不同用途的编码,不要混为一谈。汉字的表示方法(汉字字模码)各种因素常常导致计算机在处理信息过程中出现错误。为了防止错误,可将信号采用专门的逻辑线路进行编码以检测错误,甚至校正错误。2.1.5校验码最简单且应用广泛的检错码方法是奇偶校验法,即:采用一位校验位的奇校验或偶校验的方法。设x=(x0x1…xn-1)是一个n位字,则奇校验位C定义为:C=x0⊕x1⊕…⊕xn-1式中⊕代表按位加,只有当x中包含有奇数个1时,才使C=1,即C=0。同理,偶校验位C定义为C=x0⊕x1⊕…⊕xn-1

即x中包含偶数个1时,才使C=0。效验码

假设一个字x从部件A传送到部件

B。在源点A,校验位C可用上面公式算出来,并合在一起将(x0x1…xn-1C)送到B,采用偶效验。假设在B点真正接收到的是x=(x'0x'1…x'n-1C'),然后计算:F=x'0⊕x'1⊕…⊕x'n-1⊕C‘

若F=1,意味着收到的信息有错,若F=0,表明x字传送正确。奇偶校验可提供奇数个错误检测,但无法检测偶数个错误,更无法识别错误信息的位置。(循环校验码CRC可解决此问题)效验码[例7]见书 P30数据偶校验编码C奇校验编码C101010100101010000000000011111111111111110101010-01010100-00000000-01111111-11111111-10101010-01010100-00000000-01111111-11111111-效验码[解]假如校验位后传送的数码为:数据偶校验编码C奇校验编码C1010101001010100000000000111111111111111101010100010101001000000000011111111111111110101010101010101000000000001011111110111111111效验码2.2定点加法减法运算

2.2.1补码加法2.2.2补码减法2.2.3溢出概念与检验方法2.2.4基本的二进制加法、减法器2.2.5十进制加法器定点加减法运算2.2.1补码加法补码加法的公式是:[x]补+[y]补=[x+y]补(mod2)

现分四种情况来证明。假设采用定点小数表示,因此证明的先决条件是:︱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意义下,任意两数的补码之和等于该两数之和的补码.这是补码加法的理论基础,其结论也适用于定点整数。补码的加法[例]:[x]补=0.1001,[y]补=0.0101[x]补

0.1001+[y]补

0.0101

[x+y]补

0.1110

所以x+y=+0.1110

补码的加法[例]:x=+0.1011,y=-0.0101,求x+y。[解:][x]补=0.1011,

[y]补=1.1011[x]补

0.1011+[y]补1.1011

[x+y]补

10.0110

所以x+y=0.0110最高位1自行丢失可见,补码加法的特点为:

1、符号位作为数的一部分直接参加运算;

2、要在模2的意义下相加,即超过2的进位要自动丢掉。整数的计算同样适合,只是模不同。补码的加法2.2.2补码减法

由补码的原理可知,补码可以通过加法器来完成减法计算,进而简化运算器的结构。补码的减法公式如下:[x-y]补=[x]补-[y]补=[x]补+[-y]补公式的证明简单,只需证明:[-y]补=-[y]补即可。(见书P32)补码的减法补码的减法现证明如下:

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

(mod2)

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

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

(2.19b)

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

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

故:[-y]补=

-[y]补(2.20)补码的减法剩下的问题:只要给出[-y]补如何求取即可。已知[y]补,求取[-y]补的方法:

对[y]补包括符号位“求反且最末位加1”,即可得到。

即:[-y]补=[y]补+2-n

其中符号[y]补表示对[y]补作包括符号位在内的求反操作,2-n表示最末位的1连同符号位取反+2-n为末位+1[例10]

已知x1=-0.1110,x2=+0.1101,

求:[x1]补,[-x1]补,

[x2]补,[-x2]补。

[解:]

[x1]补=1.0010

[-x1]补=[x1]补+2-4=0.1101+0.0001=0.1110

[x2]补=0.1101

[-x2]补=[x2]补+2-4=1.0010+0.0001=1.0011补码的减法[例11]

x=+0.1101,y=+0.0110,求x-y。[解]:[x]补=0.1101

[y]补=0.0110,

[-y]补=1.1010[x]补

0.1101+[-y]补

1.1010

[x-y]补

10.0111所以:

x-y=+0.0111补码的减法[又例]

x=+0.0111,y=-0.0110,求x-y。[解]:

[x]补=0.0111

[y]补=1.1010

[-y]补=0.0110

[x]补

0.0111+[-y]补

0.0110

[x-y]补

0.1101>0所以:

x-y=+0.1101补码的减法[又例]

x=+0.0110,y=+0.1110,求x-y。[解]:

[x]补=0.0110

[y]补=0.1110

[-y]补=1.0010

[x]补

0.0110+[-y]补

1.0010

[x-y]补

1.1000<0所以:

x-y=-0.1000补码的减法2.2.3溢出概念与检测方法

以定点小数为例:在定点小数机器中,数的表示范围为|x|<1.在运算过程中如出现大于1的现象,称为“溢出”。(这在定点机中是不允许的)

机器定点小数表示如:两个正数相加,结果为负(即:大于机器所能表示的最大正数),称为上溢。而两个负数相加,结果为正(即:小于机器所能表示的最小负数),称为下溢。溢出概念与检测方法[例12]

x=+0.1011,y=+0.1001,求x+y。[解:]

[x]补=0.1011,[y]补=0.1001[x]补

0.1011+[y]补

0.1001[x+y]补

1.0100

两正数相加,结果为负,显然错误。(运算中出现了“上溢”)溢出概念与检测方法有进位无进位[又例]

x=+0.1011,y=+0.0010,求x+y。[解:]

[x]补=0.1011,[y]补=0.1001[x]补

0.1011+[y]补

0.0010[x+y]补

0.1101两正数相加,结果无溢出溢出概念与检测方法无进位无进位[例13]

x=-0.1101,y=-0.1011,求x+y。[解:]

[x]补=1.0011[y]补=1.0101

[x]补

1.0011

+[y]补

1.0101[x+y]补

0.1000两负数相加,结果为正,显然错误。(运算中出现了“下溢”)溢出概念与检测方法[又例]

x=-0.1101,y=-0.1011,求x+y。[解:]

[x]补=1.0011[y]补=1.0101

[x]补

1.0011

+[y]补

1.0101[x+y]补

0.1000两负数相加,结果为正,显然错误。(运算中出现了“下溢”)溢出概念与检测方法无进位有进位[又例]

x=-0.1101,y=-0.0010,求x+y。[解:]

[x]补=1.0011[y]补=1.1110

[x]补

1.0011

+[y]补

1.1110[x+y]补

1.0001两负数相加,结果为负,无溢出。溢出概念与检测方法有进位有进位产生“溢出”的原因:

分析可知,当最高有效数值位的运算进位与符号位的运算进位不一致时,将产生运算“溢出”。进一步结论:

当最高有效位产生进位而符号位无进位时,产生上溢;当最高有效位无进位而符号位有进位时,产生下溢。溢出概念与检测方法“溢出”检测方法:

为了判断“溢出”是否发生,可采用两种检测的方法。第一种方法:采用双符号位法,这称为“变形补码”或“模4补码”,从而可使模2补码所能表示的数的范围扩大一倍。变形补码定义为(mod4)

:x2>x≥04+x=4-|x|0≥

x≥-2(2.22)溢出概念与检测方法或用同余式表示:[x]补=4+x(mod4)下式也同样成立:

[x]补+[y]补=[x+y]补

(mod4)

1.两个符号位都看作数码一样参加运算

2.两数进行以4位模的加法,即最高符号位上产生的进位要丢掉。

采用变形补码后,如果两个数相加后,其结果的符号位出现“01”或“10”两种组合时,表示发生溢出。这是因为两个绝对值小于1的数相加,其结果不会大于或等于2。所以,最高符号位所表示的是结果的正确符号。溢出概念与检测方法为了得到两数变形补码之和等于两数之和的变形补码,

样必须:

[例14]

x=+0.1100,y=+0.1000,求x+y。溢出概念与检测方法

[解]

:[x]补=00.1100,

[y]补=00.1000

[x]补

00.1100

+[y]补

00.1000

01.0100

两个符号位出现“01”,表示已溢出,即结果大于+1。上溢

[又例]

x=+0.1100,y=+0.0001,求x+y。溢出概念与检测方法

[解]

:[x]补=00.1100,

[y]补=00.1000

[x]补

00.1100

+[y]补

00.0001

00.1101

两个符号位=“00”,表示无溢出。

[例15]

x=-0.1100,y=-0.1000,求x+y。溢出概念与检测方法

[解]

:[x]补=11.0100,

[y]补=11.1000

[x]补

11.0100+[y]补

11.1000

10.1100

两个符号位出现“10”,表示已溢出,即结果小于-1。下溢

[又例]

x=-0.0100,y=-0.1000,求x+y。溢出概念与检测方法

[解]

:[x]补=11.1100,

[y]补=11.1000

[x]补

11.1100+[y]补

11.1000

11.0100

两个符号位出现“11”,表示无溢出。溢出概念与检测方法由此可以得出如下结论:1.

当以模4补码运算,运算结果的二符号位相异时,表示溢出;相同时,表示未溢出。故溢出逻辑表达式为

V=Sf1⊕Sf2,其中Sf1和Sf2分别为最高符号位和第二符号位。此逻辑表达式可用异或门实现。2.模4补码相加的结果,不论溢出与否,最高符号位始终指示正确的符号。

溢出概念与检测方法

第二种溢出检测方法:采用“单符号位法”。从例1和例2中看到:(1).当最高有效位产生进位而符号位无进位时,产生上溢;(2).当最高有效位无进位而符号位有进位时,产生下溢。

故:溢出逻辑表达式为:

V=Cr⊕Co其中:

Cf为符号位产生的进位,Co为最高有效位产生的进位。(显然:此逻辑关系可用异或门方便地实现)。

在定点机中,当运算结果发生溢出时,机器通过逻辑电路自动检查出溢出故障,并进行中断处理。

二进制加法/减法器2.2.4基本的二进制加法/减法器

根据表2.2所示的真值表,三个输入端和两个输出端可按如下逻辑方程进行联系:

Si=Ai⊕Bi⊕Ci

Ci+1=AiBi+BiCi+CiAi1111110011101010100110110010100110000000Ci+1SiCiBiAi输出输入表2.2一位全加器真值表(2.23)二进制加法/减法器按表达式(2.23)组成的一位全加器(FA)示意图2.2(b)对一位全加器(FA)来说,Si的时间延迟为6T(每级异或门延迟3T),Ci+1的时间延迟为5T,其中T被定义为相应于单级逻辑电路的单位门延迟。T通常采用一个“与非”门或一个“或非”门的时间延迟来作为度量单位。3T+3T3T+T+T二进制加法/减法器二进制加法/减法器延迟时间ta为:2T延迟时间ta为:3T考虑溢出检测时,延迟时间ta为:ta=n·2T+9T=(2n+9)T当不考虑溢出检测时,有:ta=(n-1)·2T+9T十进制加法器2.2.5十进制加法器

十进制加法器可由BCD码(二-十进制码)来设计,它可以在二进制加法器的基础上加上适当的“校正”逻辑来实现,该校正逻辑可将二进制的“和”改变成所要求的十进制格式。四位二进制数表示十进制数的一位(0-9),即数据范围:0000-1001十进制加法器例:设Xi=0110=(6)10Yi=0111=(7)10

则:Si’=Xi+Yi=0110+0111=1101=(13)10

十位数:1个位数:3

对Si’进行“加6校正”后:

Si=Si’+6=1101+0110=10011 1 3Si’>9的情况:Si’= 1010, 1011, 1100, 1101, 1110, 1111.

当Si’>9时,要求:

(1).产生向高位的进位信号Ci+1;(2).对Si’进行“+6”校正,得出本位的十进制数值。实现:(6)10+(7)10

进位十进制加法器该位的和十进制加法的校正十进制加法器

设S‘i代表这样得到的4位二进制数和,C’i+1为输出进位,而Si代表正确的BCD和,Ci+1代表正确的进位,那么:

当xi+yi+Ci<10时,Si=S'i

当Xi+Yi+Ci≥10时,

Si=S'i+6

显然,对于十进制加法来说,当C'i+1=1或S'i≥10时,应当有:输出进位Ci+1=1。十进制加法器和大于9?和有进位校正:Ci+1=0时:+0;

Ci+1=1时:+6;2.3定点乘法运算

2.3.1原码并行乘法2.3.2补码并行乘法定点乘法运算2.3.1原码乘法1.人工算法与机器算法的同异性在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位由两数的符号位按异或运算得到,而乘积的数值部分则是两个正数相乘之积。

设n位被乘数和乘数用定点小数表示(定点整数也同样适用)

被乘数

[x]原=xf.xn-1…x1x0

乘数

[y]原=yf.yn-1…y1y0

则乘积:

[z]原=(xf⊕yf)+(0.xn-1…x1x0)(0.yn-1…y1y0)(2.26)

式中,xf为被乘数符号,yf为乘数符号。

原码乘法运算乘积符号的运算法则是:同号相乘为正,异号相乘为负。由于被乘数和乘数的符号组合只有四种情况(xfyf=00,01,10,11),因此积的符号可按“异或”(按位加)运算得到。数值部分的运算方法与普通的十进制小数乘法类似,不过对于用二进制表达式的数来说,其乘法规则更为简单一些。设x=0.1101,y=0.1011.让我们先用习惯方法求其乘积,观察其过程:原码乘法运算

0.1101(x)X0.1011(y)

110111010000+11010.10001111(z)

运算的过程与十进制乘法相似:

从乘数y的最低位开始,若这一位为“1”,则将被乘数x写下;若这一位为“0”,则写下全0。然后再逐次完成对乘数y各高位的乘法运算,其规则同上。不过高一位乘数的权比低一位乘数的权大一级(21=2),因此被乘数x要左移一位。以此类推,直到乘数各位全部乘完为止,最后将它们统统加起来,变得到最后乘积z。

如果被乘数和乘数用定点整数表示,运算过程也完全一样。原码乘法运算然而,人们习惯的算法对机器并不完全适用。原因之一:机器通常只有n位长,两个n位数相乘,乘积可能为2n位。原因之二:只有两个操作数相加的加法器难以胜任将n个位积一次相加起来的运算。早期计算机中为了简化硬件结构,采用串行的1位乘法方案,即多次执行“加法—移位”操作来实现。这种方法并不需要很多器件。然而串行方法毕竟太慢。随着大规模集成电路问世以来,出现了各种形式的流水式阵列乘法器,它们属于并行乘法器。原码乘法运算2.不带符号的阵列乘法器设有两个不带符号的二进制整数:(见书P38)A=am-1…a1a0

(m位)

B=bn-1…b1b0

(n位)

它们的数值分别为a和b,即

m-1

n-1

a

=∑ai2i

b

=∑bj2j

i=0

j=0在二进制乘法中,被乘数A与乘数B相乘,产生(m+n)位乘积P:P=pm+n-1…p1p0

(m+n位)乘积P

的数值为:原码乘法运算

实现上述乘法过程所需要的操作和人们的习惯方法非常类似:

am-1am-2…

a1a0×)bn-1…

b1b0am-1b0am-2b0…a1b0a0b0

am-1b1am-2b1…

a0b1+)am-1bn-1am-2bn-1…a0bn-1pm+n-1pm+n-2pm+n-3pn-1…p1p0原码乘法运算

乘积P乘数B被乘数A上述过程给出了在m位乘n位不带符号整数的阵列乘法中,“加法—移位”操作的被加数矩阵。每一个部分乘积项(位积)aibj叫做一个被加数。这m×n个被加数{aibj|0≤i≤m-1和0≤j≤n-1}可以用m×n个“与”门并行地产生。显然,设计高速并行乘法器的基本问题,就在于缩短被加数矩阵中每列所需的加法时间。

5位×5位阵列乘法器的逻辑电路图演示

原码乘法运算

若乘法器为n位×n位时,需要n(n-1)个“全加器”和n2个“与”门。由“与门”形成该值加法器

原码乘法运算

3T+3T2T3T+2T(n-2).6T(3T+Tf)(n-2).Tf3TTa

令Ta为“与门”的传输延迟时间,Tf为全加器(FA)的进位传输延迟时间,假定用2级“与非”逻辑来实现FA的进位链功能和“与门”逻辑,那么就有:

Ta

Tf

=2T

由上面的分析可以得出:最坏情况下的延迟途径,既是沿着矩阵p4垂直线和最下面的一行。因而得:

n位×n位不带符号的阵列乘法器总的乘法时间为:

tm=Ta+(n-1)×6T+(n-1)×Tf

=2T+(n-1)×6T+(n-1)×2T

=(8n-6)T

(2.27)原码乘法运算[例16]参见上CAI演示,已知两个不带符号的二进制整数

A

=11011,B

=10101,求每一部分乘积项aibj的值与p9p8……p0的值。

[解]:

11011=A(2710)10101=B(2110)

11011000001101100000+110111000110111=P(56710)a4b0=1a3b0=1a2b0=0a1b0=1a0b0=1a4b1=0a3b1=0a2b1=0a1b1=0a0b1=0a4b2=1a3b2=1a2b2=0a1b2=1a0b2=1a4b3=0a3b3=0a2b3=0a1b3=0a0b3=0a4b4=1a3b4=1a2b4=0a1b4=1a0b4=1

5位×5位阵列乘法器的逻辑电路图演示原码乘法运算3.带符号的阵列乘法器(1)对2求补器电路我们先来看看一个负数的常规求补过程:

例:

X=-1110,则:[X]补=10010

Y=-0100,则:[Y]补=11100

算法特点:从数据的最右边开始向左边逐位看数,找到第一个“1”为止。该“1”的左边各位全部取反(不包括符号位);该“1”的右边各位(包括该“1”)保持不变。在计算机的算术运算部件设计中,经常用到求补电路。由上述分析的算法特点,可以设计一个具有使能控制的二进制对2求补器电路,如图2.6所示。带符号的阵列乘法器

演示对2求补电路的工作过程32T3T+2T最长的信号延迟通路所需的总时间延迟为:

tTC=32T+5T

从上面的电路分析可以得出:

在对2求补时,要采用按位扫描技术来执行所需要的求补操作。令A=an…a1a0是给定的(n+1)位带符号的数,要求确定它的补码形式。最右端的起始链式输入C-1必须恒置成“0”。当控制信号线E=1时,启动对2求补的操作。

当控制信号线E=0时,输出将和输入相等。显然,我们可以利用符号位来作为控制信号“E”。

用这种对2求补器来转换一个(n+1)位带符号的数,所需的总时间延迟为:

tTC=n·2T+5T=(2n+5)T

(2.28)

其中每个扫描级需2T延迟,而5T则是由于“与”门和“异或”门引起的。带符号的阵列乘法器(2)带符号的阵列乘法器

方法:两个补码相乘,符号位单独处理,绝对值使用不带符号的阵列乘法器求乘积的绝对值,然后根据乘积的符号位对乘积的绝对值求补,得出乘积的补码。

(n+1)×(n+1)位带求补器的阵列乘法器逻辑方框图。带符号的阵列乘法器通常,把包括这些求补级的乘法器又称为符号求补的阵列乘法器。在这种逻辑结构中,共使用三个求补器。其中两个算前求补器的作用是:将两个操作数A和B在被不带符号的乘法阵列(核心部件)相乘以前,先变成正整数(绝对值)。而算后求补器的作用则是:当两个输入操作数的符号不一致时,把运算结果变成补码。设A=anan-1…a1a0和B=bnbn-1…b1b0均为用定点表示的(n+1)位带符号整数。在必要的求补操作以后,A和B的码值输送给n×n位不带符号的阵列乘法器,并由此产生2n位真值乘积:

A·B=P=p2n-1…p1p0

温馨提示

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

评论

0/150

提交评论