计算机组成原理运算方法与运算器_第1页
计算机组成原理运算方法与运算器_第2页
计算机组成原理运算方法与运算器_第3页
计算机组成原理运算方法与运算器_第4页
计算机组成原理运算方法与运算器_第5页
已阅读5页,还剩175页未读 继续免费阅读

下载本文档

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

文档简介

第二章运算方法与运算器计算机中的数据表示,熟悉包括定点数、浮点数、字符、十进制数的表示方法;原码、补码、反码、移码等码制之间的关系以及各码制之间真值数的转换;补码的加减运算,定点原码一位乘、除运算,定点补码一位乘、除运算及其逻辑结构;变形补码、运算方法(尤其是补码)的理解,溢出、进位等问题的出现和解决方法;定点数的变形补码加减运算;原、补码乘法和除法运算;浮点运算方法和浮点数的规格化及其逻辑结构;运算器的基本结构和设计方法,解已知芯片功能。本章要求:主要内容:2.1数据与文字的表示方法。2.2定点加、减法运算。

2.3定点乘法运算。2.6浮点运算方法与浮点运算器。2.5定点运算器的组成与结构2.4定点除法运算。2.1数据信息的表示方法2.1.1

数据数值的表示方法2.1.2

非数据数值的表示方法2.1.1数值数据的表示正、负符号二进制的绝对值真值机器数0或1二进制的绝对值符号数值部分1.真值与机器数1.真值与机器数例:设机器字为8b字长,数N1的真值为(+1001110)2,数N2的真值为(-1001110)2,则N1

、N2对应的机器数为:0N1100111011001110N2符号数值部分2.数的机器码表示通常有四种表示法:原码表示法补码表示法反码表示法移码表示法(1)原码表示法0或1二进制的绝对值纯小数原码表示定义纯整数原码表示定义原码纯小数原码表示定义纯小数时,设x=x0.x1x2…

xn-1,其中x0为符号位,共n位字长,则

X0≤X≤1-2-(n-1)

1-X=1+|x|-(1-2-(n-1))≤X≤0

[X]原=例如,若x1=+0.1011x2=-0.1011,字长为8b,则其原码分别为:[x1]原=0.1011000[x2]原=1+0.1011000=1.1011000零的原码有正零和负零两种形式:[+0]原=0.00...00[-0]原=1.00...00纯整数原码表示定义纯整数时,设x=x0x1x2…

xn-1,其中x0为符号位,共n位字长,则

X0≤X≤2(n-1)-1

2(n-1)-X=2(n-1)+|x|-(2(n-1)-

1)≤X≤0

[X]原=例如,若x1=+1011x2=-1011,字长为8b,则其原码分别为:[x1]原=00001011[x2]原=27+00001011=10001011零的原码有正零和负零两种形式:[+0]原=000...00[-0]原=100...00采用原码表示法简单易懂,但它的最大缺点是加法运算复杂。当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号。(2)补码表示法计算机中,运算结果≥模数时,说明该值已超出机器的表示范围,模数自然丢掉。模/模数:计算器具的容量。计算机中,机器数表示数据的字长即位数是固定的。n位数的模数=n位数全为1后,再在最末位加1n位整数的模数=2n

n位小数的模数=2纯小数补码表示定义纯小数时,设x=x0.x1x2…

xn-1,其中x0为符号位,共n位字长,则

X0≤X≤1-2-(n-1)

2+X=2-|x|-1

≤X≤0

[X]补=例如,若x1=+0.1011x2=-0.1011,字长为8b,则其原码分别为:[x1]补=0.1011000[x2]补=2-0.1011000=1.0101000补码的零只有一个,即0.0000000。补码1.0000000表示负1(mod2)纯整数补码表示定义纯整数时,设x=x0x1x2…

xn-1,其中x0为符号位,共n位字长,则

X0≤X≤2(n-1)-1

2n+X=2n-|x|-2(n-1)≤X≤0

[X]补=例如,若x1=+1011x2=-1011,字长为8b,则其原码分别为:[x1]补=00001011[x2]补=28-00001011=11110100(mod2n)对补码进行运算,可将加、减运算统一成加法运算,降低了对计算机运算器的要求,因此得到广泛的应用。原码求补码的方法:正数,不变(相同)即原码=补码;负数,符号位不变,数值位按位取反加1。补码求真值方法:正数,[x]补=[x]原负数,对[[x]补]补=

