1.04k likes | 1.21k Views
计算机组成原理. 第 3 章 运算方法和运算部件. 第 3 章 运算方法和运算部件. 数据是计算机处理的对象。从外部形式来看,计算机可处理数值、文字、图、声音、视频,甚至各种模拟信息量。这些形式的信息,在计算机系统内部,主要表示成定点数(整数)、浮点数(实数)、逻辑数(布尔数)、字符、字符串等形式,并且都必须采用数字化编码。在计算机中如何完成数据的各种运算,如何通过硬件电路实现运算,如何校验数据的正确性是本章讨论的主要内容。. 本章要点: 常用的进位计数制及其相互转换 数值数据的表示和运算 运算部件 浮点运算 数据校验. 3.1 数字化信息编码.
E N D
计算机组成原理 第3章 运算方法和运算部件 计算机组成原理
第3章 运算方法和运算部件 • 数据是计算机处理的对象。从外部形式来看,计算机可处理数值、文字、图、声音、视频,甚至各种模拟信息量。这些形式的信息,在计算机系统内部,主要表示成定点数(整数)、浮点数(实数)、逻辑数(布尔数)、字符、字符串等形式,并且都必须采用数字化编码。在计算机中如何完成数据的各种运算,如何通过硬件电路实现运算,如何校验数据的正确性是本章讨论的主要内容。 计算机组成原理
本章要点: • 常用的进位计数制及其相互转换 • 数值数据的表示和运算 • 运算部件 • 浮点运算 • 数据校验 计算机组成原理
3.1 数字化信息编码 • 3.1.1 数字化信息编码的概念 • 目前,计算机的应用非常广泛,遍及人类社会生活的各个领域,产生了巨大的经济效益和社会影响。从用户角度来看,计算机能够处理数值、文字、声音、图画、活动图像等。但是,在计算机内部,这些都不能直接由计算机进行处理和存储,它们必须采取“特殊的表示形式”才能由计算机进行加工处理。这种特殊的表示形式就是二进制编码形式,即采用二进制编码表示的数值、文字、图画、声音和活动图像才能由计算机进行处理。所以,在计算机系统中所指的数据均是以二进制编码形式出现的。 计算机组成原理
计算机内部处理的所有数据都是“数字化编码”的二进制数据。计算机的输入设备(或接口芯片)实现将现实世界中的媒体信息(模拟信号),如声音、文字、图画、活动图像等转化为二进制数据(数字信号)。在计算机中进行处理、存储和传输的信息采用二进制进行编码的原因有以下几点:计算机内部处理的所有数据都是“数字化编码”的二进制数据。计算机的输入设备(或接口芯片)实现将现实世界中的媒体信息(模拟信号),如声音、文字、图画、活动图像等转化为二进制数据(数字信号)。在计算机中进行处理、存储和传输的信息采用二进制进行编码的原因有以下几点: • (1)二进制只有两种基本状态,使用有两个稳定状态的物理器件(如三极管)就可以表示二进制数的每一位,而制造有两个稳定状态的物理器件要比制造有多个稳定状态的物理器件容易得多。例如用高、低两个电位,或用脉冲的有无,或脉冲的正、负极性等都可以方便、可靠地表示“0”和“1”; • (2)二进制的编码、计数和运算规则都很简单。可用开关电路实现,简便易行; • (3)两个符号“1”和“0”正好与逻辑命题的两个值“真”和“假”相对应,为计算机中实现逻辑运算和程序中的逻辑判断提供了便利的条件。 计算机组成原理
3.1.2 二进制编码和码制转化 • 在计算机里,常常需要将某一信息(输入)变换为某一特定的代码(输出)。把二进制码按一定的规律编排,使每组代码具有一特定的含义称为二进制编码。例如,电报码中用4位十进制数字表示汉字,就是编码的典型例子。 • 编码是计算机系统的基础,而编码的基础是数制。数制是用于描述数字系统或体系结构的一种方法。为了描述数的大小,人类采用进位技术的方法,称为进位计数制,简称“数制”。人们在日常生活中,习惯于用十进制数,而在计算机中,多采用二进制数,二进制数的优点是其运算规律简单且实现二进制数的数字装置简单。二进制数的缺点是人们对其使用时不习惯且当二进制位数较多时,书写起来很麻烦,特别是在写错了以后不易查找错误,为此,书写时常采用八进制和十六进制数。 计算机组成原理
为了区分这几种进制数,规定在数字的后面加字母D表示十进制数,加字母B表示二进制数,加字母O表示八进制数,加字母H表示十六进制数,十进制数可以省略不加。例如:11D和11都表示是十进制数。另外,也可以用基数作下标表示,例如:为了区分这几种进制数,规定在数字的后面加字母D表示十进制数,加字母B表示二进制数,加字母O表示八进制数,加字母H表示十六进制数,十进制数可以省略不加。例如:11D和11都表示是十进制数。另外,也可以用基数作下标表示,例如: • (15)10或15表示十进制数, • (15)2表示二进制数, • (15)8表示八进制数, • (15)16表示十六进制数。 计算机组成原理
对于任何进制数,都有以下几个基本特点。 • (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)十进制(Decimal) • 十进制用0~9十个数字符号,以一定的规律排列起来,表示数值的大小。相邻位之间,低位逢十向高位进一。它的基数为10,各位的系数Ki可以是0~9十个数字中任一个。各位的权为10i。因而,任意一个n位十进制数Ni可表示为: 例如: 计算机组成原理
2)二进制(Binary)二进制是数字电路中应用最广泛的计数制。因为在数字电路中通常只有高电平和低电平两个状态。这两个状态刚好可以用二进制数中的两个符号0和1来表示。它的运算规则简单,在电路中易于实现。在二进制中,相邻位之间,低位逢二向高位进一。它的基数为2,各位的系数Ki可以是0或1,各位的权为2i。因而任一个n位二进制数N2可表示为:2)二进制(Binary)二进制是数字电路中应用最广泛的计数制。因为在数字电路中通常只有高电平和低电平两个状态。这两个状态刚好可以用二进制数中的两个符号0和1来表示。它的运算规则简单,在电路中易于实现。在二进制中,相邻位之间,低位逢二向高位进一。它的基数为2,各位的系数Ki可以是0或1,各位的权为2i。因而任一个n位二进制数N2可表示为: 例如: 计算机组成原理
(3)八进制(Octal) • 如果将一个数值较大的十进制数转换为二进制数,不仅位数多,难以记忆,且不便书写,易出错。因而除了二进制外,常用的还有八进制或十六进制。 • 八进制中,各相邻位之间,低位逢八向高位进一。它的基数为8,各位的权为8i,各位的系数Ki可以是0~7八个数字中任意一个,因而任意一个n位八进制数N8可表示为: 例如: 计算机组成原理
(4)十六进制(Hexadecimal) • 十六进制数中,各相邻位之间,低位逢十六向高位进一。它的基数为16,为了书写和计算方便,在十六进制数中,各位的系数Ki可以是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六个数字符号中任一个。各位的权为16i, 因而任一个n位十六进制数N16可表示为: 例如: 计算机组成原理
表3-1给出了上述四种进制之间的对应关系。 • 表3-1 四种进位制数之间的对应关系 计算机组成原理
2.不同进制间的转换 • (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)十进制数转换成二进制、八进制、十六进制数 计算机组成原理
低位 余数 8 834 2 104 8 0 13 8 5 8 1 1 高位 0 • 十进制数转换成二进制、八进制、十六进制数时,因为整数部分和小数部分转换的规则不同,所以要将整数和小数部分分开进行转换。 • ①整数部分的转换 • 整数部分的转换规则是“除基取余,逆向取”。也就是说,用要转换的十进制整数去除以基数R,将得到的余数作为结果数据中各位的数字,直到余数为0为止。先得到的余数作为转换后的最低位,最后得到的余数作为转换后的最高位。 • 【例3-4】将十进制整数835分别转换成二进制和八进制数。 • 二进制转换: 所以,(834) 10=(1502) 8 计算机组成原理
低位 余数 2 834 0 417 2 1 208 2 0 2 104 0 2 52 0 2 26 0 2 13 1 0 2 6 2 1 3 1 1 2 0 高位 • 二进制转换: 所以,(834) 10=(1101000010) 2 ②小数部分的转换 小数部分的转换规则是“乘基取整,正向取”。也就是说,用要转换的十进制小数去乘以基数R,将得到的乘积的整数部分作为结果数据中各位的数字,小数部分继续与基数R相乘。以次类推,直到某一步乘积的小数部分为0或已得到希望的位数为止。最后,将先得到的整数部分作为转换后的最高位,最后得到的整数部分作为转换后的最低位。 计算机组成原理
【例3-5】将十进制小数0.6875分别转换成二、八进制数。【例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 低位 • 其它例题(略) 计算机组成原理
③二进制数转换成八进制数 • 二进制数转换为八进制数的规则可以概括为“三位并一位”。即以小数点为基数,整数部分从右至左,每三位一组,最高位不足三位时,添0补足三位;小数部分从左至右,每三位一组,最低有效位不足三位时,添0补足三位。然后,将各组的三位二进制数按22,21,20权展开后相加,得到一位八进制数。 • 【例3-9】将(1000110.01101)2转换成八进制数。 • 001000110 . 011010 • 1 0 6 . 3 2 • 所以,(1000110.01101)2=(106.32)8 计算机组成原理
④二进制数转换成十六进制数 • 二进制数转换为十六进制数规则可概括为“四位并一位”。即以小数点为基数,整数部分从右至左,每四位一组,最高位不足四位时,添0补足四位;小数部分从左至右,每四位一组,最低有效位不足四位时,添0补足四位。然后,将各组的四位二进制数按23,22,21,20权展开后相加,得到一位十六进制数。 • 【例3-10】将(10010111.11011)2转换成十六进制数。 • 10010111 . 11011000 • 9 7 . D 8 • 所以,(10010111.11011)2=(97.D8)16 • 思考: 计算机能够直接识别运算的是二进制,那么计算机中还要采用八进制、十六进制的目的是什么? 计算机组成原理
3.2 常用的数据表示 • 3.2.1 真值与机器数 • 在计算机内部,数据是以二进制的形式存储和运算的,无论数值还是数的符号,都只能用0、1来表示。数的正负用高位字节的最高位来表示,定义为符号位,用“0”表示正数,“1”表示负数。例如,在机器中用8位二进制表示一个数+42,其格式为: • 00101010 • ↑ • 符号位,“0”表示正 • 而用8位二进制表示一个数-53,其格式为: • 10110101 • ↑ • 符号位,“1”表示负 • 在计算机内部,符号和数字都用二进制码表示,两者合在一起构成数的机内表示形式,称为机器数,而它真正表示的带有符号的数称为这个机器数的真值。机器数又分为定点数和浮点数。 • 以上分析可见,在机器数中,用0、1取代了真值的正、负号。 计算机组成原理
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 定点数和浮点数表示 • 当所要处理的数含有小数部分时,就有一个如何表示小数点的问题。在计算机中并不用某个二进制位来表示小数点,而是隐含规定小数点的位置。若约定小数点的位置是固定的,这就是定点表示法;若给定小数点的位置是可以变动的,则成为浮点表示法。他们不但关系到小数点的问题,而且关系到数的表示范围和精度。 • 1.定点数 • 计算机处理的数据不仅有符号,而且大量的数据带有小数,小数点不占有二进制一位而是隐含在机器数里某个固定位置上。通常采取两种简单的约定:一种是约定所有机器数的小数的小数点位置隐含在机器数的最低位之后,叫定点整数。如 • 小数点位置 • 另一种约定所有机器数的小数点隐含在符号位之后、有效部分最高位之前,叫定点小数,如: • 小数点位置 • 定点整数和定点小数在计算机中的表示形式没什么区别,其小数点完全靠事先约定而隐含在不同位置。 计算机组成原理
2. 浮点数 • 当要处理的数是既有整数又有小数的混合小数时,采用定点数格式很不方便。为此,人们一般都采用浮点数进行运算。浮点数与科学计数法相似,把一个二进制数通过移动小数点位置表示成阶码和尾数两部分: • 其中:E――N的阶码,是有符号的整数; • S--N的尾数,是数值的有效数字部分,一般规定取二进制定点小数形式。 • 如:(101.1101)2=2+3×0.1011101,(0.01011101)2=2-1×1011101 • 浮点数的格式如下: 计算机组成原理
浮点数由阶码和尾数两部分组成,底数2在机器数中不出现,是隐含的。其中,阶码一般用补码定点整数表示,尾数一般用补码或原码定点小数表示。浮点数由阶码和尾数两部分组成,底数2在机器数中不出现,是隐含的。其中,阶码一般用补码定点整数表示,尾数一般用补码或原码定点小数表示。 • 为保证不损失有效数字,一般还对尾数进行规格化处理,即保证尾数的最高位是1,实际大小通过阶码进行调整。后面3.4节将对浮点数进行详细介绍。 • 思考: 计算机中引入浮点数的目的是什么? 计算机组成原理
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”。 计算机组成原理
2.反码 • 反码使用得较少,它只是补码得一种过渡。 • 对于无符号数,反码是一种用对数值按位取反表示的二进制编码。 • 对于有符号数,反码是一种用符号位和对数值按位取反表示的二进制编码。有符号数的反码编码规则是:用最高位表示符号,正数用0表示,负数用1表示。正数的反码是其原码本身,负数反码的数值部分是原码的数值部分按位取反。 • 例如: • [+65]原=(01000001)2 [+65]反=(01000001)2 • [-65]原=(11000001)2 [-65]反=(00111110)2 • 注意:0的反码有两种,即 [+0]反=(00000000)2,[-0]反=(11111111)2 。 • 结论:正数的反码与其原码相同,负数的反码是符号位不变,其余各位按位取反。 计算机组成原理
3.补码 • 补码是计算机处理有符号数的运算常用的一种方法。 • 对于无符号数,补码是一种用对数值按位取反并加1表示的二进制编码。 • 对于有符号数,补码是一种用符号和对数值按位取反并加1表示的二进制编码。 • 对于n位计算机,某数x的补码定义为: • 结论:正数的补码等于正数本身,负数的补码等于模(即2n)减去它的绝对值,即符号位1不变,数值部分是原码的数值部分按位取反并加1。 计算机组成原理
3.补码 • 补码是计算机处理有符号数的运算常用的一种方法。 • 对于无符号数,补码是一种用对数值按位取反并加1表示的二进制编码。 • 对于有符号数,补码是一种用符号和对数值按位取反并加1表示的二进制编码。 • 对于n位计算机,某数x的补码定义为: • 结论:正数的补码等于正数本身,负数的补码等于模(即2n)减去它的绝对值,即符号位1不变,数值部分是原码的数值部分按位取反并加1。 计算机组成原理
4.三种码制的比较 • (1)对于正数它们都等于真值本身,而对于负数各有不同的表示; • (2)原码和反码各有两种零的表示法,而补码具有唯一的零。 • 3.3.2 补码加、减运算规则 • 在计算机中可进行两种运算:算术运算和逻辑运算。算术运算时,参与运算的二进制数码表示的是数值大小。常见的算术运算有加、减、乘、除、乘方、开方等。一般计算机中都提供了加、减、乘、除指令,其他更复杂的算术运算要利用算术变换成基本的四则运算来实现。从硬件实现的角度看,各种算术运算的基础是加、减运算。对于补码机,加法运算又是基础的基础。 • 补码的加减法运算规则: • [X±Y]补= [X]补+[±Y]补 • 其中,X、Y为正、负数均可。该式说明,无论加法还是减法运算,都可由补码的加运算实现,运算结果(和或差)也以补码表示。若运算结果不产生溢出,且最高位(符号位)为0,则表示结果为正数,最高位为1,则结果为负数。 计算机组成原理
3.3.3 补码加减法运算部件 • 根据上节所述,对于减法运算,因为[X-Y]补=[X+(-Y)]补=[X]补+[-Y]补,所以计算时,可以先求出-Y的补码,然后再进行加法运算,这样在用逻辑电路实现减法运算时,可以只考虑用加法电路,而不必设置减法电路。实现补码加减运算电路如图3-1所示。图3-1 计算机组成原理
在图3-1中,被加数(或被减数)X和加数(或减数)Y分别存放在A寄存器和B寄存器中。当执行加法运算时,执行[X]补+[Y]补,将[X]补和[Y]补从A寄存器和B寄存器送到加法器的两个输入端。当执行减法运算时,执行[Y]补的各位取反(即0→1,1→0),然后在最低位加1,即可得[-Y]补。在图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”信号,于是可归纳出以下控制信号: 计算机组成原理
(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 定点原码一位乘法运算 • 大家熟知的笔算乘法运算是将乘法运算转换成移位和加法运算来实现的。但是如果让计算机按笔算乘法运算来实现乘法运算就会凸现以下主要缺点: • (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): 计算机组成原理
上式的运算过程步骤可归为如下几点: • (1)乘法运算可用移位运算和加法运算实现,当4位数乘4位数时,需要作4次移位运算和4次加法运算; • (2)由乘数的末位值决定乘数是否与部分积相加,然后右移1位,形成新的部分积;同时乘数也右移1位,由次低位作为末位值,空出的最高位为部分积的最低位。 • (3)每次作加法时,被乘数仅仅与原部分积的高位相加,其低位被移至乘数所空出的高位位置。 计算机组成原理
对于原码的乘法,原码与真值只差一个符号,符号可以通过两个符号的异或求得:对于原码的乘法,原码与真值只差一个符号,符号可以通过两个符号的异或求得: • 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) 计算机组成原理
3.3.5 定点原码乘法运算部件 • 在计算机内实现原码乘法的逻辑框图如图3-2所示。其中三个寄存器A,B,C分别存放部分积、被乘数和乘数,ALU主要完成加法运算,移位寄存器对求和结果移位,生成新的部分积,计数器记录移位次数。运算方法描述如下: • ⑴在机器内多个数据一般不能同时相加,一次加法操作只能求出两数之和,因此每求得一个相加数,就与上次部分积相加。A→ALU,B→ALU信号控制A、B两个寄存器的数送运算器ALU进行相加。 • ⑵人工计算时,相加数逐次向左偏移一位,由于最后的乘积位数是乘数(或被乘数)的两倍,如按此法在机器中运算,加法器也需增到两倍。观察计算过程很容易发现,在求本次部分积时,前一次部分积的最低位,不再参与运算,因此可将前一次部分积的最低位右移一位,移入寄存器C中,相加数可直送而不必偏移,于是用N位加法器就可实现两个N数相乘。 计算机组成原理
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 计算机组成原理
当乘数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为负数时 • [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]补即可。 计算机组成原理
思考:结合定点原码一位乘法运算的逻辑电路图,请设计出定点补码一位乘法运算的逻辑电路图。思考:结合定点原码一位乘法运算的逻辑电路图,请设计出定点补码一位乘法运算的逻辑电路图。 计算机组成原理
3.3.5 定点原码一位除法运算 • 通过分析,可以得出笔算除法的特点: • (1)每次上商0或1靠心算; • (2)每做一次减法,余数不动,低位补0,再减去右移后的除数; • (3)商的符号单独处理。 • 如果让计算机按笔算除法运算来实现乘法运算就会凸现以下主要缺点: • (1)机器不能“心算”上商,必须靠比较(做减法判断符号位); • (2)用左移余数代替右移除数后,得到的余数不是真正的余数; • (3)上商的写入顺序问题,应写入寄存器的最低位,然后左移; 计算机组成原理
以小数为例: • 设[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。 • 下面对恢复余数法和加减交替法作简单介绍。 计算机组成原理
1.恢复余数法 • 特点:当余数为负时,需加上除数,恢复成原余数。 • 2.加减交替法 • 恢复余数法有一个明显的缺点,当某一次-Y的查值为负是,要多一次+Y恢复余数的操作,降低了执行速度,又使控制线路变得复杂,因此计算机中普遍采用加减交替法来实现除法运算。加减交替法实现原理如下: • 当余数Ri>0时,上商“1”,再对Ri左移一位后减除数,即2Ri-y*; • 当余数Ri<0时,上商“0”,先做Ri+y*(恢复余数),再做2(Ri+y*)-y*,即2Ri+y*,即可用2Ri±y*实现。 计算机组成原理
1.商值的确定 • 比较被除数(余数)和除数的大小,然后确定商值。 • (1)比较被除数(余数)和除数的大小方法 • 当被乘数与除数同号时,作减法;若得到的余数与除数同号,则表示“够减”,否则表示“不够减”; • 当被乘数与除数异号时,作加法;若得到的余数与除数异号,则表示“够减”,否则表示“不够减”; • (2)商值确定 • 当[x]补与[y]补同号,商为正,“够减”时上商“1”,“不够减”时上商“0”(按原码规则); • 当[x]补与[y]补异号,商为负,“够减”时上商“0”,“不够减”时上商“1”(按反码规则); 计算机组成原理
表3-2 商的确定 表3-3 简化的商值确定 计算机组成原理
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]补的获得 • 法则: • • 当[R0]补与[y]补同号时,上商“1”,新余数: • [Ri+1]补=2[Ri]补-[y]补=2[Ri]补+[-y]补 • • 当[R0]补与[y]补异号时,上商“0”,新余数: • [Ri+1]补=2[Ri]补+[y]补 • 如果对商的精度没有特殊要求,一般可采用“末位恒置1”法。 计算机组成原理
3.3.7 定点运算部件 • 定点运算部件由算术逻辑运算部件ALU、若干个寄存器、移位电路、计数器、门电路等组成。ALU部件主要完成加减法算术运算及逻辑运算,其中还应包含有快速进位电路。 • 图3-3为定点运算部件的框图,考虑到最简单的情况,图中仅有三个寄存器(A,B,C),而目前一般的运算部件都设置有数量较多的寄存器,可任意放置操作数和运算结果等,称之为通用寄存器。图3-3中的三个寄存器都被指定为专用的寄存器,A寄存器在运算前放置操作数,运算后放置运算结果。当执行加减运算和逻辑运算时,只用到A,B两个寄存器,当执行乘除法时,用到三个寄存器。各寄存器作用见表3-4所示。 计算机组成原理