首页 计算机组成原理第3章运算方法和运算部件

计算机组成原理第3章运算方法和运算部件

举报
开通vip

计算机组成原理第3章运算方法和运算部件nullnull第3章 运算方法和运算部件第3章 运算方法和运算部件第3章 运算方法和运算部件数据是计算机处理的对象。从外部形式来看,计算机可处理数值、文字、图、声音、视频,甚至各种模拟信息量。这些形式的信息,在计算机系统内部,主要表示成定点数(整数)、浮点数(实数)、逻辑数(布尔数)、字符、字符串等形式,并且都必须采用数字化编码。在计算机中如何完成数据的各种运算,如何通过硬件电路实现运算,如何校验数据的正确性是本章讨论的主要内容。null本章要点: 常用的进位计数制及其相互转换 数值数据的表示和运算 运算部件 浮...

计算机组成原理第3章运算方法和运算部件
nullnull第3章 运算方法和运算部件第3章 运算方法和运算部件第3章 运算方法和运算部件数据是计算机处理的对象。从外部形式来看,计算机可处理数值、文字、图、声音、视频,甚至各种模拟信息量。这些形式的信息,在计算机系统内部,主要表示成定点数(整数)、浮点数(实数)、逻辑数(布尔数)、字符、字符串等形式,并且都必须采用数字化编码。在计算机中如何完成数据的各种运算,如何通过硬件电路实现运算,如何校验数据的正确性是本章讨论的主要内容。null本章要点: 常用的进位计数制及其相互转换 数值数据的表示和运算 运算部件 浮点运算 数据校验3.1 数字化信息编码 3.1 数字化信息编码 3.1.1 数字化信息编码的概念 目前,计算机的应用非常广泛,遍及人类社会生活的各个领域,产生了巨大的经济效益和社会影响。从用户角度来看,计算机能够处理数值、文字、声音、图画、活动图像等。但是,在计算机内部,这些都不能直接由计算机进行处理和存储,它们必须采取“特殊的表示形式”才能由计算机进行加工处理。这种特殊的表示形式就是二进制编码形式,即采用二进制编码表示的数值、文字、图画、声音和活动图像才能由计算机进行处理。所以,在计算机系统中所指的数据均是以二进制编码形式出现的。 null计算机内部处理的所有数据都是“数字化编码”的二进制数据。计算机的输入设备(或接口芯片)实现将现实世界中的媒体信息(模拟信号),如声音、文字、图画、活动图像等转化为二进制数据(数字信号)。在计算机中进行处理、存储和传输的信息采用二进制进行编码的原因有以下几点: (1)二进制只有两种基本状态,使用有两个稳定状态的物理器件(如三极管)就可以表示二进制数的每一位,而制造有两个稳定状态的物理器件要比制造有多个稳定状态的物理器件容易得多。例如用高、低两个电位,或用脉冲的有无,或脉冲的正、负极性等都可以方便、可靠地表示“0”和“1”; (2)二进制的编码、计数和运算规则都很简单。可用开关电路实现,简便易行; (3)两个符号“1”和“0”正好与逻辑命题的两个值“真”和“假”相对应,为计算机中实现逻辑运算和程序中的逻辑判断提供了便利的条件。null3.1.2 二进制编码和码制转化 在计算机里,常常需要将某一信息(输入)变换为某一特定的代码(输出)。把二进制码按一定的规律编排,使每组代码具有一特定的含义称为二进制编码。例如,电报码中用4位十进制数字表示汉字,就是编码的典型例子。 编码是计算机系统的基础,而编码的基础是数制。数制是用于描述数字系统或体系结构的一种方法。为了描述数的大小,人类采用进位技术的方法,称为进位计数制,简称“数制”。人们在日常生活中,习惯于用十进制数,而在计算机中,多采用二进制数,二进制数的优点是其运算规律简单且实现二进制数的数字装置简单。二进制数的缺点是人们对其使用时不习惯且当二进制位数较多时,书写起来很麻烦,特别是在写错了以后不易查找错误,为此,书写时常采用八进制和十六进制数。null为了区分这几种进制数,规定在数字的后面加字母D表示十进制数,加字母B表示二进制数,加字母O表示八进制数,加字母H表示十六进制数,十进制数可以省略不加。例如:11D和11都表示是十进制数。另外,也可以用基数作下标表示,例如: (15)10或15表示十进制数, (15)2表示二进制数, (15)8表示八进制数, (15)16表示十六进制数。null对于任何进制数,都有以下几个基本特点。 (1)基数 在某种数制中,允许使用的数字符号的个数,称为这种数制的基数或基。例如:十进制的基数为10,有十个数码0~9;二进制的基数为2,有两个数码0和1;八进制的基数为8,有八个数码0~7;十六进制的基数为16,有十六个数码0~9和A到F。 (2)位权 任一种N进制中,Ni 称为第i位的权。例如十进制数756中最高位的位权为102,中间位的位权为101,最低位的位权为100。 (3)进位 在同一位权上计数值达到基数时,就要进入高一级的位权,这就是数制中的进位。基数是不同数制的进位条件。例如十进制数是“逢十进一”和“借一当十”。1.几种常用进制1.几种常用进制(1)十进制(Decimal) 十进制用0~9十个数字符号,以一定的规律排列起来,表示数值的大小。相邻位之间,低位逢十向高位进一。它的基数为10,各位的系数Ki可以是0~9十个数字中任一个。各位的权为10i。因而,任意一个n位十进制数Ni可表示为:例如:null2)二进制(Binary)二进制是数字电路中应用最广泛的计数制。因为在数字电路中通常只有高电平和低电平两个状态。这两个状态刚好可以用二进制数中的两个符号0和1来表示。它的运算规则简单,在电路中易于实现。在二进制中,相邻位之间,低位逢二向高位进一。它的基数为2,各位的系数Ki可以是0或1,各位的权为2i。因而任一个n位二进制数N2可表示为:例如:null(3)八进制(Octal) 如果将一个数值较大的十进制数转换为二进制数,不仅位数多,难以记忆,且不便书写,易出错。因而除了二进制外,常用的还有八进制或十六进制。 八进制中,各相邻位之间,低位逢八向高位进一。它的基数为8,各位的权为8i,各位的系数Ki可以是0~7八个数字中任意一个,因而任意一个n位八进制数N8可表示为: 例如:null(4)十六进制(Hexadecimal) 十六进制数中,各相邻位之间,低位逢十六向高位进一。它的基数为16,为了书写和计算方便,在十六进制数中,各位的系数Ki可以是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六个数字符号中任一个。各位的权为16i, 因而任一个n位十六进制数N16可表示为:例如:null 表3-1给出了上述四种进制之间的对应关系。 表3-1 四种进位制数之间的对应关系null2.不同进制间的转换 (1)二进制、八进制、十六进制数转换成十进制数 当二进制、八进制、十六进制数转换成十进制数时,只要“按权展开”即可。 【例3-1】二进制数转换成十进制数。 (10100.01)2=(1×24+0×23+1×22+0×21+0×20+0×2-1+1×2-2)10=(20.25)10 【例3-2】八进制数转换成十进制数。 (300.6)8=(3×82+0×81+0×80+6×8-1) 10=(192.75) 10 【例3-3】十六进制数转换成十进制数。 (3B.C)16= (3×161+11×160+12×16-1) 10=(59.75) 10 (2)十进制数转换成二进制、八进制、十六进制数null十进制数转换成二进制、八进制、十六进制数时,因为整数部分和小数部分转换的规则不同,所以要将整数和小数部分分开进行转换。 ①整数部分的转换 整数部分的转换规则是“除基取余,逆向取”。也就是说,用要转换的十进制整数去除以基数R,将得到的余数作为结果数据中各位的数字,直到余数为0为止。先得到的余数作为转换后的最低位,最后得到的余数作为转换后的最高位。 【例3-4】将十进制整数835分别转换成二进制和八进制数。 二进制转换:所以,(834) 10=(1502) 8null二进制转换:所以,(834) 10=(1101000010) 2 ②小数部分的转换 小数部分的转换规则是“乘基取整,正向取”。也就是说,用要转换的十进制小数去乘以基数R,将得到的乘积的整数部分作为结果数据中各位的数字,小数部分继续与基数R相乘。以次类推,直到某一步乘积的小数部分为0或已得到希望的位数为止。最后,将先得到的整数部分作为转换后的最高位,最后得到的整数部分作为转换后的最低位。null【例3-5】将十进制小数0.6875分别转换成二、八进制数。 0.6875×2=1.375 ……1 高位 0.375×2=0.75 ……0  0.75×2=1.5 ……1 0.5×2=1.0 ……1 低位 所以,(0.6875)10=(0.1011)2 0.6875×8=5.5 ……5 高位 0.5×8=4.0 ……4  所以,(0.6875)10=(0.54)8 低位 其它例题(略)null③二进制数转换成八进制数 二进制数转换为八进制数的规则可以概括为“三位并一位”。即以小数点为基数,整数部分从右至左,每三位一组,最高位不足三位时,添0补足三位;小数部分从左至右,每三位一组,最低有效位不足三位时,添0补足三位。然后,将各组的三位二进制数按22,21,20权展开后相加,得到一位八进制数。 【例3-9】将(1000110.01101)2转换成八进制数。 001 000 110 . 011 010 1 0 6 . 3 2 所以,(1000110.01101)2=(106.32)8null④二进制数转换成十六进制数 二进制数转换为十六进制数规则可概括为“四位并一位”。即以小数点为基数,整数部分从右至左,每四位一组,最高位不足四位时,添0补足四位;小数部分从左至右,每四位一组,最低有效位不足四位时,添0补足四位。然后,将各组的四位二进制数按23,22,21,20权展开后相加,得到一位十六进制数。 【例3-10】将(10010111.11011)2转换成十六进制数。 1001 0111 . 1101 1000 9 7 . D 8 所以,(10010111.11011)2=(97.D8)16 思考: 计算机能够直接识别运算的是二进制,那么计算机中还要采用八进制、十六进制的目的是什么?3.2 常用的数据表示3.2 常用的数据表示3.2.1 真值与机器数 在计算机内部,数据是以二进制的形式存储和运算的,无论数值还是数的符号,都只能用0、1来表示。数的正负用高位字节的最高位来表示,定义为符号位,用“0”表示正数,“1”表示负数。例如,在机器中用8位二进制表示一个数+42,其格式为: 00101010 ↑ 符号位,“0”表示正 而用8位二进制表示一个数-53,其格式为: 10110101 ↑ 符号位,“1”表示负 在计算机内部,符号和数字都用二进制码表示,两者合在一起构成数的机内表示形式,称为机器数,而它真正表示的带有符号的数称为这个机器数的真值。机器数又分为定点数和浮点数。 以上 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 可见,在机器数中,用0、1取代了真值的正、负号。3.2.2 数的机器码表示3.2.2 数的机器码表示整数又可分为无符号整数(不带符号的整数)和整数(带符号的整数)。无符号整数中,所有二进制位全部用来表示数的大小,有符号整数用最高位表示数的正负号,其他位表示数的大小。 无符号数在计算机中通常有三种表示方法。 (1)位数不等的二进制码。 (2)BCD码。BCD码的表示形式一般又有两种:压缩BCD码和非压缩BCD码。前者每位BCD码用4位二进制表示,1个字节(8位二进制)表示2位BCD码,如10010011B表示二进制数93;后者每位BCD码用1个字节表示,高4位总是0000,低4位的0000~1001表示0~9。 (3)ASCII码(American Standard Code for Information Interchange,ASCII),美国标准信息交换码。该编码已被国际标准化组织ISO采纳,作为国际通用的信息标准交换代码。ASCII码表示与非压缩BCD码表示很相似,低4位完全相同,都是用0000~1001表示0~9;差别仅在高4位,ASCII码不是0000,而是0011。 ASCII码包含52个大、小写英文字母,10个十进制数字字符,32个标点符号、运算符号、特殊号,还有34个不可显示打印的控制字符编码,一共是128个编码。 3.2.3 定点数和浮点数表示3.2.3 定点数和浮点数表示当所要处理的数含有小数部分时,就有一个如何表示小数点的问题。在计算机中并不用某个二进制位来表示小数点,而是隐含规定小数点的位置。若约定小数点的位置是固定的,这就是定点表示法;若给定小数点的位置是可以变动的,则成为浮点表示法。他们不但关系到小数点的问题,而且关系到数的表示范围和精度。 1.定点数 计算机处理的数据不仅有符号,而且大量的数据带有小数,小数点不占有二进制一位而是隐含在机器数里某个固定位置上。通常采取两种简单的约定:一种是约定所有机器数的小数的小数点位置隐含在机器数的最低位之后,叫定点整数。如 小数点位置 另一种约定所有机器数的小数点隐含在符号位之后、有效部分最高位之前,叫定点小数,如: 小数点位置 定点整数和定点小数在计算机中的表示形式没什么区别,其小数点完全靠事先约定而隐含在不同位置。null2. 浮点数 当要处理的数是既有整数又有小数的混合小数时,采用定点数格式很不方便。为此,人们一般都采用浮点数进行运算。浮点数与科学计数法相似,把一个二进制数通过移动小数点位置表示成阶码和尾数两部分: 其中:E――N的阶码,是有符号的整数; S--N的尾数,是数值的有效数字部分,一般规定取二进制定点小数形式。 如:(101.1101)2=2+3×0.1011101,(0.01011101)2=2-1×1011101 浮点数的格式如下:null浮点数由阶码和尾数两部分组成,底数2在机器数中不出现,是隐含的。其中,阶码一般用补码定点整数表示,尾数一般用补码或原码定点小数表示。 为保证不损失有效数字,一般还对尾数进行规格化处理,即保证尾数的最高位是1,实际大小通过阶码进行调整。后面3.4节将对浮点数进行详细介绍。 思考: 计算机中引入浮点数的目的是什么? 3.3 二进制数值数据的编码与运算算法3.3 二进制数值数据的编码与运算算法3.3.1 原码、反码、补码的定义 1.原码 对于无符号数,原码是一种用数值本身表示的二进制编码。 对于有符号数,原码是一种以符号和数值表示的二进制编码。有符号数的原码编码规则是:用最高位表示符号,整数用0表示,负数用1表示。其他位表示该数的绝对值。 例如:X=(+105) [X]原=(01101001)2 Y=(-105) [Y]原=(11101001)2 注意:0的原码有两种,即 [+0]原=(00000000)2,[-0]原=(10000000)2 结论:正数的原码是它本身,负数的原码是真值取绝对值后,在最高位(左端)补“1”。null2.反码 反码使用得较少,它只是补码得一种过渡。 对于无符号数,反码是一种用对数值按位取反表示的二进制编码。 对于有符号数,反码是一种用符号位和对数值按位取反表示的二进制编码。有符号数的反码编码规则是:用最高位表示符号,正数用0表示,负数用1表示。正数的反码是其原码本身,负数反码的数值部分是原码的数值部分按位取反。 例如: [+65]原=(01000001)2 [+65]反=(01000001)2 [-65]原=(11000001)2 [-65]反=(00111110)2 注意:0的反码有两种,即 [+0]反=(00000000)2,[-0]反=(11111111)2 。 结论:正数的反码与其原码相同,负数的反码是符号位不变,其余各位按位取反。null3.补码 补码是计算机处理有符号数的运算常用的一种方法。 对于无符号数,补码是一种用对数值按位取反并加1表示的二进制编码。 对于有符号数,补码是一种用符号和对数值按位取反并加1表示的二进制编码。 对于n位计算机,某数x的补码定义为: 结论:正数的补码等于正数本身,负数的补码等于模(即2n)减去它的绝对值,即符号位1不变,数值部分是原码的数值部分按位取反并加1。null3.补码 补码是计算机处理有符号数的运算常用的一种方法。 对于无符号数,补码是一种用对数值按位取反并加1表示的二进制编码。 对于有符号数,补码是一种用符号和对数值按位取反并加1表示的二进制编码。 对于n位计算机,某数x的补码定义为: 结论:正数的补码等于正数本身,负数的补码等于模(即2n)减去它的绝对值,即符号位1不变,数值部分是原码的数值部分按位取反并加1。null4.三种码制的比较 (1)对于正数它们都等于真值本身,而对于负数各有不同的表示; (2)原码和反码各有两种零的表示法,而补码具有唯一的零。 3.3.2 补码加、减运算规则 在计算机中可进行两种运算:算术运算和逻辑运算。算术运算时,参与运算的二进制数码表示的是数值大小。常见的算术运算有加、减、乘、除、乘方、开方等。一般计算机中都提供了加、减、乘、除指令,其他更复杂的算术运算要利用算术变换成基本的四则运算来实现。从硬件实现的角度看,各种算术运算的基础是加、减运算。对于补码机,加法运算又是基础的基础。 补码的加减法运算规则: [X±Y]补= [X]补+[±Y]补 其中,X、Y为正、负数均可。该式说明,无论加法还是减法运算,都可由补码的加运算实现,运算结果(和或差)也以补码表示。若运算结果不产生溢出,且最高位(符号位)为0,则表示结果为正数,最高位为1,则结果为负数。 3.3.3 补码加减法运算部件3.3.3 补码加减法运算部件根据上节所述,对于减法运算,因为[X-Y]补=[X+(-Y)]补=[X]补+[-Y]补,所以计算时,可以先求出-Y的补码,然后再进行加法运算,这样在用逻辑电路实现减法运算时,可以只考虑用加法电路,而不必设置减法电路。实现补码加减运算电路如图3-1所示。图3-1null在图3-1中,被加数(或被减数)X和加数(或减数)Y分别存放在A寄存器和B寄存器中。当执行加法运算时,执行[X]补+[Y]补,将[X]补和[Y]补从A寄存器和B寄存器送到加法器的两个输入端。当执行减法运算时,执行[Y]补的各位取反(即0→1,1→0),然后在最低位加1,即可得[-Y]补。 假设Y=0.0011,则-Y的真值应等于-0.0011。根据上述方法,先取Y数中的各位的反值,得1.1100,然后在最低位加1,即1.1100+0.0001=1.1101。该值正好是-Y的补码。 在逻辑电路中。ALU由多个全加器及其他电路组成。每个全加器有三个输入端,其中一个接收从低位来的进位信号,而最低位恰好没有进位信号输入,因此可用来作为“+1”信号,于是可归纳出以下控制信号:null(1)当执行加法时,应提供的控制信号有: A→ALU,B→ALU(从B寄存器的各触发器的“1”端输出),ALU→A。 (2)当执行减法时,应提供的控制信号有: A→ALU,B→ALU(从B寄存器的各触发器的“0”端输出),ALU+1,ALU→A。其中,ALU+1操作可以与加法操作同时进行,所以总共只需要进行一次加法运算。 当前大部分计算机字长为64位,一般其符号位取1位,数值部分取61位。ALU和寄存器也都为64位,最高位产生的进位自动丢弃,满足补码定义中有关“mod 2”的运算规则,不必另行处理。这在运算结果不超出机器能表示的数的范围时,结果是正确的。超出机器数范围的情况称之为溢出。 思考: 计算机采用补码数进行运算的原因是什么?3.3.4 定点原码一位乘法运算3.3.4 定点原码一位乘法运算大家熟知的笔算乘法运算是将乘法运算转换成移位和加法运算来实现的。但是如果让计算机按笔算乘法运算来实现乘法运算就会凸现以下主要缺点: (1)四个位积一次相加,机器难以实现; (2)位积长度增加1倍,浪费硬件资源。 下面对笔算乘法运算进行改进: 将 A•B=A•0.1011 =0.1A+0.00A+0.001A+0.0001A =0.1A+0.00A+0.001(A+0.1A) =0.1(A+0.1(0•A+0.1(A+0.1A)) =0.1(A+0.1(0•A+0.1(A+0.1(A+0)) =2-1(A+2-1(0•A+2-1(A+2-1(A+0))))以上运算过程如下(被加数为0.1101):以上运算过程如下(被加数为0.1101):null上式的运算过程步骤可归为如下几点: (1)乘法运算可用移位运算和加法运算实现,当4位数乘4位数时,需要作4次移位运算和4次加法运算; (2)由乘数的末位值 决定 郑伟家庭教育讲座全集个人独资股东决定成立安全领导小组关于成立临时党支部关于注销分公司决定 乘数是否与部分积相加,然后右移1位,形成新的部分积;同时乘数也右移1位,由次低位作为末位值,空出的最高位为部分积的最低位。 (3)每次作加法时,被乘数仅仅与原部分积的高位相加,其低位被移至乘数所空出的高位位置。null对于原码的乘法,原码与真值只差一个符号,符号可以通过两个符号的异或求得: 0⊕0=0 0⊕1=1 1⊕0=1 1⊕1=0 以小数为例: 设[x]原 = x0 x1 x2 … xn 设[y]原 = y0 y1 y2 … yn 则[x]原•[y]原 =x0⊕y0 •(0.x0 x1 x2 … xn)•(0.y0 y1 y2 … yn) 记:x*=0.x0 x1 x2 … xn,y*=0.y0 y1 y2 … yn 原码一位乘法运算规则: (1)乘积的符号由两原码符号的异或运算结果决定; (2)乘积的数值部分由两数绝对值相乘,其通式为: x*•y*=2-1(y1x*+2-1(y2x*+2-1(y3x*+2-1(…+2-1(yn-1x*+2-1(yn+0))…))) 令zi表示第i次部分积,则上式可表示成递推公式: z0=0 z1=2-1(ynx*+z0) z2=2-1(yn-1x*+z1) …… zi=2-1(yn-i+1x*+zi-1) …… zn=2-1(y1x*+zn-1)null3.3.5 定点原码乘法运算部件 在计算机内实现原码乘法的逻辑框图如图3-2所示。其中三个寄存器A,B,C分别存放部分积、被乘数和乘数,ALU主要完成加法运算,移位寄存器对求和结果移位,生成新的部分积,计数器记录移位次数。运算方法描述如下: ⑴在机器内多个数据一般不能同时相加,一次加法操作只能求出两数之和,因此每求得一个相加数,就与上次部分积相加。A→ALU,B→ALU信号控制A、B两个寄存器的数送运算器ALU进行相加。 ⑵人工计算时,相加数逐次向左偏移一位,由于最后的乘积位数是乘数(或被乘数)的两倍,如按此法在机器中运算,加法器也需增到两倍。观察计算过程很容易发现,在求本次部分积时,前一次部分积的最低位,不再参与运算,因此可将前一次部分积的最低位右移一位,移入寄存器C中,相加数可直送而不必偏移,于是用N位加法器就可实现两个N数相乘。null⑶部分积右移时,乘数寄存器C同时右移一位(由C/2→C信号实现),这样可以用乘数寄存器的最低位来控制相加数(取被乘数或零),同时乘数寄存器的最高位可接收部分积右移出来的一位,因此,完成乘法运算后,A寄存器中保存乘积的高位部分,乘数寄存器中保存乘积的低位部分。 图3-2 3.3.4 定点补码一位乘法运算3.3.4 定点补码一位乘法运算设被乘数[x]补 = x0 .x1 x2 … xn,乘数[y]补 = y0 .y1 y2 … yn 1.当乘数y为正数时 [x]补=x0 .x1 x2 … xn=2 + x = 2n+1 + x(mod 2) [y]补=0.y1 y2 … yn=y 则 [x]补•[y]补=[x]补•y=(2n+1+x)y=2n+1y + xy 由于y=0.y1 y2 … yn,则,且是一个大于或等于1的正整数,根据模运算的性质,2n+1y=2(mod 2),故: [x]补•[y]补=2n+1y+xy=2+xy=[xy]补 即[xy]补=[x]补•[y]补=[x]补•y null当乘数y为正数时,可按原码的规则运算。运用递推公式: [z0]补=0 [z1]补=2-1(yn[x]补+[z0]补) [z2]补=2-1(yn-1[x]补+[z1]补) …… [zi]补=2-1(yn-i+1[x]补+[zi-1]补) …… [zn]补=2-1(y1[x]补+[zn-1]补) [xy]补=[zn]补2.当乘数y为负数时2.当乘数y为负数时[x]补=x0 .x1 x2 … xn [y]补=1.y1 y2 … yn=2+y(mod 2) 则 y=[y]补-2=1.y1 y2 … yn-2=0.y1 y2 … yn-1 xy=x(0.y1 y2 … yn-1) =x(0.y1 y2 … yn)-x 故[xy]补=[x(0.y1 y2 … yn)-x]补+[-x]补 由此可得,当乘数y为负数时,把乘数的补码[y]补去掉符号位,当成一个正数与[x]补相乘,然后再加上一个[-x]补进行校正,运用递推公式表示时: [z0]补=0 [z1]补=2-1(yn[x]补+[z0]补) [z2]补=2-1(yn-1[x]补+[z1]补) …… [zi]补=2-1(yn-i+1[x]补+[zi-1]补) …… [zn]补=2-1(y1[x]补+[zn-1]补) [xy]补=[zn]补+[-x]补 比较上述两组递推式子,乘数为负数的补码乘法与乘数为正数时完全类似,只需最后加上一项校正项[-x]补即可。null思考:结合定点原码一位乘法运算的逻辑电路图,请 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 出定点补码一位乘法运算的逻辑电路图。3.3.5 定点原码一位除法运算3.3.5 定点原码一位除法运算通过分析,可以得出笔算除法的特点: (1)每次上商0或1靠心算; (2)每做一次减法,余数不动,低位补0,再减去右移后的除数; (3)商的符号单独处理。 如果让计算机按笔算除法运算来实现乘法运算就会凸现以下主要缺点: (1)机器不能“心算”上商,必须靠比较(做减法判断符号位); (2)用左移余数代替右移除数后,得到的余数不是真正的余数; (3)上商的写入顺序问题,应写入寄存器的最低位,然后左移;null以小数为例: 设[x]原 = x0 .x1 x2 … xn [y]原 = y0 .y1 y2 … yn [x/y]原 =(x0⊕y0)(0.x1 x2 … xn/0.y1 y2 … yn) 记x*=0.x1 x2 … xn y*=0.y1 y2 … yn 小数点定点除法对被除数和除数有一定的约束: 0<|被除数|≤|除数| 同时应避免除数或被除数为0。 下面对恢复余数法和加减交替法作简单介绍。null1.恢复余数法 特点:当余数为负时,需加上除数,恢复成原余数。 2.加减交替法 恢复余数法有一个明显的缺点,当某一次-Y的查值为负是,要多一次+Y恢复余数的操作,降低了执行速度,又使控制线路变得复杂,因此计算机中普遍采用加减交替法来实现除法运算。加减交替法实现原理如下: 当余数Ri>0时,上商“1”,再对Ri左移一位后减除数,即2Ri-y*; 当余数Ri<0时,上商“0”,先做Ri+y*(恢复余数),再做2(Ri+y*)-y*,即2Ri+y*,即可用2Ri±y*实现。null1.商值的确定 比较被除数(余数)和除数的大小,然后确定商值。 (1)比较被除数(余数)和除数的大小方法 当被乘数与除数同号时,作减法;若得到的余数与除数同号,则表示“够减”,否则表示“不够减”; 当被乘数与除数异号时,作加法;若得到的余数与除数异号,则表示“够减”,否则表示“不够减”; (2)商值确定 当[x]补与[y]补同号,商为正,“够减”时上商“1”,“不够减”时上商“0”(按原码规则); 当[x]补与[y]补异号,商为负,“够减”时上商“0”,“不够减”时上商“1”(按反码规则);null表3-2 商的确定表3-3 简化的商值确定2.商符的形成2.商符的形成(1) 商符在求商过程中自动形成。 在小数定点除法中,被除数的绝对值应小于除数的绝对值,以避免商大于1,因此: 当[x]补与[y]补同号时,[x]补-[y]补得到的余数[R0]补必与[y]补异号,商上“0”,恰好与商的符号(正)一致; 当[x]补与[y]补异号时,[x]补+[y]补得到的余数[R0]补必与[y]补同号,商上“1”,也与商的符号(负)一致; (2) 商的符号可用于判断商是否溢出。例如: 当[x]补与[y]补同号时,若[R0]补与[y]补同号,上商“1”,即溢出; 当[x]补与[y]补异号时,若[R0]补与[y]补异号,上商“0”,即溢出;3.新余数[Ri+1]补的获得3.新余数[Ri+1]补的获得法则: • 当[R0]补与[y]补同号时,上商“1”,新余数: [Ri+1]补=2[Ri]补-[y]补=2[Ri]补+[-y]补 • 当[R0]补与[y]补异号时,上商“0”,新余数: [Ri+1]补=2[Ri]补+[y]补 如果对商的精度没有特殊要求,一般可采用“末位恒置1”法。3.3.7 定点运算部件3.3.7 定点运算部件定点运算部件由算术逻辑运算部件ALU、若干个寄存器、移位电路、计数器、门电路等组成。ALU部件主要完成加减法算术运算及逻辑运算,其中还应包含有快速进位电路。 图3-3为定点运算部件的框图,考虑到最简单的情况,图中仅有三个寄存器(A,B,C),而目前一般的运算部件都设置有数量较多的寄存器,可任意放置操作数和运算结果等,称之为通用寄存器。图3-3中的三个寄存器都被指定为专用的寄存器,A寄存器在运算前放置操作数,运算后放置运算结果。当执行加减运算和逻辑运算时,只用到A,B两个寄存器,当执行乘除法时,用到三个寄存器。各寄存器作用见表3-4所示。null图3-3 定点运算部件框图 表3-4 A,B,C寄存器的作用null图3-3中的数据传送门仅画出了一位,实际上应该有n位(设n为字长)。S为移位电路,一般由门电路组成,乘法运算时向右移一位(ALU/2→S),除法运算时向左移一位(2ALU→S),加减法及逻辑运算时不移位(ALU→S)。C为移位寄存器,乘法运算时左移一位,乘数左移一位后,其空出来的高位接受ALU最低位,到乘法结束时,C寄存器内保存了乘积的低n位。当进行除法运算时,上商到C的最低位,并左移一位,当运算结束时,C内为n位商。计数器是用来控制乘/除法运算是否结束,在运算开始时,置n值,每进行一次加/减和移位操作后计数器一1,当减到0时,表示乘/除法运算结束。 图3-3中的控制信号,诸如A→ALU,ALU→S等,是由控制部件送来的。例如,当执行加法运算时,应送来A→ALU、B→ALU、ALU→S、S→A信号(高电位),另外还应向ALU发出加法运算命令(图中未画出) 3.4浮点数与浮点运算器3.4浮点数与浮点运算器3.4.1 浮点数描述 浮点数的表示形式(以2为底) N=M·2E 其中,M为浮点数的尾数,一般为绝对值小于1的规格化二进制小数,用原码或补码形式表示;E为浮点数的阶码。 1.移码 用浮点数表示一个数值数据时,实际上是用两个定点数来表示的。一个定点小数用来表示浮点数的尾数,一个定点整数用来表示浮点数的阶码。一般浮点数的阶码都是用一种称之为“移码”的编码方式表示的。为什么要用移码表示阶呢?因为阶E可以是正数,也可以是负数,当进行浮点数的加减运算时,必须先“对阶”(即:比较两数之阶码并使之相等)。为简化比较操作,使操作过程不涉及阶的符号,我们可以对每个阶都加上一个正的常数(称为偏置常数),使所有阶都转化为正整数,这就是阶码的移码表示。null移码的定义如下: 设E为阶码,所取移码位数为n,则: [E]移=2n-1+E (2n-1为偏置常数) 移码特征如下: (1)假定:-2n-1≤E≤2n-1-1, 则0≤[E]移≤2n-1,即:移码表示总是大于0。因而可将移码看成无符号数。 (2)移码“0”的真值为-2n-1。即:[-2n-1]移=00…0 (3)零的移码表示是唯一的。即:[+0]移=[-0]移=2n-1=10…0(n-1个0) (4)若将移码第一位看成是符号位,则移码和补码仅符号位不同。2. 浮点数的“规格化”2. 浮点数的“规格化” 浮点数尾数的位数表示数的有效数位,有效数位越多,数据的精度越高。为了在浮点数运算过程中,尽可能多地保留有效数字的位数,使有效数字尽量占满尾数数位,必须在运算过程中经常对浮点数进行“规格化”操作。 从理论上来讲,规格化数的标志是真值的尾数部分中最高位具有非零数字。即若基为2,则规格化数的形式应为:±0.1bb…b×2E(这里b是0或1)。也就是说,若基为R,则规格化数的标志是尾数部分真值的绝对值大于等于1/R。即:尾数M≤-1/R 或M>1/R。一般机器规定,若基为2并用补码表示尾数,则规格化数的标志为:“尾数的符号位和数值部分最高位具有不同的代码”。这种规定简化了补码表示时规格化数的判断过程,但使得(-1/2)被排除在规格化数的范围之外。按照一般的理解,(-1/2)应该是规格化尾数形式,但因为其编码形式为1.10…0,符号位和数值部分最高位相同,所以按照对补码表示的尾数的特殊规定,它不是规格化数。因为补码可以表示最小负数-1,所以遇到这种情况时,可将尾数(-1/2)扩大到原来的2倍,即将尾数变为-1,而使阶码减1。null规格化操作有两种:“左规”和“右规”。若采用变形补码表示尾数,则当结果的尾数出现11.1xx...x或00.0xx...x的形式时,需将尾数左移,阶减1,直到尾数为规格化数形式为止。这个过程称为“左规”;当浮点运算结果的尾数出现01.xx...x或10.xx...x的形式时,并不一定溢出,应先将它右移1位,阶码加1,然后再判断阶码是否溢出,这个过程称为“右规”。 如下表所示32位浮点数格式,任意一个数表示为浮点数时,必须确定数的符号S、尾数M和阶码E,要规定它们各自所用的位数、编码方式和所在的位置。而基数R与定点数的小数点位置一样是默认的,不需要存储。每种计算机的浮点数表示格式各不相同。 0 1 7 8 31 1~7位:7位移码表示的阶码E(偏置常数=64) 8~31位:6位16进制原码小数表示的尾数Mnull 因为原码和移码都是对称的,故该浮点格式的范围是对于原点对称的。如图3-4所示。 图3-4 浮点数的表示范围 在上图中,数轴上有5个区间的数不能用该浮点数表示。这些区间称为溢出区,接近0的区间为下溢区,向无穷大方向延伸的区间为上溢区。 (1)比-(1-2-24)×2127还小的负数区间是负上溢区; (2)比- 2-129还大的负数区间是负下溢区; (3)零 (4)比2-129还小的正数区间是正下溢区; (5)比(1-2-24)×2127还大的正数区间是正上溢区;null使用浮点数虽然范围扩大了,但并没有能表示更多的数,实际上只是这些数在数轴上朝正负两个方向在更大的范围内散开。也就是说浮点数在数轴上的分布变稀疏了。定点数分布是等距且紧密的,而浮点数分布是不等距且稀疏的,越远离原点越稀疏,如图3-5所示 图3-5 浮点数的密度 在浮点数总位数不变的情况下,其阶码位数越多,则尾数位数(有效位数)越少。即:表示的数范围越大,则精度越差(数变稀疏)。既增加范围又增加精度的唯一办法就是使用更多的位。所以,大多数计算机都至少提供单精度和双精度两种浮点数格式。浮点数表示的数的范围和精度除了与阶码位数和有效位数有关系以外,基数的大小对范围和精度也有影响,基数越大,则范围越大,但精度变低(数变得更稀疏)。所以,对一种固定格式的浮点数而言,更大的基能给出更大的表示范围,但是以牺牲精度为代价的。null3. IEEE754浮点数标准 浮点数已有标准化的表示方法。被广泛采用的浮点数编码标准是IEEE754标准。在这个标准中,提供了32位单精度和64位双精度两种格式,如图3-6所示。另外,还提供了单、双精度两种格式的扩展形式。 null单精度格式:1位符号,8位阶码,23位尾数; 双精度格式:1位符号,11位阶码,52位尾数; 格式中,基数隐含为2;阶码用移码表示,偏置常数并不是通常n位移码所用的2n-1,而是(2n-1-1),即分别为127和1023;尾数用原码表示,利用基数为2的规格化数中的尾数第一位总为1的特点,在尾数中缺省了第一位的1,因而单精度格式的23位尾数实际上表示了24位有效数字。双精度格式的52位尾数实际上表示了53位有效数字。 3.4.2 浮点数的加减法运算3.4.2 浮点数的加减法运算设有两浮点数X,Y实现X±Y运算,其中: X=Mx·2EX ; Y=MY·2EY。均为规格化数。 执行以下五步完成运算。 第1步:对阶 对阶的目的就是使X和Y的阶码相等,以提供尾数相加减的可能性。阶码的比较是通过两阶码的减法来实现,统一取大的阶码,小阶码的尾数按两阶码的差值决定右移的数量。可以表示为:E= Ex - Ey 若E≤0,则EbEy,ExEy,MxMx×2Ex-Ey。 若E>0, 则EbEx,EyEx,MyMy×2Ey-Ex。 对阶使得原数中较大的阶码成为两数的公共阶码。小阶码的尾数右移时应注意: (1)原码形式的尾数右移时,符号位不参加移位,数值位右移,空出位补0。补码形式的尾数右移时,符号位与数值位一起右移,空出位填补符号位的值。 (2)尾数的右移,使得尾数中原来|E |位有效位移出。移出的这些位不要丢掉,应保留,并且参加后 续运算。这对运算结果的精确度有一定影响。这些保留的多余的位数又称为警戒位。null第2步:尾数加减 完成上一步操作、将两数的阶码调整一致后,就可以实现尾数的加、减运算: MbMx My 至此,已完成浮点数加、减法运算的基本操作。但是,求得的浮点数结果的形式不能保证一定是规格化的,而且对结果的溢出情况也需进行讨论。因此,浮点数的加、减法运算进入结果的后处理阶段。 第3步:尾数规格化 假设浮点数的尾数用补码表示,且加、减运算时采用双符号位,则规格化形式的尾数应是如下形式: 尾数为正数时:001xxx。其中,高位的00为双符号位,其后的1为最高数值位的值,再后面的数值位的值可以是任意值,这里用x表示。 尾数为负数时:110xxx。其中,高位的11为双符号位,其后的0为最高数值位的值,再后面的数值位的值可以是任意值,这里用x表示。null尾数违反规格化的情况有以下两种可能: (1)尾数加、减法运算中产生溢出。表现为尾数中符号位的异常。正溢出时,符号位为01。负溢出时,符号位为10。规格化采取的方法是:尾数右移一位,阶码加1。这种规格化就是右规。可以表示为:MbMb*2-1,EbEb+1。 (2)尾数的绝对值小于二进制的0.1。补码形式的尾数表现为最高数值位与符号位同值。 此时,规格化采取的方法是:符号位不动,数值位逐次左移,阶码逐次减1,直到满足规格化形式的尾数,即最高数值位与符号位不同值为止。这种规格化就是左规。可以表示为: MbMb*2k,EbEb-k。null第4步:尾数的舍入处理 在第2步和第3步的右规中都可能产生警戒位,为提高数据的计算精度,需要对结果尾数进行舍入处理。常用的舍入方法有多种,每种方法都有各自的优点,要根据实际条件进行比较和选择。 (1) 0舍1入法 这是一种比较简单的舍入方法,相似于十进制中的四舍五入法。警戒位中的最高位为1时,就在尾数末尾加1,警戒位中的最高位为0时,舍去所有的警戒位。这种方法的最大误差为2-(n+1),n为有效尾数位数。 (2)恒置1法 这是一种简单易行的舍入方法,又称冯诺依曼舍入法。舍入规则是:不论警戒位为何值,尾数的有效最低位恒置1。恒置1法产生的最大误差为2-n,n为有效尾数位数。 (3)恒舍法 恒舍法对尾数的处理是最简单的,无论警戒位的值是多少,都舍去。尾数的结果就取其有效的n位的值。对正数或负数来说,都是一种趋向原点的舍入,所以,又称为趋向零舍入(Round toward zero)。null第5步:检查阶码是否溢出 阶码溢出表示浮点数溢出。在规格化和舍人时都可能发生溢出,若阶码正常,加/减运算正常结束。若阶码下溢,则置运算结果为机器零,若上溢,则置溢出标志。 规格化浮点数加减运算流程如图3-7所示。图3-7 规格化浮点数加减运算流程(见下页)nullnull【例3-20】 两浮点数相加,求X+Y。 解:X和Y在机器中的浮点补码表示形式为(双符号位): 阶符 阶码 数符 尾数 X: 0 0 0 1 0 0 0 1 1 0 1 1 0 1 1 Y: 0 0 1 0 0 1 1 0 1 0 1 0 1 0 0 计算过程: (1)对阶操作 阶差△E=[EX]补+[-EY]补=00010+11100=11110 X阶码小,MX右移2位,保留阶码E=00100。 [MX]补=00 00 110 110 11 下划线上的数是右移出去而保留的附加位。 (2)尾数相加 [MX]补+[MY]补=0000110110 11+1101010100=1110001010 11 (3)规格化操作 左规,移1位,结果=1100010101 10;阶码-1,E=00011。null(4)舍入 附加位最高位为1,在所得结果的最低位+1,得到新结果:[M]补=1100010110,M=-0.11101010。 (5)判溢出 阶码符号位为00,故不溢出,最终结果为: X+Y=2011·(-0.11101010) 思考: 结合实例,请总结浮点运算的阶码采用移码的优点有那些? 3.4.3 浮点数的乘法运算3.4.3 浮点数的乘法运算两浮点数相乘,其乘积的阶码为相乘两数阶码之和,其尾数应为相乘两数的尾数之积。两个浮点数相除,商的阶码为被除数的阶码减去除数的阶码得到的差,尾数为被除数的尾数除数的尾数所得的商。参加运算的两个数都为规格化浮点数。乘除运算都有可能出现结果不满足规格化要求的问题,因此也必须进行规格化、舍入和判溢出等操作。规格化时要修改阶码。 1.浮点数的阶码运算 阶码运算需要检查结果是否溢出。在计算机中,阶码通常用补码或移码形式表示。补码运算规则已在前面说明。这里讨论移码的运算规则和判定溢出的方法。null当阶码由1位符号位和n位数据组成时,其移码的定义为: [X]移=2n+X (-2n≤X<2n ) 按此定义,则有: [X]移+[Y]移=2n+X+2n+Y =2n+(2n+(X+Y)) =2n+[X+Y]移 即直接用移码实现求阶码之和时,结果的最高位多加了个1,要得到移码形式的结果,需对结果的符号取反。 根据补码定义: [Y]补=2n+1+Y mod 2n+1 对同一个数值,移码和补码的数值位完全相同,而符号位正好相反。因此求阶码和(移码表示)可用如下方式完成: [X]移+[Y]补=2n+X+2n+1+Y =2n+1+(2n+(X+Y)) =[X+Y]移 mod 2n+1 同理有 [X]移+[-Y]补=[X-Y]移。null2.浮点乘法运算步骤 下面举例说明浮点乘法的运算步骤。 【例3-21】 阶码4位(移码),尾数8位(补码,含1符号位),阶码以2为底。运算结果仍取8位尾数。 设:X=2-5×0.1110011,Y=23×(-0.1110010) X,Y为真值,此处阶码用十进制表示,尾数用二进制表示。运算过程中阶码取双符号位。 (1)求乘积的阶码。乘积的阶码为两数阶码之和。 [EX+EY]移=[EX]移+[EY]补=00011+00011=00110 (2)尾数相乘。用定点数相乘的办法,此处仅列出结果,不进行详细计算。 [X×Y]补= 1.0011001 1001010 (尾数部分) 高位部分 低位部分 null(3)规格化处理。本例尾数已规格化,不需要再处理。如未规格化,需左规。 (4)舍入。尾数(乘积)低位部分的最高为1,需要舍入,在乘积高位部分的最低位加1因此 [X×Y]补=1.0011010 (尾数部分) (5)判溢出。阶码未溢出,故结果为正确。 X×Y: 0110 10011010 阶码(移码) 尾数(补码) X×Y=2-2·(-0.1100110) 说明:浮点数除法运算步骤与乘法运算类似,也分求商的阶码、尾数相除、规格化、舍入判溢出5个步骤,不再详细讨论。 3.浮点运算部件 通常由阶码运算部件和尾数运算部件组成,其各自的结构与定点运算部件相似。但阶码部分仅执行加减法运算。其尾数部分则执行加减乘除运算,左规时有时需要左移多位。为加速移位过程,有的机器设置了可移动多位的电路。3.6数据校验码3.6数据校验码计算机系统中的数据,在读写、存取和传送的过程中可能产生错误。为减少和避免这类错误,一方面是精心设计各种电路,提高计算机硬件的可靠性;另一方面是在数据编码上找出路,即采用某种编码法,通过少量的附加电路,使之能发现某些错误,甚至能确定出错位置,进而实现自动改错的能力。 数据校验码是一种常用的带有发现某些错误或自动改错能力的数据编码方法。它的实现原理,是加进一些冗余码,使合法数据编码出现某些错误时,就成为非法编码。这样,就可以通过检测编码的合法性来达到发现错误的目的。 码距是根据任意两个合法码之间至少有几个二进制位不相同而确定的,仅有一位不同,称其码距为1。 常用的数据校验码主要有奇偶校验码、海明校验码和循环冗余校验码 3.6.1 奇偶校验码3.6.1 奇偶校验码奇偶校验码是一种开销最小,能发现数据代码中一位错情况的编码,常用于存储器读写检查,或ASCII字符传送过程中的检查。奇偶校验法的基本思想是通过在原数据信息中增加一位奇校验位(或偶校验位),然后将原数据和得到的奇(偶)校验位一起进行存取或传送,对存取后或在传送的目标部件得到的相应数据和奇(偶)校验位,再进行一次编码,求出新的奇校验位(或偶校验位),最后根据得到的这个新的校验位的值,确定是否发生了错误。 奇偶校验码的实现原理如下:假设将数据B=bn-1bn-2...b1b0从源部件传送至目标部件。在终部件接收到的数据为B'=bn-1'bn-2'...b1'b0'。为了判断数据B在传送中是否发生了错误,可以按照如下步骤,通过最终得到的奇(偶)校验位P*来判断是否发生了数据传送错误。null第1步:在源部件求出奇(偶)校验位P。 若采用奇校验位,则P=bn-1⊕bn-2 ⊕...⊕b1⊕b0⊕1。 即:若B有奇数个1,则P取0,否则,P取1。 若采用偶校验位,则P=bn-1⊕bn-2 ⊕...⊕b1⊕b0。 例如,若传送的字符码是:1000001,则增加奇校验位后的编码为:11000001,而加上偶校验位后的编码为:01000001。 第2步:在目标部件求出奇(偶)校验位P'。 若采用奇校验位,则P'= bn-1'⊕bn-2'⊕...⊕b1'⊕b0'⊕1。 若采用偶校验
本文档为【计算机组成原理第3章运算方法和运算部件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_046750
暂无简介~
格式:ppt
大小:807KB
软件:PowerPoint
页数:0
分类:其他高等教育
上传时间:2011-04-30
浏览量:40