[x]原原码求真值:[x]原符号位0→+,1→-。补码的运算结果仍为补码。(3)反码表示法对于正数来说,反码=原码=补码。对于负数来说,符号位:与原码、补码的符号位定义相同。数值:将原码的数值位按位变反。例如,若x1=+0.1011x2=-0.1011,字长为8b。[x1]反=0.1011000=[x1]原=[x1]补[x2]反=1.0100111[x2]补=1.0101000[x2]原=1.1011000反码的零有两个0.0000和1.11111(4)移码移码也叫增码,常用来表示整数形式的计算机浮点数的阶码(表示指数)。若纯整数X为n位(包括符号位),则其移码定义为:

[x]移=2n-1+[x]补-2n-1≤X≤2n-1-1方法:补码将符号位求反可得移码设字长为8b,若x1=+1000(2),

x2=-1000(2),

[x1]补=00001000[x1]移=10001000[x2]补=11111000[x2]移=01111000原、反、补、移码转换方法正数原码=反码=补码移码=补码符号位取反,数值位不变负数反码=原码符号位不变,数值位取反补码=反码末位加1移码=补码符号位取反,数值位不变3.数的定点表示计算机中小数的小数点并不是用某个数字来表示的,而是用隐含的小数点的位置来表示。根据小数点的位置是否固定,又可分为定点表示定点小数表示形式定点整数表示形式浮点表示3.数的定点表示

⑴定点小数将小数点固定在符号位d0之后、数值最高位d-1之前,这就是定点小数形式。其格式如下所示:⑵定点整数将小数点固定在数的最低位d-(n-1)之后,这就是定点整数形式。其格式如下所示:d0d-1d-2……………d-(n-1)△d0d-1d-2…………….d-(n-1)△①设字长为8b,用原码表示时,其表示范围如下:

最小负数最大负数最小正数最大正数

1.11111111.00000010.00000010.1111111-(1-2-7)-2-72-71-2-7定点小数的表示范围:②设字长为8b,用补码表示时,其表示范围如下:

最小负数最大负数最小正数最大正数

1.00000001.11111110.00000010.1111111

-1-2-72-71-2-7①设字长为8b,用原码表示时,其表示范围如下:

最小负数最大负数最小正数最大正数

11111111100000010000000101111111-(27-1)=-127-1

+1

27-1=127②设字长为8b,用补码表示时,其表示范围如下:

最小负数最大负数最小正数最大正数

10000000111111110000000101111111

-27=-128-1

+1

27-1=127定点整数的表示范围:4.数的浮点表示法⑴浮点数的表示格式浮点表示法把字长分成阶码(表示指数)和尾数(表示数值)两部分。X=D×RE阶码E:用整数形式表示,指明小数点在数据中的位置,决定了浮点数的表示范围。尾数D:用定点小数表示,给出有效数字的位数决定了浮点数的表示精度;阶码的底R:一般为2、8或16,且隐含规定,在浮点数表示中不出现,通常取2;JEm-1…E1SD-1…D-(n-1)阶符阶码值数符尾数值决定范围决定精度第一种浮点格式补码定点整数形式补码定点小数表示形式浮点数另一种格式:

SJEm-1…E1D-1…D-(n-1)阶符阶码值数符尾数值存储的数X可表示为X=D×2E。补码定点整数形式⑵浮点数的规格化为了使浮点表示法有尽可能高的精度:措施之一,是增加位数,或者是在字长一定的情况下,将阶码和尾数所占的位数协调好;措施之二,是采用浮点数规格化表示。即充分利用尾数的二进制数位来表示更多的有效数字。浮点数规格化①原码规格化后正数为0.1×……×的形式。负数为1.1×……×的形式。②补码规格化后正数为0.1×……×的形式。负数为1.0×……×的形式。通过调整阶码,使其尾数D满足下面形式的数:当尾数的值不为0时,尾数域的最高有效位应为1,否则以修改阶码同时左右移小数点的办法,使其变成这一表示形式。⑶浮点数的表示举例某机用32b表示一个数,阶码部分占8b(含一位符号位),尾数部分占24b(含一位符号位)。设x1=-256.5,x2=127/256,试写出x1和x2的两种浮点数表示格式。例2.1

①x1=-256.5=-(100000000.1)2=-29×0.1000000001

阶码的补码为(+9)补=00001001

阶码的移码为(+9)移=10001001

尾数=1.01111111110000000000000(规格化补码)第一种浮点表示的格式为

00001001,1.01111111110000000000000

第二种浮点表示的格式为

1,10001001,01111111110000000000000解:移码补码②x2=127/256=(1111111)2×2-8=2-1×0.1111111

阶码的补码为(-1)补=11111111

阶码的移码为(-1)移=01111111

尾数=0.11111110000000000000000(规格化补码)第一种浮点表示的格式为

11111111,0.11111110000000000000000

第二种浮点表示的格式为

0,01111111,11111110000000000000000解⑷浮点数的表示范围

设阶码和尾数各为4b(各包含一个符号位),则其浮点数的表示表示范围分别为:①阶码范围

最小负数最大负数最小正数最大正数

1000111100010111 -27=-8-1

+1

23-1=7②规格化尾数表示范围

最小负数最大负数最小正数最大正数

1.0001.0110.1000.111-1-(2-3+2-1)

2-11-2-3二进制补码十进制真值二进制补码十进制真值

最小负数最大负数最小正数最大正数

20111×1.00021000×1.01121000×0.10020111×0.11121111×1.00020000×1.01120000×0.10021111×0.111-27×1-2-8×(2-3+2-1)

2-8×2-127×(1-2-3)③规格化浮点数表示范围二进制补码阶码用移码十进制真值这里规格化尾数的最大负数的补码是1.01…1的形式,而不是1.10…0的形式,是因为1.10…0不是规格化数,所以规格化尾数的最大负数应是:

-(0.10…0+0.0…01)=-0.10…01,而[-0.10…1]补=1.01…1,即-(2-(n-1)+2-1)注意:(5)溢出问题定点形式判断溢出的办法是对数值本身进行判断,浮点数是对规格化后的阶码进行判断。当一个浮点数阶码大于机器的最大阶码,称为上溢;机器产生上溢时,不能再继续运算,一般要进行中断处理。而小于最小阶码时,称为下溢。出现下溢时,一般规定把浮点数各位强迫为零(当做零处理),机器仍可继续进行运算。2.1.2非数值数据的表示非数值数据:文字和符号(字符)、图像、声音等非数值数据的表示:对其进行二进制编码1、字符编码2、汉字编码1、字符编码字符的表示:采用字符编码,即用规定的二进制数表示文字和符号的方法。ASCII码(AmericanStandardCodeForInformationInterchange):美国标准信息交换码,为国际标准。常用的7位ASCII码的每个字符都由7个二进制位b6~b0

表示,有128个编码,最多可表示128种字符;其中包括:10个数字‘0’~‘9’:30H~39H,顺序排列■26个小写字母‘a’~‘z’:61H~7AH,顺序排列■26个大写字母‘A’~‘Z’:41H~5AH,顺序排列■各种运算符号和标点符号等。ASCII码编码表0000010100111001011101110000NULDLESP0

P‵p0001SOHDC1!1AQaq0010STXDC2“2BRbr0011ETXDC3#3CScs0100EOTDC4¥4DTdt0101ENQNAK%5EUeu0110ACKSYN&6FVfv0111BELETB′7GWgw1000BSCAN(8HXhx1001HTEM)9IYiy1010LFSUB*:JZjz1011VTESC+;K[k{1100FFFS,〈L、l|1101CRGS-=M]m}1110SORS.〉N^n~1111SIUS/?O_oDEL其中95个编码,对应着计算机终端能敲入并且可以显示的95个字符,打印机设备也能打印这95个字符,如大小写各26个英文字母,0—9这10个数字符,通用的运算符和标点符号+,-,*,/,>,=,<等等。在计算机中,用1B(一个字节)表示一个ASCII码,其最高一位(b7位)填0,余下的7b可以给出128个编码,表示128个不同的字符和控制码。另外的33个字符,其编码值为0—31和127,则不对应任何一个可以显示或打印的实际字符,它们被用作控制码,控制计算机某些外围设备的工作特性和某些计算机软件的运行情况。2、汉字编码对于汉字,计算机的处理技术必须解决三个问题:汉字输入汉字储存与交换汉字输出它们分别对应着汉字输入码、内码、字模码的概念。因此,汉字编码系统存在以下三种编码:1、汉字输入码2、汉字内码3、汉字字模码(1)汉字输入码汉字输入码也称外码,是为了将汉字输入计算机而编制的代码,是代表某一汉字的一串键盘符号。汉字输入码种类:数字编码:如区位码、国标码、电报码等。拼音编码:如全拼码、双拼码、简拼码等。字形编码:如王码五笔、郑码、大众码等。音形编码:如表形码、智能ABC等。两种典型的数字编码:区位码:是将国家标准局公布的6763个两级汉字分为94个区,每个区分94位,实际上把汉字表示成二维数组,每个汉字在数组中的下标就是区位码。例如“中”字位于54区48位,“中”字的区位码即为“5448”。国标码:将区位码加2020H,占用两个字节。例如“中”字的国标码为区位码5448的区码和位码转化为16进制,为3630H,再加2020H得国标码5650H。(1)汉字输入码(2)汉字机内码汉字内码是用于汉字信息的存储、交换、检索等操作的机内代码,一般采用两个字节表示。汉字可以通过不同的输入法输入,但其内码在计算机中是唯一的。英文字符的机内代码是7位的ASCII码,当用一个字节表示时,最高位为“0”。为了与英文字符能相互区别,汉字机内代码中两个字节的最高位均规定为“1”。机内码等于汉字国标码加上8080H。例如“中”字的机内码为D6D0H。(3)汉字字模码汉字字模码又称汉字字形码,它是将汉字字形经过点阵数字化后形成的一串二进制数,用于汉字的显示和打印。根据汉字输出的要求不同,点阵有以下几种:简易型汉字:16×16,32字节/汉字普通型汉字:24×24,72字节/汉字提高型汉字:32×32,128字节/汉字。汉字字库:将所有汉字的字模点阵代码按内码顺序集中起来,构成了汉字库。汉字输入码汉字交换码(国标码)汉字输入法程序汉字字模码字形检索程序汉字显示汉字打印汉字内码+8080H2.2定点加、减运算2.2.1定点补码加、减法与溢出2.2.2基本的二进制加、减法器2.2.1定点补码加、减法与溢出在计算机中,常将数值转换成补码后再进行加减运算。其优点是,可将减法运算转化为加法运算,这样可以简化机器内部硬件电路的结构。补码运算的特点是,符号位和数值位一起参加运算。补码加减运算公式(1)补码的加法运算其公式为:[x]补+[y]补=[x+y]补(2)补码的减法运算其公式为:[x]

-[y]

补 =[x-y]

=[x+(-y)]

=[x]

+[-y]

补[x]补+[y]补=[x+y]补(mod2)(2-1)

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

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

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

(mod2)②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)③x<0,y>0,则x+y>0或x+y<0。这种情况和第2种情况一样,把x和y的位置对调即得证。④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)

2+(x+y)

=[x+y]补(mod2)[x]补+[y]补=2+(2+x+y)[例]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数用补码表示时,减法运算的公式为[x-y]补=[x]补-[y]补=[x]补+[-y]补(2-2)只要证明[-y]补=-[y]补,上式即得证。

(2)补码的减法运算证明

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

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

(2-3)∵[x-y]补=[x+(-y)]补

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

(2-4)将式(2-3)与(2-4)相加,得

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

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

故[-y]补=-[y]补(mod2)(2-5)

另一种证明方法:利用补码加法公式,[0]补=0[y]补+

[-y]补=[y+(-y)]补

=[y

-y

]补 =[0

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

[y]补

对于定点小数和定点整数都适用[-y]补的含义:是将[y]补的各位(包括符号位)全部取反,末位加“1”。从[y]补求[-y]补的法则是:

对[y]补各位(包括符号位)求反且最末位加1,即可得到[-y]补。写成运算表达式,则为

[-y]补=﹁[y]补+2-n

其中:

符号﹁表示对[y]补作包括符号位在内的求反操作,2-n表示最末位的1。[例1]

已知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[例2]

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参加运算的数都用补码表示。数据的符号与数据一样参加运算。求差时将减数求补,用求和代替求差。运算结果为补码。如果符号位为0,表明运算结果为正;如果符号位为1,则表明运算结果为负。符号位的进位为模值,应该丢掉。⑶加减法运算规则3.溢出判断法机器定点小数表示在定点小数机器中,数的表示范围为|x|<1。在运算过程中如出现大于1的现象,称为“溢出”。在定点机中,正常情况下溢出是不允许的。[例]

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.1101,y=-0.1011,求x+y。[解:][x]补=1.0011[y]补=1.0101

[x]补1.0011+[y]补1.0101[x+y]补0.1000两个负数相加的结果成为正数,这同样是错误的。之所以发生错误,是因为运算结果产生了溢出。两个正数相加,结果大于机器所能表示的最大正数,称为上溢。而两个负数相加,结果小于机器所能表示的最小负数,称为下溢。为了判断“溢出”是否发生,可采用两种检测的方法。第一种方法是采用双符号位法(变形补码法,或“模4补码”)。第二种方法是进位判断法(单符号位法)

。(1)双符号法(变形补码法)用两个相同的符号位Sf1Sf2表示一个数的符号。左边第一位为第一符号位Sf1,相邻的为第二符号位Sf2。

双符号位的含义为:00表示正号;11表示负号;01表示产生正向溢出;10表示产生负向溢出。双符号位可用逻辑异或来判断溢出情况:V=Sf1⊕Sf2,此逻辑表达式可用异或门实现。若V=0,则无溢出;V=1,则有溢出。第一符号位永远是结果的真正符号位。例1:已知x=0.1011,

y=0.0111,

求x+y=?解:[x]

补=00.1011,[y]

补=00.0111[x]

补=00.1011+[y]

补=00.0111[x+y]

补=01.0010

两符号位为01,表示出现正向溢出。例2:已知x=-0.1011,

y=0.0111,

求x-y=?解:[x]

补=11.0101,[-y]

补=11.1001[x]

补=11.0101+[-y]

补=11.1001[x-y]

补=110.1110

已超出模值,丢掉两符号位为10,表示出现负向溢出。⑵进位判断法判断规则:设Cn-1为最高数值位向符号位的进位值产生的进位,Cn为符号位产生的进位。当两补码进行加减运算(减法转化为加法进行)时,如果两个进位值Cn-1Cn相同,则没有溢出发生如果两个进位值不同,则有溢出发生。若Cn-1=1,

Cn

=0时,则发生正溢若Cn-1=0,

Cn

=1时,则发生负溢其判断溢出表达式如下:V=Cn⊕Cn-1

,此逻式可用异或门实现例如:[x]

补=1.0101+[y]

补=1.1001[x+y]

补=10.1110

最高有效位没有进位,即C=0,符号位有进位,即S=1,故V=1⊕0=1,有溢出发生。

[x]

补=1.1101+[y]

补=0.1001[x+y]

补=10.0110

最高有效位有进位,即C=1,符号位有进位,即S=1,故V=1⊕1=0,无溢出发生,x+y=+0.0110。返回2.2.2基本的二进制加法/减法器设字长为n位,两个操作数分别为

x=x0.x1x2…

xn-1y=y0.y1y2…

yn-1

其中x0,y0为符号位。补码运算的二进制加法/减法器(采用的变形补码运算)的逻辑结构图2-3演示∑0C∑0∑0∑0∑0∑0…=1x0y0=1x1y1=1x2y2=1xn-2=1yn-2xn-1yn-1S0S1S2Sn-2Sn-1C1C2C3Cn-2Cn-1CnP=0加P=1减C0=1V一位加法器2.3定点乘法运算

2.3.1原码一位乘法

2.3.2补码一位乘法

2.3.3原码两位乘法

2.3.4补码两位乘法2.3.1原码一位乘法例:求A=0.1101B=0.1011两数乘积

0.1101×0.10111101A×20不移位1101A×21左移1位0000A×22左移2位1101A×23左移3位0.100011111.人工计算乘法2.计算机实现乘法运算A·B=A·(0.1011)=0.1A+0.00A+0.001A+0.0001A=0.1A+0.00A+0.001(A+0.1A)=0.1A+0.01[0A+0.1(A+0.1A)]=0.1{A+0.1[0A+0.1(A+0.1A)]}=2-1{A+2-1[0A+2-1(A+2-1A)]}=2-1{A+2-1[0A+2-1(A+2-1(A+0)]}将乘法变成加法和右移的结合。3.原码一位乘法的运算规则设x=xf.x1x2...xn

,y=yf.y1y2...yn

,乘积为P,乘积的符号位为Pf,则有

Pf=xf⊕yf

,|P|=|x|.|y|求|P|的运算规则为:(1)被乘数和乘数均取绝对值参加运算,符号位单独考虑。(2)被乘数取双符号,部分积的长度与被乘数的长度相同,初值为0。(3)从乘数的最低位的yn位开始对乘数进行判断,若yn=1,则部分积加上被乘数|x|,然后右移一位;若yn=0,则部分积加上0,然后右移一位。(4)重复(3)判断n次。例1x=-0.1101,y=-0.1011,求:[x×y]原=?解:|x|=00.1101(用双符号表示)|y|=0.1011(用单符号表示)

部分积乘数yn

说明

00.00000.1011

+00.1101yn=1,加|x|00.110100.011010.101

右移一位得P1+00.1101yn=1,加|x|01.0011100.1001110.10

右移一位得P2+00.0000yn=0,加000.10011100.01001110.1

右移一位得P3+00.1101yn=1,加|x|01.000111100.100011110右移一位得P4P1P2P3P4由于Pf=xf⊕yf=1⊕1=0,|P|=|x|.|y|=0.10001111所以[x×y]原=0.10001111T部分积R0

R1乘积yyn计数器I移位信号SR2&被乘数xyn=1Pfxfyf&F

QRS结束

启动+1原码一位乘法硬件逻辑结构图R0和R1都具有右移功能并且连通2.3.2补码一位乘法补码一位乘法方法:是在原码一位乘法的基础上发展起来的比较法,由英国Booth夫妇首先提出,故又称为Booth乘法,它是现在广泛采用的补码乘法。2.3.2补码一位乘法补码一位乘法的运算规则符号位参与运算,运算的数均以补码表示。被乘数一般取双符号位参加运算,部分积初值为0。乘数可取单符号位,以决定最后一步是否需要校正,即是否要加[-x]补。乘数末位增设附加位yn+1,且初值为0。按表2-2所示进行操作。按照上述算法进行n+1步操作,但第n+1步不再移位,仅根据y0与y1的比较结果作相应的运算即可。补码移位规则:部分积为正,右移时有效位最高位补0;为负时最高位补1。

yn(高位)yn+1(低位) 操作

00部分积右移一位

01部分积加x补,右移一位

10部分积加[-x]补,右移一位

11部分积右移一位乘数末位表2-2补码一位乘法算法解:[x]补=11.0011,[-x]补=00.1101(用双符号表示)[y]补=0.1011(用单符号表示)

部分积乘数ynyn+1

说明

00.00000.10110

+00.1101ynyn+1=10,加[-x]补

00.110100.011010.1011

右移一位得P100.0011010.101ynyn+1=11,右移一位得P2+11.0011ynyn+1=01,加[x]补

11.01100111.10110010.10

右移一位得P3+00.1101ynyn+1=10加[-x]补

00.100000100.010000010.1

右移一位得P4+11.0011ynyn+1=01,

加[x]补

11.01110001最后一步不移位即[x×y]补=1.01110001例2x=-0.1101,y=0.1011,求:[x×y]补=?ynyn+1T部分积R0

R1乘积yyn计数器I移位信号

SCI被乘数x&

QRS+1多路开关R2&10ynyn+1&+1yn+101反原结束启动F2.3.3原码两位乘法为了提高乘法的执行速度,可以考虑每次对乘数的两位进行判断以确定相应的操作,这就是两位乘法。原码两位乘法的运算规则为:

1)符号位不参加运算,最后的符号Pf=xf⊕yf

2)部分积与被乘数均采用三位符号,乘数末位增加一位C,其初值为0。

3)按表2.3所示的操作。

4)若尾数n为偶数,则乘数用双符号,最后一步不移位。若尾数n为奇数,则乘数用单符号,最后一步移一位。表2-3原码两位乘法算法

yn-1yn

C

操作

000

加0,右移两位,0→C001加x,

右移两位,0→C

010加x,

右移两位,0→C011加2x,

右移两位,0→C100加2x,

右移两位,0→C

101减x,

右移两位,1→C110减x,

右移两位,1→C111加0,右移两位,1→C解:|x|=000.11012|x|=001.1010(用三符号表示)|y|=00.0110(用双符号表示)

部分积乘数C说明

000.000000.01100

+001.1010yn-1ynC=100,加2|x|001.1010000.01101000.011

右移两位0→C+001.1010yn-1ynC=011,加2|x|010.000010000.1000001000.0

右移两位0→C

yn-1ynC=000,最后一步不移位故[x×y]原=0.10000010例3x=-0.1101,y=0.0110,求[x×y]原=?2.3.4补码两位乘法运算规则:(1)符号位参加运算,两数均用补码表示。(2)部分积与被乘数均采用三位符号表示,乘数末位增加一位yn+1,其初值为0。(3)按表2-4所示的操作。(4)若尾数n为偶数,则乘数用双符号,最后一步不移位。若尾数n为奇数,则乘数用单符号,最后一步移一位。表2-4补码两位乘法算法

yn-1yn

yn+1

操作

000

加0,右移两位

001加[x]补,

右移两位

010加

[x]补,

右移两位

011加2[x]补,

右移两位

100加2[-x]补

右移两位

101加[-x]补

右移两位

110加[-x]补

右移两位

111加0,右移两位解:[x]补=111.1101,2[-x]补=001.1010,2[x]补=110.0110(用三符号表示)[y]补=00.0110(用双符号表示)例4x=-0.1101,y=0.0110,求[x×y]补=?部分积乘数yn+1

说明

000.000000.01100

+001.1010yn-1ynyn+1=100,加2[-x]补

001.1010000.01101000.011

右移两位

+110.0110 yn-1ynyn+1y=011,加2[x]补

110.110010111.1011001000.0

右移两位

yn-1ynyn+1y=000,最后一步不移位故[x×y]补=1.101100102.4定点除法运算2.4.1原码一位除法2.4.2补码一位除法2.4.1原码一位除法设被除数[x]原=xf.x1x2...xn

,除数[y]原=yf.y1y2...yn

,则商的符号:Qf=xf⊕yf商的数值:|Q|=|x|/|y|两个用原码表示的数相除时,商的符号通过两个数的符号异或求得,而商的数值部分通过两个数的数值部分按正数求商得到。设被除数x=0.1001,除数y=0.1011,模仿十进制除法运算。2-1y2-2y2-3y2-4y1.判断x是否小于y?现在x<y,故商的整数位商“0”,x的低位补0,得余数r0。2.比较r0和2-1y,因r0>2-1y,表示够减,小数点后第一位商“1”,作r0-2-1y,得余数r1。3.比较r1和2-2y,因r1>2-2y,表示够减,小数点后第二位商“1”,作r1-2-2y,得余数r2。4.比较r2和2-3y,因r2<2-3y,不够减,小数点后第三位商“0”,不作减法,得余数r3(=r2)。5.比较r3和2-4y,因r3>2-4y,表示够减,小数点后第四2位商“1”,作r3-2-4y,得余数r4,共求四位商,至此除法完毕。上面的笔算过程可叙述如下:手工除法算法X=+0.1011,Y=-0.1101X÷Y改进手工算法即可适合机器运算:计算机通过做减法测试来实现判断:结果大于等于0,表明够减,商1;结果小于0,表明不够减,商0。计算机将余数左移一位,再直接与不右移的除数相减。恢复余数法:先作减法,若余数为正,够减;若余数为负,不够减。不够减时必须恢复原来的余数,以便再继续往下运算。加减交替法:运算过程中出现不够减,则不必恢复余数,根据余数符号,可以继续往下运算。求|Q|的加减交替法(不恢复余数法)运算规则为:(1)符号位不参加运算,并要求|x|<|y|

(2)先用被除数减去除数,当余数为正时,商上1,余数左移一位,再减去除数。当余数为负时,商上0,余数左移一位,再加上除数。(3)当第n+1步余数为负时,需加上|y|得到第n+1步正确的余数。最后余数为rn×2-n(余数与被除数同号)。原码不恢复余数法算法流程图如图2-8所示。解:|x|=00.1001,|y|=00.1011[-|y|]补=11.0101

被除数x/余数r商数q说明

00.1001+[-|y|]补

11.0101减去除数

11.11100余数为负,商上011.11000r和q左移一位

+[|y|]补

00.1011加上除数

00.01110.1余数为正,商上100.11100.1r和q左移一位

+[-|y|]补

11.0101减去除数

00.00110.11余数为正,商上100.01100.11r和q左移一位

+[-|y|]补

11.0101减去除数

11.10110.110余数为负,商上011.01100.110r和q左移一位

+[|y|]补

00.1011加上除数

00.00010.1101余数为正,商上1例1x=-0.1001,y=-0.1011,求[x/y]原=?

Qf=xf+yf=1+1=0,[x/y]原=0.1101,余数[r]原=1.0001×2-4(余数与被除数同号)。2.4.2补码一位除法符号位参加运算,除数与被除数均用双符号补码表示。被除数与除数同号时,被除数减去除数。被除数与除数异号时,被除数加上除数。商符号位的取值见第③步。余数与除数同号时,商上1,余数左移一位减去除数;余数与除数异号时,商上0,余数左移一位加上除数。注意:余数左移加上或减去除数后就得到了新余数。

采用校正法包括符号位在内,应重复规则③(n+1)次。

1.补码不恢复余数法的算法规则(比较上商)如下:补码一位除法运算规则由比较上商规则、商的校正规则和余数校正规则组成。商的校正原则:①当刚好能除尽(即运算过程其中任一步余数为0)

时,如果除数为正,则商不必校正;若除数为负,则商需要校正,即加2-n进行修正。②当不能除尽时,如果商为正,则不必校正;若商为负,则商需要加2-n进行修正。求得n位商后,得到的余数往往是不正确的。正确的余数常需要根据具体情况作适当的处理才能获得,处理方法一般如下:余数的处理①若商为正,则当余数与被除数异号时,应将余数加上除数进行修正才能获得正确的余数。②若商为负,则当余数与被除数异号时,余数需要减去除数进行校正。余数之所以需校正,是因为在补码不恢复余数除法运算过程中先比较后上商的缘故。可见,如果要保存余数必须根据具体情况对余数作相应处理,否则余数不一定正确。例3x=0.1001,y=-0.1001,求[x/y]补=?解:[x]补=0.1001,[y]补=11.0111,[-y]补=00.1001(用双符号表示)

被除数x/余数r商数q说明

00.1001+[y]补11.0111x和y异号,x补+y补

00.00000余数与y异号,商上000.00000r和q左移一位

+[y]补11.0111加上除数

11.01110.1余数与y同号,商上110.11100.1r和q左移一位

+[-y]补

00.1001减去除数

11.01110.11余数与y同号,商上110.11100.11r和q左移一位

+[-y]补

00.1001减去除数

11.01110.111余数与y同号,商上110.11100.111r和q左移一位

+[-y]补00.1001减去除数

11.01110.1111余数与y同号,商上1中间有一步余数为零表示能除尽,除数为负,需校正,

[x/y]补=1.1111+0.0001=1.0000

余数与被除数异号,需校正,余数[r]补=(11.0111+

00.1001)×2-4

=0.0000×2-4。例4x=-0.1001,y=0.1011,求[x/y]补=?解:[x]补=11.0111[y]补=00.1011,[-y]补=11.0101(用双符号表示)

被除数x/余数r商数q说明

11.0111+[y]补00.1011x和y异号,[x]补+[y]补

00.00101余数与y同号,商上100.01001r和q左移一位

+[-y]补

11.0101减去除数

11.10011.0余数与y异号,商上011.00101.0r和q左移一位

+[y]补00.1011加上除数

11.11011.00余数与y异号,商上011.10101.00r和q左移一位

+[y]补

00.1011加上除数

00.01011.001余数与y同号,商上100.10101.001r和q左移一位

+[-y]补

11.0101减去除数

11.11111.0010余数与y异号,商上0不能除尽,商为负,需校正,

[x/y]补=1.0010+0.0001=1.0011

余数与被除数同号不需校正,余数[r]补=1.1111×2-4(余数与被除数同号)。2.5定点运算器的组成与结构

ALU(

温馨提示

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

评论

0/150

提交评论