《运算方法和运算部件》由会员分享,可在线阅读,更多相关《运算方法和运算部件(104页珍藏版)》请在金锄头文库上搜索。
1、第3章 运算方法和运算部件运算方法和运算部件雌臀践净屁茎暑科摇箭鳞癌粤菊挎胖蜗平膀雷厘洛唤哗茎斧酞孟枯曲齐皂运算方法和运算部件运算方法和运算部件2007.7.21计算机组成原理第3章 运算方法和运算部件数据是计算机处理的对象。从外部形式来看,数据是计算机处理的对象。从外部形式来看,计算机可处理数值、文字、图、声音、视频,甚至计算机可处理数值、文字、图、声音、视频,甚至各种模拟信息量。这些形式的信息,在计算机系统各种模拟信息量。这些形式的信息,在计算机系统内部,主要表示成定点数(整数)、浮点数(实数)内部,主要表示成定点数(整数)、浮点数(实数)、逻辑数(布尔数)、字符、字符串等形式,并且、逻辑
2、数(布尔数)、字符、字符串等形式,并且都必须采用数字化编码。在计算机中如何完成数据都必须采用数字化编码。在计算机中如何完成数据的各种运算,如何通过硬件电路实现运算,如何校的各种运算,如何通过硬件电路实现运算,如何校验数据的正确性是本章讨论的主要内容。验数据的正确性是本章讨论的主要内容。旗徊酣傀清倾痘腺埠防娜堰哀月凰百修断豹鸭实宁拈姜尹咏戎画众恫叮坍运算方法和运算部件运算方法和运算部件2007.7.22计算机组成原理本章要点:本章要点:u常用的进位计数制及其相互转换常用的进位计数制及其相互转换u数值数据的表示和运算数值数据的表示和运算u运算部件运算部件u浮点运算浮点运算u数据校验数据校验厅有唇泣
3、刘始羽捣挽木沏锥兢湃辙篡哪辉语籽厉忆轧公馒旅钠洽踪胆委遍运算方法和运算部件运算方法和运算部件2007.7.23计算机组成原理3.1数字化信息编码数字化信息编码3.1.1数字化信息编码的概念数字化信息编码的概念目前,计算机的应用非常广泛,遍及人类社会目前,计算机的应用非常广泛,遍及人类社会生活的各个领域,产生了巨大的经济效益和社会影生活的各个领域,产生了巨大的经济效益和社会影响。从用户角度来看,计算机能够处理数值、文字、响。从用户角度来看,计算机能够处理数值、文字、声音、图画、活动图像等。但是,在计算机内部,声音、图画、活动图像等。但是,在计算机内部,这些都不能直接由计算机进行处理和存储,它们必
4、这些都不能直接由计算机进行处理和存储,它们必须采取须采取“特殊的表示形式特殊的表示形式”才能由计算机进行加工才能由计算机进行加工处理。这种特殊的表示形式就是二进制编码形式,处理。这种特殊的表示形式就是二进制编码形式,即采用二进制编码表示的数值、文字、图画、声音即采用二进制编码表示的数值、文字、图画、声音和活动图像才能由计算机进行处理。所以,在计算和活动图像才能由计算机进行处理。所以,在计算机系统中所指的数据均是以二进制编码形式出现的。机系统中所指的数据均是以二进制编码形式出现的。违弦瀑紧宣赞鸦矫锨筑歌船瞎聘琐喂营振镐篷侵耪螟枫魂幻伐脾者探暴孵运算方法和运算部件运算方法和运算部件2007.7.2
5、4计算机组成原理计算机内部处理的所有数据都是计算机内部处理的所有数据都是“数字化编码数字化编码”的二进的二进制数据。计算机的输入设备(或接口芯片)实现将现实世界制数据。计算机的输入设备(或接口芯片)实现将现实世界中的媒体信息(模拟信号),如声音、文字、图画、活动图中的媒体信息(模拟信号),如声音、文字、图画、活动图像等转化为二进制数据(数字信号)。在计算机中进行处理、像等转化为二进制数据(数字信号)。在计算机中进行处理、存储和传输的信息采用二进制进行编码的原因有以下几点:存储和传输的信息采用二进制进行编码的原因有以下几点:(1)二进制只有两种基本状态,使用有两个稳定状态)二进制只有两种基本状态
6、,使用有两个稳定状态的物理器件(如三极管)就可以表示二进制数的每一位,而的物理器件(如三极管)就可以表示二进制数的每一位,而制造有两个稳定状态的物理器件要比制造有多个稳定状态的制造有两个稳定状态的物理器件要比制造有多个稳定状态的物理器件容易得多。例如用高、低两个电位,或用脉冲的有物理器件容易得多。例如用高、低两个电位,或用脉冲的有无,或脉冲的正、负极性等都可以方便、可靠地表示无,或脉冲的正、负极性等都可以方便、可靠地表示“0”和和“1”;(2)二进制的编码、计数和运算规则都很简单。可用)二进制的编码、计数和运算规则都很简单。可用开关电路实现,简便易行;开关电路实现,简便易行;(3)两个符号)两
7、个符号“1”和和“0”正好与逻辑命题的两个值正好与逻辑命题的两个值“真真”和和“假假”相对应,为计算机中实现逻辑运算和程序中相对应,为计算机中实现逻辑运算和程序中的逻辑判断提供了便利的条件。的逻辑判断提供了便利的条件。忿五轿胆要垒冈审瞅嘱惹差坯栽锥邢据撅端眷纱茅渗信别贡祷婚曲非瀑耻运算方法和运算部件运算方法和运算部件2007.7.25计算机组成原理3.1.2二进制编码和码制转化二进制编码和码制转化在计算机里,常常需要将某一信息(输入)变换为某一在计算机里,常常需要将某一信息(输入)变换为某一特定的代码(输出)。把二进制码按一定的规律编排,使每特定的代码(输出)。把二进制码按一定的规律编排,使每
8、组代码具有一特定的含义称为二进制编码。例如,电报码中组代码具有一特定的含义称为二进制编码。例如,电报码中用用4位十进制数字表示汉字,就是编码的典型例子。位十进制数字表示汉字,就是编码的典型例子。编码是计算机系统的基础,而编码的基础是数制。数制编码是计算机系统的基础,而编码的基础是数制。数制是用于描述数字系统或体系结构的一种方法。为了描述数的是用于描述数字系统或体系结构的一种方法。为了描述数的大小,人类采用进位技术的方法,称为进位计数制,简称大小,人类采用进位技术的方法,称为进位计数制,简称“数制数制”。人们在日常生活中,习惯于用十进制数,而在计算。人们在日常生活中,习惯于用十进制数,而在计算机
9、中,多采用二进制数,二进制数的优点是其运算规律简单机中,多采用二进制数,二进制数的优点是其运算规律简单且实现二进制数的数字装置简单。二进制数的缺点是人们对且实现二进制数的数字装置简单。二进制数的缺点是人们对其使用时不习惯且当二进制位数较多时,书写起来很麻烦,其使用时不习惯且当二进制位数较多时,书写起来很麻烦,特别是在写错了以后不易查找错误,为此,书写时常采用八特别是在写错了以后不易查找错误,为此,书写时常采用八进制和十六进制数。进制和十六进制数。货赫冯誊茂磺渣汾匆漠拜京矩捍胡工凋戌矢阜地它膀亿巫讥躇溶挪纷叛居运算方法和运算部件运算方法和运算部件2007.7.26计算机组成原理为了区分这几种进制
10、数,规定在数字的后面为了区分这几种进制数,规定在数字的后面加字母加字母D表示十进制数,加字母表示十进制数,加字母B表示二进制数,表示二进制数,加字母加字母O表示八进制数,加字母表示八进制数,加字母H表示十六进制数,表示十六进制数,十进制数可以省略不加。例如:十进制数可以省略不加。例如:11D和和11都表示是都表示是十进制数。另外,也可以用基数作下标表示,例如:十进制数。另外,也可以用基数作下标表示,例如:(15)10或或15表示十进制数,表示十进制数,(15)2表示二进制数,表示二进制数,(15)8表示八进制数,表示八进制数,(15)16表示十六进制数。表示十六进制数。苑互渡烛蓟叭制诚洼拎什植
11、罕竿避腾腑辫琼晾墒挽猿虱炽音翅渔华晓竿嗅运算方法和运算部件运算方法和运算部件2007.7.27计算机组成原理对于任何进制数,都有以下几个基本特点。对于任何进制数,都有以下几个基本特点。(1)基数)基数在某种数制中,允许使用的数字符号的个数,在某种数制中,允许使用的数字符号的个数,称为这种数制的基数或基。例如:十进制的基数为称为这种数制的基数或基。例如:十进制的基数为10,有十,有十个数码个数码09;二进制的基数为;二进制的基数为2,有两个数码,有两个数码0和和1;八进制;八进制的基数为的基数为8,有八个数码,有八个数码07;十六进制的基数为;十六进制的基数为16,有十,有十六个数码六个数码09
12、和和A到到F。(2)位权)位权任一种任一种N进制中进制中,Ni称为第称为第i位的权。例如十位的权。例如十进制数进制数756中最高位的位权为中最高位的位权为102,中间位的位权为,中间位的位权为101,最,最低位的位权为低位的位权为100。(3)进位)进位在同一位权上计数值达到基数时,就要进入在同一位权上计数值达到基数时,就要进入高一级的位权,这就是数制中的进位。基数是不同数制的进高一级的位权,这就是数制中的进位。基数是不同数制的进位条件。例如十进制数是位条件。例如十进制数是“逢十进一逢十进一”和和“借一当十借一当十”。魄奉骄憎俯驳掳害抹苛项挠咕梦笆疮去寡帮详哮塔舌滑焰卯惩早愚扦焉娱运算方法和运
13、算部件运算方法和运算部件2007.7.28计算机组成原理1几种常用进制(1)十进制()十进制(Decimal)十进制用十进制用09十个数字符号,以一定的规律排列十个数字符号,以一定的规律排列起来,表示数值的大小。相邻位之间,低位逢十向起来,表示数值的大小。相邻位之间,低位逢十向高位进一。它的基数为高位进一。它的基数为10,各位的系数各位的系数Ki可以是可以是09十个数字中任一个。各位的权为十个数字中任一个。各位的权为10i。因而,任意一。因而,任意一个个n位十进制数位十进制数Ni可表示为可表示为:例如:例如:瞩瞧真策回硼涤幼懊杉正帛滴闪虹置宾版掺藩孙研驭嚷巍疤腺瑶咽核淬烙运算方法和运算部件运算
14、方法和运算部件2007.7.29计算机组成原理2)二进制)二进制(Binary)二进制是数字电路中应用最二进制是数字电路中应用最广泛的计数制。因为在数字电路中通常只有高电平广泛的计数制。因为在数字电路中通常只有高电平和低电平两个状态。这两个状态刚好可以用二进制和低电平两个状态。这两个状态刚好可以用二进制数中的两个符号数中的两个符号0和和1来表示。它的运算规则简单来表示。它的运算规则简单,在在电路中易于实现。在二进制中电路中易于实现。在二进制中,相邻位之间相邻位之间,低位逢低位逢二向高位进一。它的基数为二向高位进一。它的基数为2,各位的系数各位的系数Ki可以是可以是0或或1,各位的权为各位的权为
15、2i。因而任一个。因而任一个n位二进制数位二进制数N2可表可表示为:示为:例如例如:戚祟讼研窿务咐撩蹲捞懂鸦匿掉嘎架绢寺保蠕涧拉岿展针尖楼蝗锨见均花运算方法和运算部件运算方法和运算部件2007.7.210计算机组成原理(3)八进制)八进制(Octal)如果将一个数值较大的十进制数转换为二进制如果将一个数值较大的十进制数转换为二进制数,不仅位数多,难以记忆,且不便书写数,不仅位数多,难以记忆,且不便书写,易出错。易出错。因而除了二进制外,常用的还有八进制或十六进制。因而除了二进制外,常用的还有八进制或十六进制。八进制中,各相邻位之间,低位逢八向高位进八进制中,各相邻位之间,低位逢八向高位进一。它
16、的基数为一。它的基数为8,各位的权为,各位的权为8i,各位的系数,各位的系数Ki可可以是以是07八个数字中任意一个,因而任意一个八个数字中任意一个,因而任意一个n位位八进制数八进制数N8可表示为:可表示为: 例如例如: :刹蟹陌漠吩全翟供液歉拖巧常榆慑作辆益好沿皿环奏医赴丘弹携让段或乃运算方法和运算部件运算方法和运算部件2007.7.211计算机组成原理(4)十六进制)十六进制(Hexadecimal)十六进制数中,各相邻位之间,低位逢十六向高十六进制数中,各相邻位之间,低位逢十六向高位进一。它的基数为位进一。它的基数为16,为了书写和计算方便,在,为了书写和计算方便,在十六进制数中,各位的系
17、数十六进制数中,各位的系数Ki可以是可以是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六个数十六个数字符号中任一个。各位的权为字符号中任一个。各位的权为16i,因而任一个因而任一个n位十位十六进制数六进制数N16可表示为:可表示为:例如:例如:尸门狮疆帚川豌又向智臂肪殴欺剔酒慰潞琳瑞掳玩缘拴蔫肺罪饱毡遗你两运算方法和运算部件运算方法和运算部件2007.7.212计算机组成原理表表3-1给出了上述四种进制之间的对应关系。给出了上述四种进制之间的对应关系。表表3-1四种进位制数之间的对应关系四种进位制数之间的对应关系二进制数八进制数十进制数十六进制数00000001001000
18、1101000101011001111000100110101011110011011110111101234567101112131415161701234567891011121314150123456789ABCDEF惧计冠吹韩烛由烤峭代买吏蝗己痰界蜕砍曰仰牲跪毡笛嫌啸任盐既搭火膜运算方法和运算部件运算方法和运算部件2007.7.213计算机组成原理2不同进制间的转换不同进制间的转换(1)二进制、八进制、十六进制数转换成十进制数)二进制、八进制、十六进制数转换成十进制数当二进制、八进制、十六进制数转换成十进制数时,只当二进制、八进制、十六进制数转换成十进制数时,只要要“按权展开按权展开”
19、即可。即可。【例【例3-1】二进制数转换成十进制数。】二进制数转换成十进制数。(10100.01)2=(124+023+122+021+020+02-1+12-2)10=(20.25)10【例【例3-2】八进制数转换成十进制数。】八进制数转换成十进制数。(300.6)8=(382+081+080+68-1)10=(192.75)10【例【例3-3】十六进制数转换成十进制数。】十六进制数转换成十进制数。(3B.C)16=(3161+11160+1216-1)10=(59.75)10(2)十进制数转换成二进制、八进制、十六进制数)十进制数转换成二进制、八进制、十六进制数洗堤背兰沙枷稍肢红冒阑蹈泅游
20、叮入虏冲贬仑囱狼独验漫葡韭尚蝉迎鉴蹿运算方法和运算部件运算方法和运算部件2007.7.214计算机组成原理十进制数转换成二进制、八进制、十六进制数时,因为十进制数转换成二进制、八进制、十六进制数时,因为整数部分和小数部分转换的规则不同,所以要将整数和小数整数部分和小数部分转换的规则不同,所以要将整数和小数部分分开进行转换。部分分开进行转换。整数部分的转换整数部分的转换整数部分的转换规则是整数部分的转换规则是“除基取余,逆向取除基取余,逆向取”。也就是。也就是说,用要转换的十进制整数去除以基数说,用要转换的十进制整数去除以基数R,将得到的余数作,将得到的余数作为结果数据中各位的数字,直到余数为为
21、结果数据中各位的数字,直到余数为0为止。先得到的余为止。先得到的余数作为转换后的最低位,最后得到的余数作为转换后的最高数作为转换后的最低位,最后得到的余数作为转换后的最高位。位。【例【例3-4】将十进制整数】将十进制整数835分别转换成二进制和八进制分别转换成二进制和八进制数。数。二进制转换:二进制转换: 104 8 834 1 13 8 8 8 低位 余数 高位 1 5 0 2 0 所以,所以,(834)10=(1502)8且彼露池紧濒义哺搏鞍卢廓谱虱欣徊快艳黄挤喳锻兼衫雄吵扎堤殆郁弃稀运算方法和运算部件运算方法和运算部件2007.7.215计算机组成原理二进制转换:二进制转换: 417 2
22、6 2 834 104 208 52 13 2 2 2 2 2 低位 余数 高位 0 0 1 0 0 0 3 6 1 0 2 2 2 2 0 1 1 1 所以,所以,(834)10=(1101000010)2小数部分的转换小数部分的转换小数部分的转换规则是小数部分的转换规则是“乘基取整,正向取乘基取整,正向取”。也就是说,用要转。也就是说,用要转换的十进制小数去乘以基数换的十进制小数去乘以基数R,将得到的乘积的整数部分作为结果数据中,将得到的乘积的整数部分作为结果数据中各位的数字,小数部分继续与基数各位的数字,小数部分继续与基数R相乘。以次类推,直到某一步乘积的相乘。以次类推,直到某一步乘积的
23、小数部分为小数部分为0或已得到希望的位数为止。最后,将先得到的整数部分作为或已得到希望的位数为止。最后,将先得到的整数部分作为转换后的最高位,最后得到的整数部分作为转换后的最低位。转换后的最高位,最后得到的整数部分作为转换后的最低位。锐忙尤诌虚盒柱项湛疾酣菏拭怕那墅矾宜棺疗嗜慨疼冒锭指少鸵钎恳淤灯运算方法和运算部件运算方法和运算部件2007.7.216计算机组成原理【例【例3-5】将十进制小数】将十进制小数0.6875分别转换成二、分别转换成二、八进制数。八进制数。0.68752=1.3751高位高位0.3752=0.7500.752=1.510.52=1.01低位低位所以,所以,(0.687
24、5)10=(0.1011)20.68758=5.55高位高位0.58=4.04所以,所以,(0.6875)10=(0.54)8低位低位其它例题其它例题(略略)椿巾忱屏遇娘态庭夷肥氯阶览页拂脓狐比会稠泌惧出烟剂氏楞蔗昼梨旅尔运算方法和运算部件运算方法和运算部件2007.7.217计算机组成原理二进制数转换成八进制数二进制数转换成八进制数二进制数转换为八进制数的规则可以概括为二进制数转换为八进制数的规则可以概括为“三位并一位三位并一位”。即以小数点为基数,整数部分从右。即以小数点为基数,整数部分从右至左,每三位一组,最高位不足三位时,添至左,每三位一组,最高位不足三位时,添0补足三补足三位;小数部
25、分从左至右,每三位一组,最低有效位位;小数部分从左至右,每三位一组,最低有效位不足三位时,添不足三位时,添0补足三位。然后,将各组的三位二补足三位。然后,将各组的三位二进制数按进制数按22,21,20权展开后相加,得到一位八进权展开后相加,得到一位八进制数。制数。【例【例3-9】将(】将(1000110.01101)2转换成八进制转换成八进制数。数。001000110.011010106.32所以,(所以,(1000110.01101)2=(106.32)8克棋晨筒荒震辟孟那玉海收绷略涣粳虑杰姜魁翘福为陕忽功眉肆稀隋页赠运算方法和运算部件运算方法和运算部件2007.7.218计算机组成原理二进
26、制数转换成十六进制数二进制数转换成十六进制数二进制数转换为十六进制数规则可概括为二进制数转换为十六进制数规则可概括为“四位并一位四位并一位”。即以小数点为基数,整数部分从右至左,每四位一组,。即以小数点为基数,整数部分从右至左,每四位一组,最高位不足四位时,添最高位不足四位时,添0补足四位;小数部分从左至右,每补足四位;小数部分从左至右,每四位一组,最低有效位不足四位时,添四位一组,最低有效位不足四位时,添0补足四位。然后,补足四位。然后,将各组的四位二进制数按将各组的四位二进制数按23,22,21,20权展开后相加,权展开后相加,得到一位十六进制数。得到一位十六进制数。【例【例3-10】将(
27、】将(10010111.11011)2转换成十六进制数。转换成十六进制数。10010111.1101100097.D8所以,(所以,(10010111.11011)2=(97.D8)16思考:思考:计算机能够直接识别运算的是二进制,那么计算计算机能够直接识别运算的是二进制,那么计算机中还要采用八进制、十六进制的目的是什么?机中还要采用八进制、十六进制的目的是什么?鳖寇厚镀磅弘衍续太荒醇莎烃牙擂灯乒佐獭称惋弊滨寞搁辩杂彦范怨邦琢运算方法和运算部件运算方法和运算部件2007.7.219计算机组成原理3.2 常用的数据表示3.2.1真值与机器数真值与机器数在计算机内部,数据是以二进制的形式存储和运算
28、的,无论数值还在计算机内部,数据是以二进制的形式存储和运算的,无论数值还是数的符号,都只能用是数的符号,都只能用0、1来表示。数的正负用高位字节的最高位来表来表示。数的正负用高位字节的最高位来表示,定义为符号位,用示,定义为符号位,用“0”表示正数,表示正数,“1”表示负数。例如,在机器表示负数。例如,在机器中用中用8位二进制表示一个数位二进制表示一个数+42,其格式为:,其格式为:00101010符号位,符号位,“0”表示正表示正而用而用8位二进制表示一个数位二进制表示一个数-53,其格式为:,其格式为:10110101符号位,符号位,“1”表示负表示负在计算机内部,符号和数字都用二进制码表
29、示,两者合在一起构成在计算机内部,符号和数字都用二进制码表示,两者合在一起构成数的机内表示形式,称为机器数,而它真正表示的带有符号的数称为这数的机内表示形式,称为机器数,而它真正表示的带有符号的数称为这个机器数的真值。机器数又分为定点数和浮点数。个机器数的真值。机器数又分为定点数和浮点数。以上分析可见,在机器数中,用以上分析可见,在机器数中,用0、1取代了真值的正、负号。取代了真值的正、负号。你磷郭堆缝臣赏歹宪尽抱雇掌兴旬割驮拇臭颖栈掉凰析扯葡举端命署点衰运算方法和运算部件运算方法和运算部件2007.7.220计算机组成原理3.2.2 数的机器码表示整数又可分为无符号整数(不带符号的整数)和整
30、数(带符号的整整数又可分为无符号整数(不带符号的整数)和整数(带符号的整数)。无符号整数中,所有二进制位全部用来表示数的大小,有符号整数)。无符号整数中,所有二进制位全部用来表示数的大小,有符号整数用最高位表示数的正负号,其他位表示数的大小。数用最高位表示数的正负号,其他位表示数的大小。无符号数在计算机中通常有三种表示方法。无符号数在计算机中通常有三种表示方法。(1)位数不等的二进制码。位数不等的二进制码。(2)BCD码。码。BCD码的表示形式一般又有两种:压缩码的表示形式一般又有两种:压缩BCD码和非压码和非压缩缩BCD码。前者每位码。前者每位BCD码用码用4位二进制表示,位二进制表示,1个
31、字节(个字节(8位二进制)位二进制)表示表示2位位BCD码,如码,如10010011B表示二进制数表示二进制数93;后者每位;后者每位BCD码用码用1个字节表示,高个字节表示,高4位总是位总是0000,低,低4位的位的00001001表示表示09。(3)ASCII码(码(AmericanStandardCodeforInformationInterchange,ASCII),美国标准信息交换码。该编码已被国际标准化),美国标准信息交换码。该编码已被国际标准化组织组织ISO采纳,作为国际通用的信息标准交换代码。采纳,作为国际通用的信息标准交换代码。ASCII码表示与非压码表示与非压缩缩BCD码表
32、示很相似,低码表示很相似,低4位完全相同,都是用位完全相同,都是用00001001表示表示09;差;差别仅在高别仅在高4位,位,ASCII码不是码不是0000,而是,而是0011。ASCII码包含码包含52个大、小写英文字母,个大、小写英文字母,10个十进制数字字符,个十进制数字字符,32个个标点符号、运算符号、特殊号,还有标点符号、运算符号、特殊号,还有34个不可显示打印的控制字符编码,个不可显示打印的控制字符编码,一共是一共是128个编码。个编码。像怪沈糕磅苫害搭骡弟擅茫梁挝愁亏燕斜墅目评廷杂卢穿暇寺颓看得村炔运算方法和运算部件运算方法和运算部件2007.7.221计算机组成原理3.2.3
33、 定点数和浮点数表示当所要处理的数含有小数部分时,就有一个如何表示小数点的问题。当所要处理的数含有小数部分时,就有一个如何表示小数点的问题。在计算机中并不用某个二进制位来表示小数点,而是隐含规定小数点的在计算机中并不用某个二进制位来表示小数点,而是隐含规定小数点的位置。若约定小数点的位置是固定的,这就是定点表示法;若给定小数位置。若约定小数点的位置是固定的,这就是定点表示法;若给定小数点的位置是可以变动的,则成为浮点表示法。他们不但关系到小数点的点的位置是可以变动的,则成为浮点表示法。他们不但关系到小数点的问题,而且关系到数的表示范围和精度。问题,而且关系到数的表示范围和精度。1定点数定点数计
34、算机处理的数据不仅有符号,而且大量的数据带有小数,小数点计算机处理的数据不仅有符号,而且大量的数据带有小数,小数点不占有二进制一位而是隐含在机器数里某个固定位置上。通常采取两种不占有二进制一位而是隐含在机器数里某个固定位置上。通常采取两种简单的约定:一种是约定所有机器数的小数的小数点位置隐含在机器数简单的约定:一种是约定所有机器数的小数的小数点位置隐含在机器数的最低位之后,叫定点整数。如的最低位之后,叫定点整数。如小数点位置小数点位置另一种约定所有机器数的小数点隐含在符号位之后、有效部分最高另一种约定所有机器数的小数点隐含在符号位之后、有效部分最高位之前,叫定点小数,如:位之前,叫定点小数,如
35、:小数点位置小数点位置定点整数和定点小数在计算机中的表示形式没什么区别,其小数点定点整数和定点小数在计算机中的表示形式没什么区别,其小数点完全靠事先约定而隐含在不同位置。完全靠事先约定而隐含在不同位置。1001100101011001歉譬主婿纬茬绽肺婶举其颅骏同梗钡迁唬俞瞻吝桶那沫习父建抿仙索丰输运算方法和运算部件运算方法和运算部件2007.7.222计算机组成原理2.浮点数浮点数当要处理的数是既有整数又有小数的混合小数时,采用当要处理的数是既有整数又有小数的混合小数时,采用定点数格式很不方便。为此,人们一般都采用浮点数进行运定点数格式很不方便。为此,人们一般都采用浮点数进行运算。浮点数与科学
36、计数法相似,把一个二进制数通过移动小算。浮点数与科学计数法相似,把一个二进制数通过移动小数点位置表示成阶码和尾数两部分:数点位置表示成阶码和尾数两部分:其中:其中:EN的阶码,是的阶码,是有符号的整数;有符号的整数;SN的尾数,是数值的有效数字部分,一的尾数,是数值的有效数字部分,一般规定取二进制定点小数形式。般规定取二进制定点小数形式。如:如:(101.1101)2=2+30.1011101,(0.01011101)2=2-11011101浮点数的格式如下:浮点数的格式如下:恶恶卑曲沾鄂谆三咆涧嘘友壬固祝昼阿总哼驰乒画宰游袖抠劫阅踪冠原著运算方法和运算部件运算方法和运算部件2007.7.22
37、3计算机组成原理浮点数由阶码和尾数两部分组成,底数浮点数由阶码和尾数两部分组成,底数2在机器在机器数中不出现,是隐含的。其中,阶码一般用补码定数中不出现,是隐含的。其中,阶码一般用补码定点整数表示,尾数一般用补码或原码定点小数表示。点整数表示,尾数一般用补码或原码定点小数表示。为保证不损失有效数字,一般还对尾数进行规格为保证不损失有效数字,一般还对尾数进行规格化处理,即保证尾数的最高位是化处理,即保证尾数的最高位是1,实际大小通过阶,实际大小通过阶码进行调整。后面码进行调整。后面3.4节将对浮点数进行详细介绍。节将对浮点数进行详细介绍。思考思考:计算机中引入浮点数的目的是什么?计算机中引入浮点
38、数的目的是什么?谷狱践万娩迷面龋盆珊擅狼蹿僳老躺济韵索肤紫窜陈佣倍舶冕或拔裔公漫运算方法和运算部件运算方法和运算部件2007.7.224计算机组成原理3.3 二进制数值数据的编码与运算算法3.3.1原码、反码、补码的定义原码、反码、补码的定义1原码原码对于无符号数,原码是一种用数值本身表示的二进制编对于无符号数,原码是一种用数值本身表示的二进制编码。码。对于有符号数,原码是一种以符号和数值表示的二进制对于有符号数,原码是一种以符号和数值表示的二进制编码。有符号数的原码编码规则是:用最高位表示符号,整编码。有符号数的原码编码规则是:用最高位表示符号,整数用数用0表示,负数用表示,负数用1表示。其
39、他位表示该数的绝对值。表示。其他位表示该数的绝对值。例如:例如:X=(+105)X原原=(01101001)2Y=(-105)Y原原=(11101001)2注意:注意:0的原码有两种,即的原码有两种,即+0原原=(00000000)2,-0原原=(10000000)2结论:正数的原码是它本身,负数的原码是真值取绝对结论:正数的原码是它本身,负数的原码是真值取绝对值后,在最高位(左端)补值后,在最高位(左端)补“1”。唉公勋桔歧滑洪肩烫遣烙折长鲁蚕审搏趣搓盔邮晴辣确藩株殴仆弟膘森屁运算方法和运算部件运算方法和运算部件2007.7.225计算机组成原理2反码反码反码使用得较少,它只是补码得一种过渡
40、。反码使用得较少,它只是补码得一种过渡。对于无符号数,反码是一种用对数值按位取反表示的二对于无符号数,反码是一种用对数值按位取反表示的二进制编码。进制编码。对于有符号数,反码是一种用符号位和对数值按位取反对于有符号数,反码是一种用符号位和对数值按位取反表示的二进制编码。有符号数的反码编码规则是:用最高位表示的二进制编码。有符号数的反码编码规则是:用最高位表示符号,正数用表示符号,正数用0表示,负数用表示,负数用1表示。正数的反码是其原表示。正数的反码是其原码本身,负数反码的数值部分是原码的数值部分按位取反。码本身,负数反码的数值部分是原码的数值部分按位取反。例如:例如:+65原原=(01000
41、001)2+65反反=(01000001)2-65原原=(11000001)265反反=(00111110)2注意:注意:0的反码有两种,即的反码有两种,即+0反反=(00000000)2,-0反反=(11111111)2。结论:正数的反码与其原码相同,负数的反码是符号位结论:正数的反码与其原码相同,负数的反码是符号位不变,其余各位按位取反。不变,其余各位按位取反。雌箔逗渗厕箭植个蓝苞尿眷女晕呜荤倚伞次出陇舔重镍垃科篡聘备牵景肺运算方法和运算部件运算方法和运算部件2007.7.226计算机组成原理3补码补码补码是计算机处理有符号数的运算常用的一种方法。对于无符号数,补码是一种用对数值按位取反并
42、加1表示的二进制编码。对于有符号数,补码是一种用符号和对数值按位取反并加1表示的二进制编码。对于n位计算机,某数x的补码定义为:结论结论:正数的补码等于正数本身,负数的补码等于模(即2n)减去它的绝对值,即符号位1不变,数值部分是原码的数值部分按位取反并加1。鲸需锁档腑佳镰迟桩绦支壬阿萧婶恕鸥啃令稻础慰熬易矮塌葫平屡袜陡强运算方法和运算部件运算方法和运算部件2007.7.227计算机组成原理3补码补码补码是计算机处理有符号数的运算常用的一种方法。补码是计算机处理有符号数的运算常用的一种方法。对于无符号数,补码是一种用对数值按位取反并加对于无符号数,补码是一种用对数值按位取反并加1表示的二进制编
43、表示的二进制编码。码。对于有符号数,补码是一种用符号和对数值按位取反并加对于有符号数,补码是一种用符号和对数值按位取反并加1表示的二表示的二进制编码。进制编码。对于对于n位计算机,某数位计算机,某数x的补码定义为:的补码定义为:结论结论:正数的补码等于正数本身,负数的补码等于模(即:正数的补码等于正数本身,负数的补码等于模(即2n)减去)减去它的绝对值,即符号位它的绝对值,即符号位1不变,数值部分是原码的数值部分按位取反并不变,数值部分是原码的数值部分按位取反并加加1。驹此瞥嚣但梦段漾赛曹隔筛张烛应偶叶那莽康际骸胆痴儡琅凑禾择陌锅博运算方法和运算部件运算方法和运算部件2007.7.228计算机
44、组成原理4三种码制的比较三种码制的比较(1)对于正数它们都等于真值本身,而对于负数各有不同的表示;)对于正数它们都等于真值本身,而对于负数各有不同的表示;(2)原码和反码各有两种零的表示法,而补码具有唯一的零。)原码和反码各有两种零的表示法,而补码具有唯一的零。3.3.2补码加、减运算规则补码加、减运算规则在计算机中可进行两种运算:算术运算和逻辑运算。算术运算时,在计算机中可进行两种运算:算术运算和逻辑运算。算术运算时,参与运算的二进制数码表示的是数值大小。常见的算术运算有加、减、参与运算的二进制数码表示的是数值大小。常见的算术运算有加、减、乘、除、乘方、开方等。一般计算机中都提供了加、减、乘
45、、除指令,乘、除、乘方、开方等。一般计算机中都提供了加、减、乘、除指令,其他更复杂的算术运算要利用算术变换成基本的四则运算来实现。从硬其他更复杂的算术运算要利用算术变换成基本的四则运算来实现。从硬件实现的角度看,各种算术运算的基础是加、减运算。对于补码机,加件实现的角度看,各种算术运算的基础是加、减运算。对于补码机,加法运算又是基础的基础。法运算又是基础的基础。补码的加减法运算规则:补码的加减法运算规则:XY补补=X补补+Y补补其中,其中,X、Y为正、负数均可。该式说明,无论加法还是减法运算,为正、负数均可。该式说明,无论加法还是减法运算,都可由补码的加运算实现,运算结果(和或差)也以补码表示
46、。若运算都可由补码的加运算实现,运算结果(和或差)也以补码表示。若运算结果不产生溢出,且最高位(符号位)为结果不产生溢出,且最高位(符号位)为0,则表示结果为正数,最高位,则表示结果为正数,最高位为为1,则结果为负数。,则结果为负数。瞥渗稚迷丘奸邵凋记赂石芳芝蜜频啄堪柳怜屈恶瞎剐鸦洼翼蚂燎袄左振茁运算方法和运算部件运算方法和运算部件2007.7.229计算机组成原理3.3.3补码加减法运算部件补码加减法运算部件根据上节所述,对于减法运算根据上节所述,对于减法运算,因为因为X-Y补补=X+(-Y)补补=X补补+-Y补,所以计算时,可以先求补,所以计算时,可以先求出出-Y的补码,然后再进行加法运算
47、,这样在用逻辑的补码,然后再进行加法运算,这样在用逻辑电路实现减法运算时,可以只考虑用加法电路,而电路实现减法运算时,可以只考虑用加法电路,而不必设置减法电路。实现补码加减运算电路如图不必设置减法电路。实现补码加减运算电路如图3-1所示。图所示。图3-1姻客反蜡严踌诀笔复峪颈兆亭垣掇苯尤览德匆搞作誊暴挥体芝搬阻彤痪妆运算方法和运算部件运算方法和运算部件2007.7.230计算机组成原理在图在图3-1中,被加数(或被减数)中,被加数(或被减数)X和加数(或减数)和加数(或减数)Y分别存放在分别存放在A寄存器和寄存器和B寄存器中。当执行加法运算时,执寄存器中。当执行加法运算时,执行行X补补+Y补,
48、将补,将X补和补和Y补从补从A寄存器和寄存器和B寄存器送到寄存器送到加法器的两个输入端。当执行减法运算时,执行加法器的两个输入端。当执行减法运算时,执行Y补的各补的各位取反(即位取反(即01,10),然后在最低位加然后在最低位加1,即可得,即可得-Y补。补。假设假设Y=0.0011,则,则-Y的真值应等于的真值应等于-0.0011。根据上。根据上述方法,先取述方法,先取Y数中的各位的反值,得数中的各位的反值,得1.1100,然后在最低,然后在最低位加位加1,即,即1.1100+0.0001=1.1101。该值正好是。该值正好是-Y的补码。的补码。在逻辑电路中。在逻辑电路中。ALU由多个全加器及
49、其他电路组成。由多个全加器及其他电路组成。每个全加器有三个输入端,其中一个接收从低位来的进位信每个全加器有三个输入端,其中一个接收从低位来的进位信号,而最低位恰好没有进位信号输入,因此可用来作为号,而最低位恰好没有进位信号输入,因此可用来作为“+1”信号,于是可归纳出以下控制信号:信号,于是可归纳出以下控制信号:码扎你捡绰剔符耀钻雄站斤垮究甥滚天镊泰谱格融矫谩折堤妹汞篓脐峻汞运算方法和运算部件运算方法和运算部件2007.7.231计算机组成原理(1)当执行加法时,应提供的控制信号有:)当执行加法时,应提供的控制信号有:AALU,BALU(从(从B寄存器的各触发器的寄存器的各触发器的“1”端端输
50、出),输出),ALUA。(2)当执行减法时,应提供的控制信号有:)当执行减法时,应提供的控制信号有:ALU,BALU(从寄存器的各触发器的从寄存器的各触发器的“”端端输出输出),ALU+1,ALUA。其中,。其中,ALU+操作可以与加法操作可以与加法操作同时进行,所以总共只需要进行一次加法运算。操作同时进行,所以总共只需要进行一次加法运算。当前大部分计算机字长为当前大部分计算机字长为64位,一般其符号位取位,一般其符号位取1位,位,数值部分取数值部分取61位。位。ALU和寄存器也都为和寄存器也都为64位,最高位产生的位,最高位产生的进位自动丢弃,满足补码定义中有关进位自动丢弃,满足补码定义中有
51、关“mod2”的运算规则,的运算规则,不必另行处理。这在运算结果不超出机器能表示的数的范围不必另行处理。这在运算结果不超出机器能表示的数的范围时,结果是正确的。超出机器数范围的情况称之为溢出。时,结果是正确的。超出机器数范围的情况称之为溢出。思考:思考:计算机采用补码数进行运算的原因是什么?计算机采用补码数进行运算的原因是什么?挫漳满况焊扩虽模孤馈嘘懒坡萝烹付忍糜连劈狗阜织络朴掐嵌搅孔蝎苗咎运算方法和运算部件运算方法和运算部件2007.7.232计算机组成原理3.3.4 定点原码一位乘法运算大家熟知的笔算乘法运算是将乘法运算转换成移位和加大家熟知的笔算乘法运算是将乘法运算转换成移位和加法运算来
52、实现的。但是如果让计算机按笔算乘法运算来实现法运算来实现的。但是如果让计算机按笔算乘法运算来实现乘法运算就会凸现以下主要缺点:乘法运算就会凸现以下主要缺点:(1)四个位积一次相加,机器难以实现;四个位积一次相加,机器难以实现;(2)位积长度增加位积长度增加1倍,浪费硬件资源。倍,浪费硬件资源。下面对笔算乘法运算进行改进:下面对笔算乘法运算进行改进:将将ABA0.10110.1A0.00A0.001A0.0001A0.1A0.00A0.001(A0.1A)0.1(A0.1(0A0.1(A0.1A)0.1(A0.1(0A0.1(A0.1(A0)2-1(A2-1(0A2-1(A2-1(A+0)鞍露更
53、谦猩沃撇壳逾猖苟膳疮恶忌峦益鸽硕刨质钒麻尾非胳四闺浓揣绣心运算方法和运算部件运算方法和运算部件2007.7.233计算机组成原理以上运算过程如下(被加数为0.1101):部分积部分积乘乘 数数0.0000 + 0.1101 10110.1101 0.0110 + 0.1101 10111101 1.0011 0.1001 + 0.0000 11011110 0.1001 0.0100 + 0.1110 11101111 1.0001 0.1000 11111111 旨孙渍踢短彪蔽樟奎术膏舷娜黑堤系身副厨纲苏啥绞违电损蝉痘拇颊吉陪运算方法和运算部件运算方法和运算部件2007.7.234计算机组成
54、原理上式的运算过程步骤可归为如下几点:上式的运算过程步骤可归为如下几点:(1)乘法运算可用移位运算和加法运算实现,当乘法运算可用移位运算和加法运算实现,当4位数乘位数乘4位数时,需要作位数时,需要作4次移位运算和次移位运算和4次加法运次加法运算;算;(2)由乘数的末位值决定乘数是否与部分积相加,由乘数的末位值决定乘数是否与部分积相加,然后右移然后右移1位,形成新的部分积;同时乘数也右移位,形成新的部分积;同时乘数也右移1位,由次低位作为末位值,空出的最高位为部分积位,由次低位作为末位值,空出的最高位为部分积的最低位。的最低位。(3)每次作加法时,被乘数仅仅与原部分积的高每次作加法时,被乘数仅仅
55、与原部分积的高位相加,其低位被移至乘数所空出的高位位置。位相加,其低位被移至乘数所空出的高位位置。暑抖虹核桅皋痹锭实履销舵渗黍绒回摈菩谎纹枚尝搜国备营莎糟嗜橇称勋运算方法和运算部件运算方法和运算部件2007.7.235计算机组成原理对于原码的乘法,原码与真值只差一个符号,符号可以通过两个符号的异对于原码的乘法,原码与真值只差一个符号,符号可以通过两个符号的异或求得:或求得:0 000 111 011 10以小数为例:以小数为例:设设x原原x0x1x2xn设设y原原y0y1y2yn则则x原原y原原x0 y0(0.x0x1x2xn)(0.y0y1y2yn)记:记:x*0.x0x1x2xn,y*0.
56、y0y1y2yn原码一位乘法运算规则:原码一位乘法运算规则:(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次部分积,则上式可表示成递推公式:次部分积,则上式可表示成递推公式:z00z12-1(ynx*z0)z22-1(yn-1x*z1)zi2-1(yn-i+1x*zi-1)zn2-1(y1x*zn-1)污涩总袭璃釉噎杯虽衙伪烛榜羊
57、杖绩奎功荧帜妈收耗延舅誓仆举疏船养福运算方法和运算部件运算方法和运算部件2007.7.236计算机组成原理3.3.5定点原码乘法运算部件定点原码乘法运算部件在计算机内实现原码乘法的逻辑框图如图在计算机内实现原码乘法的逻辑框图如图3-2所示。其所示。其中三个寄存器中三个寄存器A,B,C分别存放部分积、被乘数和乘数,分别存放部分积、被乘数和乘数,ALU主要完成加法运算,移位寄存器对求和结果移位,生成主要完成加法运算,移位寄存器对求和结果移位,生成新的部分积,计数器记录移位次数。运算方法描述如下:新的部分积,计数器记录移位次数。运算方法描述如下:在机器内多个数据一般不能同时相加,一次加法操作在机器内
58、多个数据一般不能同时相加,一次加法操作只能求出两数之和,因此每求得一个相加数,就与上次部分只能求出两数之和,因此每求得一个相加数,就与上次部分积相加。积相加。AALU,BALU信号控制信号控制A、B两个寄存器的数送两个寄存器的数送运算器运算器ALU进行相加。进行相加。人工计算时,相加数逐次向左偏移一位,由于最后的人工计算时,相加数逐次向左偏移一位,由于最后的乘积位数是乘数(或被乘数)的两倍,如按此法在机器中运乘积位数是乘数(或被乘数)的两倍,如按此法在机器中运算,加法器也需增到两倍。观察计算过程很容易发现,在求算,加法器也需增到两倍。观察计算过程很容易发现,在求本次部分积时,前一次部分积的最低
59、位,不再参与运算,因本次部分积时,前一次部分积的最低位,不再参与运算,因此可将前一次部分积的最低位右移一位,移入寄存器此可将前一次部分积的最低位右移一位,移入寄存器C中,中,相加数可直送而不必偏移,于是用相加数可直送而不必偏移,于是用N位加法器就可实现两个位加法器就可实现两个N数相乘。数相乘。雾鄂育棺退轧钠熔盎猛硒啮容楷嘴乓跑鲜跟膳抚色坡澈断丛伶猴几焊乾酋运算方法和运算部件运算方法和运算部件2007.7.237计算机组成原理部分积右移时,乘数寄存器部分积右移时,乘数寄存器C同时右移一位同时右移一位(由(由C/2C信号实现),这样可以用乘数寄存器的信号实现),这样可以用乘数寄存器的最低位来控制相
60、加数(取被乘数或零),同时乘数最低位来控制相加数(取被乘数或零),同时乘数寄存器的最高位可接收部分积右移出来的一位,因寄存器的最高位可接收部分积右移出来的一位,因此,完成乘法运算后,此,完成乘法运算后,A寄存器中保存乘积的高位寄存器中保存乘积的高位部分,乘数寄存器中保存乘积的低位部分。部分,乘数寄存器中保存乘积的低位部分。图图3-2阅迈劝困瑟恒慌胶片淄妄稠菌迭势楔骆凡圆数长岳略砒印颂氮儿惠霓笔糠运算方法和运算部件运算方法和运算部件2007.7.238计算机组成原理3.3.4 定点补码一位乘法运算设被乘数设被乘数x补补x0.x1x2xn,乘数,乘数y补补y0.y1y2yn1当乘数当乘数y为正数时
61、为正数时x补补x0.x1x2xn2+x=2n+1+x(mod2)y补补0.y1y2yny则则x补补y补补x补补y(2n+1+x)y2n+1y+xy由于由于y0.y1y2yn,则,且是一个大于或等于,则,且是一个大于或等于1的的正整数,根据模运算的性质,正整数,根据模运算的性质,2n+1y=2(mod2),故:),故:x补补y补补2n+1y+xy2+xyxy补补即即xy补补x补补y补补x补补y徊拐矾灸慢棱茶筋莱侧汤漳枪怨省州蛇被键玩山隘颂乙烩癸惧披柜佐邯趟运算方法和运算部件运算方法和运算部件2007.7.239计算机组成原理当乘数当乘数y为正数时,可按原码的规则运算。运用为正数时,可按原码的规则
62、运算。运用递推公式:递推公式:z0补补0z1补补2-1(ynx补补z0补补)z2补补2-1(yn-1x补补z1补补)zi补补2-1(yn-i+1x补补zi-1补补)zn补补2-1(y1x补补zn-1补补)xy补补zn补补遍逼苔檬驴鼻疥双磕蛀维瑚胆蓖阻糜窃傣捞卸鸽茎谁韧厄膨电索默狠保吝运算方法和运算部件运算方法和运算部件2007.7.240计算机组成原理2当乘数y为负数时x补补x0.x1x2xny补补1.y1y2yn2y(mod2)则则yy补补21.y1y2yn20.y1y2yn1xyx(0.y1y2yn1)x(0.y1y2yn)x故故xy补补x(0.y1y2yn)x补补-x补补由此可得,当乘数
63、由此可得,当乘数y为负数时,把乘数的补码为负数时,把乘数的补码y补去掉符号位,当成一个正补去掉符号位,当成一个正数与数与x补相乘,然后再加上一个补相乘,然后再加上一个-x补进行校正,运用递推公式表示时:补进行校正,运用递推公式表示时:z0补补0z1补补2-1(ynx补补z0补补)z2补补2-1(yn-1x补补z1补补)zi补补2-1(yn-i+1x补补zi-1补补)zn补补2-1(y1x补补zn-1补补)xy补补zn补补-x补补比较上述两组递推式子,乘数为负数的补码乘法与乘数为正数时完全类似,比较上述两组递推式子,乘数为负数的补码乘法与乘数为正数时完全类似,只需最后加上一项校正项只需最后加上一
64、项校正项-x补即可。补即可。严须赎锁清吸偷埂轮辑痕匡掖兰矾副俱赋硷心囤磺奏都庸诽叹康待账科蜕运算方法和运算部件运算方法和运算部件2007.7.241计算机组成原理思考思考:结合定点原码一位:结合定点原码一位乘法运算的逻辑电路图,请设乘法运算的逻辑电路图,请设计出定点补码一位乘法运算的计出定点补码一位乘法运算的逻辑电路图。逻辑电路图。咆趣挨僳硒洲烬旬鲍砾昼楼箭晨悦拌玉悠抄吼浦屉芥蝇店拦诅玛抵蹋置膛运算方法和运算部件运算方法和运算部件2007.7.242计算机组成原理3.3.5 定点原码一位除法运算通过分析,可以得出笔算除法的特点:通过分析,可以得出笔算除法的特点:(1)每次上商每次上商0或或1靠
65、心算;靠心算;(2)每做一次减法,余数不动,低位补每做一次减法,余数不动,低位补0,再减去右移后,再减去右移后的除数;的除数;(3)商的符号单独处理。商的符号单独处理。如果让计算机按笔算除法运算来实现乘法运算就会凸现如果让计算机按笔算除法运算来实现乘法运算就会凸现以下主要缺点:以下主要缺点:(1)机器不能机器不能“心算心算”上商,必须靠比较(做减法判断上商,必须靠比较(做减法判断符号位);符号位);(2)用左移余数代替右移除数后,得到的余数不是真正用左移余数代替右移除数后,得到的余数不是真正的余数;的余数;(3)上商的写入顺序问题,应写入寄存器的最低位,然上商的写入顺序问题,应写入寄存器的最低
66、位,然后左移;后左移;粘瓮此滨阎颗边讨贷番宙惟开阂栏映揖耶智搬脱郎扩屯耶轧顿敛玲场芬秘运算方法和运算部件运算方法和运算部件2007.7.243计算机组成原理以小数为例:以小数为例:设设x原原x0.x1x2xny原原y0.y1y2ynx/y原原(x0 y0)(0.x1x2xn/0.y1y2yn)记记x*0.x1x2xny*0.y1y2yn小数点定点除法对被除数和除数有一定的约束:小数点定点除法对被除数和除数有一定的约束:0|被除数被除数|除数除数|同时应避免除数或被除数为同时应避免除数或被除数为0。下面对恢复余数法和加减交替法作简单介绍。下面对恢复余数法和加减交替法作简单介绍。瞬配现柔昭可剂私娟
67、屎减肮余袒舰么鳖蔚脾式哦边浮莹祖汕业宏逗熏铱绝运算方法和运算部件运算方法和运算部件2007.7.244计算机组成原理1恢复余数法恢复余数法特点:当余数为负时,需加上除数,恢复成原余数。特点:当余数为负时,需加上除数,恢复成原余数。2加减交替法加减交替法恢复余数法有一个明显的缺点,当某一次恢复余数法有一个明显的缺点,当某一次-Y的查值为负的查值为负是,要多一次是,要多一次Y恢复余数的操作,降低了执行速度,又使恢复余数的操作,降低了执行速度,又使控制线路变得复杂,因此计算机中普遍采用加减交替法来实控制线路变得复杂,因此计算机中普遍采用加减交替法来实现除法运算。加减交替法实现原理如下:现除法运算。加
68、减交替法实现原理如下:当余数当余数Ri0时,上商时,上商“1”,再对,再对Ri左移一位后减除数,左移一位后减除数,即即2Ri-y*;当余数当余数Ri1/R。一般机器规定,若基。一般机器规定,若基为为2并用补码表示尾数,则规格化数的标志为:并用补码表示尾数,则规格化数的标志为:“尾数的符号位和数值部尾数的符号位和数值部分最高位具有不同的代码分最高位具有不同的代码”。这种规定简化了补码表示时规格化数的判。这种规定简化了补码表示时规格化数的判断过程,但使得(断过程,但使得(-1/2)被排除在规格化数的范围之外。按照一般的理)被排除在规格化数的范围之外。按照一般的理解,(解,(-1/2)应该是规格化尾
69、数形式,但因为其编码形式为)应该是规格化尾数形式,但因为其编码形式为1.100,符,符号位和数值部分最高位相同,所以按照对补码表示的尾数的特殊规定,号位和数值部分最高位相同,所以按照对补码表示的尾数的特殊规定,它不是规格化数。因为补码可以表示最小负数它不是规格化数。因为补码可以表示最小负数-1,所以遇到这种情况时,所以遇到这种情况时,可将尾数(可将尾数(-1/2)扩大到原来的)扩大到原来的2倍,即将尾数变为倍,即将尾数变为-1,而使阶码减,而使阶码减1。三牡像什咋砧巷伊坡渣裔砂碳丽旦徐岁淑萧寄宣耸吨嫩饭晃尖慎搅奈骆拆运算方法和运算部件运算方法和运算部件2007.7.255计算机组成原理规格化操
70、作有两种:规格化操作有两种:“左规左规”和和“右规右规”。若采用变形补码。若采用变形补码表示尾数,则当结果的尾数出现表示尾数,则当结果的尾数出现11.1xx.x或或00.0xx.x的形式时,的形式时,需将尾数左移,阶减需将尾数左移,阶减1,直到尾数为规格化数形式为止。这个过程,直到尾数为规格化数形式为止。这个过程称为称为“左规左规”;当浮点运算结果的尾数出现;当浮点运算结果的尾数出现01.xx.x或或10.xx.x的的形式时,并不一定溢出,应先将它右移形式时,并不一定溢出,应先将它右移1位,阶码加位,阶码加1,然后再判,然后再判断阶码是否溢出,这个过程称为断阶码是否溢出,这个过程称为“右规右规
71、”。如下表所示如下表所示32位浮点数格式,任意一个数表示为浮点数时,位浮点数格式,任意一个数表示为浮点数时,必须确定数的符号必须确定数的符号S、尾数、尾数M和阶码和阶码E,要规定它们各自所用的位,要规定它们各自所用的位数、编码方式和所在的位置。而基数数、编码方式和所在的位置。而基数R与定点数的小数点位置一样与定点数的小数点位置一样是默认的,不需要存储。每种计算机的浮点数表示格式各不相同。是默认的,不需要存储。每种计算机的浮点数表示格式各不相同。01783117位:位:7位移码表示的阶码位移码表示的阶码E(偏置常数(偏置常数=64)831位:位:6位位16进制原码小数表示的尾数进制原码小数表示的
72、尾数M数符数符S阶码阶码E尾数尾数M巩楚董凄庇鄂俺碍详腕侠谬惰渴款咋燥发醚楼腾陵腻援矫肃氨滨施亚瞳坏运算方法和运算部件运算方法和运算部件2007.7.256计算机组成原理因为原码和移码都是对称的,故该浮点格式的范围是对于原点对称因为原码和移码都是对称的,故该浮点格式的范围是对于原点对称的。如图的。如图3-4所示。所示。图图3-4浮点数的表示范围浮点数的表示范围在上图中,数轴上有在上图中,数轴上有5个区间的数不能用该浮点数表示。这些区间称个区间的数不能用该浮点数表示。这些区间称为溢出区,接近为溢出区,接近0的区间为下溢区,向无穷大方向延伸的区间为上溢区。的区间为下溢区,向无穷大方向延伸的区间为上
73、溢区。(1)比)比-(1-2-24)2127还小的负数区间是负上溢区;还小的负数区间是负上溢区;(2)比)比-2-129还大的负数区间是负下溢区;还大的负数区间是负下溢区;(3)零)零(4)比)比2-129还小的正数区间是正下溢区;还小的正数区间是正下溢区;(5)比)比(1-2-24)2127还大的正数区间是正上溢区;还大的正数区间是正上溢区;全装啊珊坚恫遭氯迅储倒卞霞角甩假即肚玩悼蜕究榜作热仆坠陈补裤识歉运算方法和运算部件运算方法和运算部件2007.7.257计算机组成原理使用浮点数虽然范围扩大了,但并没有能表示更多的数,实际上使用浮点数虽然范围扩大了,但并没有能表示更多的数,实际上只是这些
74、数在数轴上朝正负两个方向在更大的范围内散开。也就是说浮只是这些数在数轴上朝正负两个方向在更大的范围内散开。也就是说浮点数在数轴上的分布变稀疏了。定点数分布是等距且紧密的,而浮点数点数在数轴上的分布变稀疏了。定点数分布是等距且紧密的,而浮点数分布是不等距且稀疏的,越远离原点越稀疏,如图分布是不等距且稀疏的,越远离原点越稀疏,如图3-5所示所示图图3-5浮点数的密度浮点数的密度在浮点数总位数不变的情况下,其阶码位数越多,则尾数位数(有在浮点数总位数不变的情况下,其阶码位数越多,则尾数位数(有效位数)越少。即:表示的数范围越大,则精度越差(数变稀疏)。既效位数)越少。即:表示的数范围越大,则精度越差
75、(数变稀疏)。既增加范围又增加精度的唯一办法就是使用更多的位。所以,大多数计算增加范围又增加精度的唯一办法就是使用更多的位。所以,大多数计算机都至少提供单精度和双精度两种浮点数格式。浮点数表示的数的范围机都至少提供单精度和双精度两种浮点数格式。浮点数表示的数的范围和精度除了与阶码位数和有效位数有关系以外,基数的大小对范围和精和精度除了与阶码位数和有效位数有关系以外,基数的大小对范围和精度也有影响,基数越大,则范围越大,但精度变低(数变得更稀疏)。度也有影响,基数越大,则范围越大,但精度变低(数变得更稀疏)。所以,对一种固定格式的浮点数而言,更大的基能给出更大的表示范围,所以,对一种固定格式的浮
76、点数而言,更大的基能给出更大的表示范围,但是以牺牲精度为代价的。但是以牺牲精度为代价的。局意摩双搓烩渝眺寄虾娘扦错轿臼氏血稚谆琳退康啄铝盘篮量我钻倾滩无运算方法和运算部件运算方法和运算部件2007.7.258计算机组成原理3.IEEE754浮点数标准浮点数标准浮点数已有标准化的表示方法。被广泛采用的浮点数已有标准化的表示方法。被广泛采用的浮点数编码标准是浮点数编码标准是IEEE754标准。在这个标准中,标准。在这个标准中,提供了提供了32位单精度和位单精度和64位双精度两种格式,如图位双精度两种格式,如图3-6所示。另外,还提供了单、双精度两种格式的扩展所示。另外,还提供了单、双精度两种格式的
77、扩展形式。形式。措译渭铡斩钮履蹭尽拄逼币缴掳替言虽闯胚歉牌蕉香操像戒跪茹涂量验怀运算方法和运算部件运算方法和运算部件2007.7.259计算机组成原理单精度格式:单精度格式:1位符号,位符号,8位阶码,位阶码,23位尾数;位尾数;双精度格式:双精度格式:1位符号,位符号,11位阶码,位阶码,52位尾数;位尾数;格式中,基数隐含为格式中,基数隐含为2;阶码用移码表示,偏置;阶码用移码表示,偏置常数并不是通常常数并不是通常n位移码所用的位移码所用的2n-1,而是(,而是(2n-1-1),即分别为),即分别为127和和1023;尾数用原码表示,利用;尾数用原码表示,利用基数为基数为2的规格化数中的尾
78、数第一位总为的规格化数中的尾数第一位总为1的特点,的特点,在尾数中缺省了第一位的在尾数中缺省了第一位的1,因而单精度格式的,因而单精度格式的23位尾数实际上表示了位尾数实际上表示了24位有效数字。双精度格式的位有效数字。双精度格式的52位尾数实际上表示了位尾数实际上表示了53位有效数字。位有效数字。魁剧厚躲零据差洼掘狂凯碱城炼父黎串秧骄谨塑挥凝慎庆蛀咳戏视神砾帽运算方法和运算部件运算方法和运算部件2007.7.260计算机组成原理3.4.2 浮点数的加减法运算设有两浮点数设有两浮点数X,Y实现实现XY运算,其中:运算,其中:XMx2EX;Y=MY2EY。均为规格化数。均为规格化数。执行以下五步
79、完成运算。执行以下五步完成运算。第第1步:对阶步:对阶对阶的目的就是使X和Y的阶码相等,以提供尾数相加减的可能性。阶码的比较是通过两阶码的减法来实现,统一取大的阶码,小阶码的尾数按两阶码的差值决定右移的数量。可以表示为:E= Ex - Ey 若E0,则EbEy,ExEy,MxMx2Ex-Ey。若E0, 则EbEx,EyEx,MyMy2Ey-Ex。对阶使得原数中较大的阶码成为两数的公共阶码。小阶码的尾数右移时应注意:(1)原码形式的尾数右移时,符号位不参加移位,数值位右移,空出位补0。补码形式的尾数右移时,符号位与数值位一起右移,空出位填补符号位的值。(2)尾数的右移,使得尾数中原来|E |位有
80、效位移出。移出的这些位不要丢掉,应保留,并且参加后 续运算。这对运算结果的精确度有一定影响。这些保留的多余的位数又称为警戒位。回镊左沪盘惰殃棘窝扇凰库劫淀释溺但棍洛者孽流氦眶挂呆姬语疙颇贤咖运算方法和运算部件运算方法和运算部件2007.7.261计算机组成原理第第2步:尾数加减步:尾数加减完成上一步操作、将两数的阶码调整一致后,就可以实现尾数的加、减运算:MbMx My至此,已完成浮点数加、减法运算的基本操作。但是,求得的浮点数结果的形式不能保证一定是规格化的,而且对结果的溢出情况也需进行讨论。因此,浮点数的加、减法运算进入结果的后处理阶段。第第3步:尾数规格化步:尾数规格化假设浮点数的尾数用
81、补码表示,且加、减运算时采用双符号位,则规格化形式的尾数应是如下形式:尾数为正数时:001xxx。其中,高位的00为双符号位,其后的1为最高数值位的值,再后面的数值位的值可以是任意值,这里用x表示。尾数为负数时:110xxx。其中,高位的11为双符号位,其后的0为最高数值位的值,再后面的数值位的值可以是任意值,这里用x表示。智儒拍剩汽云八辆父黔沮哩骨梯蹲樱拿逐肋攫咬剂段需靖兑庸肆钟默盛隐运算方法和运算部件运算方法和运算部件2007.7.262计算机组成原理尾数违反规格化的情况有以下两种可能:(1)尾数加、减法运算中产生溢出。表现为尾数中符号位的异常。正溢出时,符号位为01。负溢出时,符号位为1
82、0。规格化采取的方法是:尾数右移一位,阶码加1。这种规格化就是右规。可以表示为:MbMb*2-1,EbEb+1。(2)尾数的绝对值小于二进制的0.1。补码形式的尾数表现为最高数值位与符号位同值。 此时,规格化采取的方法是:符号位不动,数值位逐次左移,阶码逐次减1,直到满足规格化形式的尾数,即最高数值位与符号位不同值为止。这种规格化就是左规。可以表示为:MbMb*2k,EbEb-k。丑虞觅佑隅杭华早蛆忽缆捣售殷抖恶缚夯潜洪据僧啄彬社佩旺清娃最廷距运算方法和运算部件运算方法和运算部件2007.7.263计算机组成原理第第4步:尾数的舍入处理步:尾数的舍入处理在第2步和第3步的右规中都可能产生警戒位
83、,为提高数据的计算精度,需要对结果尾数进行舍入处理。常用的舍入方法有多种,每种方法都有各自的优点,要根据实际条件进行比较和选择。(1) 0舍1入法这是一种比较简单的舍入方法,相似于十进制中的四舍五入法。警戒位中的最高位为1时,就在尾数末尾加1,警戒位中的最高位为0时,舍去所有的警戒位。这种方法的最大误差为2-(n+1),n为有效尾数位数。(2)恒置1法这是一种简单易行的舍入方法,又称冯诺依曼舍入法。舍入规则是:不论警戒位为何值,尾数的有效最低位恒置1。恒置1法产生的最大误差为2-n,n为有效尾数位数。(3)恒舍法恒舍法对尾数的处理是最简单的,无论警戒位的值是多少,都舍去。尾数的结果就取其有效的
84、n位的值。对正数或负数来说,都是一种趋向原点的舍入,所以,又称为趋向零舍入(Round toward zero)。瞧滁衍肚诵畦汀购啤骨耸垂陀砒放崩胡瀑绩剥黔卜匡租楞间晰赚伙菇扯富运算方法和运算部件运算方法和运算部件2007.7.264计算机组成原理第第5步:检查阶码是否溢出步:检查阶码是否溢出阶码溢出表示浮点数溢出。在规格化和舍人时都可阶码溢出表示浮点数溢出。在规格化和舍人时都可能发生溢出,若阶码正常,加能发生溢出,若阶码正常,加/减运算正常结束。若减运算正常结束。若阶码下溢,则置运算结果为机器零,若上溢,则置阶码下溢,则置运算结果为机器零,若上溢,则置溢出标志。溢出标志。规格化浮点数加减运算
85、流程如图规格化浮点数加减运算流程如图3-7所示。所示。图3-7 规格化浮点数加减运算流程(见下页)露瞄凛窒追姓矿阴澎南晨凭稚嘉唁悦蚤席降艰挽鸵等推至渭啼翻时小轿使运算方法和运算部件运算方法和运算部件2007.7.265计算机组成原理剿邵充瓶描突扦吩琐奈众食戚茂兰梁低粪犀几纤嚣嘱栖案既植煎纤彼蛊猿运算方法和运算部件运算方法和运算部件2007.7.266计算机组成原理【例【例3-20】两浮点数相加,求两浮点数相加,求X+Y。解:解:X和和Y在机器中的浮点补码表示形式为在机器中的浮点补码表示形式为(双符号位双符号位):阶符阶符阶码阶码数符数符尾数尾数X:000100011011011Y:001001
86、101010100计算过程:计算过程:(1)对阶操作)对阶操作阶差阶差E=EX补补+-EY补补=00010+11100=11110X阶码小,阶码小,MX右移右移2位,保留阶码位,保留阶码E=00100。MX补补=000011011011下划线上的数是右移出去而保留的附加位。下划线上的数是右移出去而保留的附加位。(2)尾数相加)尾数相加MX补补+MY补补=000011011011+1101010100=111000101011(3)规格化操作)规格化操作左规,移左规,移1位,结果位,结果=110001010110;阶码;阶码-1,E=00011。轿但蚁沃群诵袖高仇栋帧贱端涌柴芭刨认嗡闲苗嗅捻渊古
87、九瑰箍凡掌人面运算方法和运算部件运算方法和运算部件2007.7.267计算机组成原理(4)舍入)舍入附加位最高位为附加位最高位为1,在所得结果的最低位,在所得结果的最低位+1,得到新结果:,得到新结果:M补补=1100010110,M=0.11101010。(5)判溢出)判溢出阶码符号位为阶码符号位为00,故不溢出,最终结果为:,故不溢出,最终结果为:X+Y=2011(011101010)思考:思考:结合实例,请总结浮点运算的阶码采用移码的优点有那结合实例,请总结浮点运算的阶码采用移码的优点有那些?些?杭值村虞厕说汾侣彭翅密俄净甲哪樱骇链裔窒娩钾薄嫡拓异卷观诞绎澜滇运算方法和运算部件运算方法和
88、运算部件2007.7.268计算机组成原理3.4.3 浮点数的乘法运算两浮点数相乘,其乘积的阶码为相乘两数阶码之和,两浮点数相乘,其乘积的阶码为相乘两数阶码之和,其尾数应为相乘两数的尾数之积。两个浮点数相除,商的其尾数应为相乘两数的尾数之积。两个浮点数相除,商的阶码为被除数的阶码减去除数的阶码得到的差,尾数为被阶码为被除数的阶码减去除数的阶码得到的差,尾数为被除数的尾数除数的尾数所得的商。参加运算的两个数都为除数的尾数除数的尾数所得的商。参加运算的两个数都为规格化浮点数。乘除运算都有可能出现结果不满足规格化规格化浮点数。乘除运算都有可能出现结果不满足规格化要求的问题,因此也必须进行规格化、舍入
89、和判溢出等操要求的问题,因此也必须进行规格化、舍入和判溢出等操作。规格化时要修改阶码。作。规格化时要修改阶码。1浮点数的阶码运算浮点数的阶码运算阶码运算需要检查结果是否溢出。在计算机中,阶阶码运算需要检查结果是否溢出。在计算机中,阶码通常用补码或移码形式表示。补码运算规则已在前面说码通常用补码或移码形式表示。补码运算规则已在前面说明。这里讨论移码的运算规则和判定溢出的方法。明。这里讨论移码的运算规则和判定溢出的方法。无脂犯民邑逢颊蚊电仰农耸秧层熏巢禽信雹肯场骤商甲疚诉露多紫宦冯板运算方法和运算部件运算方法和运算部件2007.7.269计算机组成原理当阶码由当阶码由1位符号位和位符号位和n位数据
90、组成时,其移码的定义位数据组成时,其移码的定义为:为:X移移=2n+X(2nX2n)按此定义,则有按此定义,则有:X移移+Y移移=2n+X+2n+Y=2n+(2n+(X+Y)=2n+X+Y移移即直接用移码实现求阶码之和时,结果的最高位多加了即直接用移码实现求阶码之和时,结果的最高位多加了个个1,要得到移码形式的结果,需对结果的符号取反。,要得到移码形式的结果,需对结果的符号取反。根据补码定义:根据补码定义:Y补补=2n+1+Ymod2n+1对同一个数值,移码和补码的数值位完全相同,而符号对同一个数值,移码和补码的数值位完全相同,而符号位正好相反。因此求阶码和位正好相反。因此求阶码和(移码表示移
91、码表示)可用如下方式完成:可用如下方式完成:X移移+Y补补=2n+X+2n+1+Y=2n+1+(2n+(X+Y)=X+Y移移mod2n+1同理有同理有X移移+Y补补=XY移。移。宁膏团江韭幸调忻奈搅寥土卯佬蹋冀状管很妖墩华儡纽跳意吝哗厚坟组懒运算方法和运算部件运算方法和运算部件2007.7.270计算机组成原理2浮点乘法运算步骤浮点乘法运算步骤下面举例说明浮点乘法的运算步骤。下面举例说明浮点乘法的运算步骤。【例【例3-21】阶码阶码4位位(移码移码),尾数,尾数8位位(补码,含补码,含1符号符号位位),阶码以,阶码以2为底。运算结果仍取为底。运算结果仍取8位尾数。位尾数。设:设:X250111
92、0011,Y23(01110010)X,Y为真值,此处阶码用十进制表示,尾数用二进制表为真值,此处阶码用十进制表示,尾数用二进制表示。运算过程中阶码取双符号位。示。运算过程中阶码取双符号位。(1)求乘积的阶码。乘积的阶码为两数阶码之和。)求乘积的阶码。乘积的阶码为两数阶码之和。EX+EY移移=EX移移+EY补补00011+0001100110(2)尾数相乘。用定点数相乘的办法,此处仅列出结)尾数相乘。用定点数相乘的办法,此处仅列出结果,不进行详细计算。果,不进行详细计算。XY补补=1.00110011001010(尾数部分)(尾数部分)高位部分高位部分低位部分低位部分毙碰什瞅陕敷弟振壤详囤揖辕
93、厩粮卓碟馋耻恳妖博律周岳宗败渡识孜嗅榔运算方法和运算部件运算方法和运算部件2007.7.271计算机组成原理(3)规格化处理。本例尾数已规格化,不需要再处理。如未规格化,)规格化处理。本例尾数已规格化,不需要再处理。如未规格化,需左规。需左规。(4)舍入。尾数)舍入。尾数(乘积乘积)低位部分的最高为低位部分的最高为1,需要舍入,在乘积高,需要舍入,在乘积高位部分的最低位加位部分的最低位加1因此因此XY补补10011010(尾数部分尾数部分)(5)判溢出。阶码未溢出,故结果为正确。)判溢出。阶码未溢出,故结果为正确。XY:011010011010阶码阶码(移码移码)尾数尾数(补码补码)XY=2-
94、2(0.1100110)说明:浮点数除法运算步骤与乘法运算类似,也分求商的阶码、尾说明:浮点数除法运算步骤与乘法运算类似,也分求商的阶码、尾数相除、规格化、舍入判溢出数相除、规格化、舍入判溢出5个步骤,不再详细讨论。个步骤,不再详细讨论。3浮点运算部件浮点运算部件通常由阶码运算部件和尾数运算部件组成,其各自的结构与定点运通常由阶码运算部件和尾数运算部件组成,其各自的结构与定点运算部件相似。但阶码部分仅执行加减法运算。其尾数部分则执行加减乘算部件相似。但阶码部分仅执行加减法运算。其尾数部分则执行加减乘除运算,左规时有时需要左移多位。为加速移位过程,有的机器设置了除运算,左规时有时需要左移多位。为
95、加速移位过程,有的机器设置了可移动多位的电路。可移动多位的电路。抉捅牵吸蘸植崎严锋矛毫佳羡厚审坍妻疼穗掺脾绥数殷课绩方耽诺窥析姬运算方法和运算部件运算方法和运算部件2007.7.272计算机组成原理3.6数据校验码数据校验码计算机系统中的数据,在读写、存取和传送的过程中可计算机系统中的数据,在读写、存取和传送的过程中可能产生错误。为减少和避免这类错误,一方面是精心设计各能产生错误。为减少和避免这类错误,一方面是精心设计各种电路,提高计算机硬件的可靠性;另一方面是在数据编码种电路,提高计算机硬件的可靠性;另一方面是在数据编码上找出路,即采用某种编码法,通过少量的附加电路,使之上找出路,即采用某种
96、编码法,通过少量的附加电路,使之能发现某些错误,甚至能确定出错位置,进而实现自动改错能发现某些错误,甚至能确定出错位置,进而实现自动改错的能力。的能力。数据校验码是一种常用的带有发现某些错误或自动改错数据校验码是一种常用的带有发现某些错误或自动改错能力的数据编码方法。它的实现原理,是加进一些冗余码,能力的数据编码方法。它的实现原理,是加进一些冗余码,使合法数据编码出现某些错误时,就成为非法编码。这样,使合法数据编码出现某些错误时,就成为非法编码。这样,就可以通过检测编码的合法性来达到发现错误的目的。就可以通过检测编码的合法性来达到发现错误的目的。码距是根据任意两个合法码之间至少有几个二进制位不
97、码距是根据任意两个合法码之间至少有几个二进制位不相同而确定的,仅有一位不同,称其码距为相同而确定的,仅有一位不同,称其码距为1。常用的数据校验码主要有奇偶校验码、海明校验码和循常用的数据校验码主要有奇偶校验码、海明校验码和循环冗余校验码环冗余校验码旗弱驳衅粟品手央湍茂栖止陪澄咯摧僳夫军寻索孔汪钧抠钙涟镍衣玖悼柏运算方法和运算部件运算方法和运算部件2007.7.273计算机组成原理3.6.1 奇偶校验码奇偶校验码是一种开销最小,能发现数据代码中一位错奇偶校验码是一种开销最小,能发现数据代码中一位错情况的编码,常用于存储器读写检查,或情况的编码,常用于存储器读写检查,或ASCII字符传送过字符传送
98、过程中的检查。奇偶校验法的基本思想是通过在原数据信息中程中的检查。奇偶校验法的基本思想是通过在原数据信息中增加一位奇校验位(或偶校验位),然后将原数据和得到的增加一位奇校验位(或偶校验位),然后将原数据和得到的奇(偶)校验位一起进行存取或传送,对存取后或在传送的奇(偶)校验位一起进行存取或传送,对存取后或在传送的目标部件得到的相应数据和奇(偶)校验位,再进行一次编目标部件得到的相应数据和奇(偶)校验位,再进行一次编码,求出新的奇校验位(或偶校验位),最后根据得到的这码,求出新的奇校验位(或偶校验位),最后根据得到的这个新的校验位的值,确定是否发生了错误。个新的校验位的值,确定是否发生了错误。奇
99、偶校验码的实现原理如下:假设将数据奇偶校验码的实现原理如下:假设将数据B=bn-1bn-2.b1b0从源部件传送至目标部件。在终部件接收到的数据从源部件传送至目标部件。在终部件接收到的数据为为B=bn-1bn-2.b1b0。为了判断数据。为了判断数据B在传送中是否发在传送中是否发生了错误,可以按照如下步骤,通过最终得到的奇(偶)校生了错误,可以按照如下步骤,通过最终得到的奇(偶)校验位验位P*来判断是否发生了数据传送错误。来判断是否发生了数据传送错误。明扭奎灵啪萝姑能浆措愉敢锤啊任泵造愁娇瞧妒熏唆宋焰啊傅剃蹋窄稚锭运算方法和运算部件运算方法和运算部件2007.7.274计算机组成原理第第1步:
100、在源部件求出奇(偶)校验位步:在源部件求出奇(偶)校验位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。若采用奇校验位,则若采用奇校验
101、位,则P=bn-1 bn-2 . b1 b0 1。若采用偶校验位,则若采用偶校验位,则P=bn-1 bn-2 . b1 b0。第第3步:计算最终的校验位步:计算最终的校验位P*,并根据其值判断有无奇偶错。,并根据其值判断有无奇偶错。P与与B是一起从源部件传到目标部件的,假定是一起从源部件传到目标部件的,假定P在目标部件接受到的在目标部件接受到的值为值为P,则采用异或操作,则采用异或操作P*=P P,对,对P和和P进行下列比较,确定有无进行下列比较,确定有无奇偶错:奇偶错:(1)若若P*=1,则表示目标部件接受的数据有奇数位错。,则表示目标部件接受的数据有奇数位错。(2)若若P*=0,则表示目标
102、部件接受的数据正确或有偶数个错。,则表示目标部件接受的数据正确或有偶数个错。猾淌烩虎陪伤药汛朴恶茫碘辰纯克伶宏沿陡樊慢卵枪在蜂迫壕枪郑烬躯泉运算方法和运算部件运算方法和运算部件2007.7.275计算机组成原理在奇偶校验码中,若两个数据中有奇数位不同,则它们相应的校验在奇偶校验码中,若两个数据中有奇数位不同,则它们相应的校验位就不同;若有偶数位不同,则虽校验位相同,但至少有两位数据位不位就不同;若有偶数位不同,则虽校验位相同,但至少有两位数据位不同。因而任意两个码字之间至少有两位不同,所以码距同。因而任意两个码字之间至少有两位不同,所以码距d=2。因而只能。因而只能发现奇数位出错,不能发现偶数
103、位出错,而且也不能确定发生错误的位发现奇数位出错,不能发现偶数位出错,而且也不能确定发生错误的位置,因而不具有纠错能力。图置,因而不具有纠错能力。图3-8奇偶校验位的形成及校验奇偶校验位的形成及校验呼法悍苯剑老栖达啃掂英蔓纷僧源莆韭恒筹菌撕撤冤丝孕权样狗赖余撒凯运算方法和运算部件运算方法和运算部件2007.7.276计算机组成原理3.6.2 海明校验码海明校验码是由海明校验码是由RichardHamming于于1950年提出的目年提出的目前还被广泛使用的一种数据校验码。它主要用于存储器中数前还被广泛使用的一种数据校验码。它主要用于存储器中数据存取校验。前面所述的奇偶校验码对整个数据编码生成一据
104、存取校验。前面所述的奇偶校验码对整个数据编码生成一位校验位。因此这种校验码检错能力差,并且没有纠错能力。位校验位。因此这种校验码检错能力差,并且没有纠错能力。如果将整个数据按某种规律分成若干组,对每组进行相应的如果将整个数据按某种规律分成若干组,对每组进行相应的奇偶检测,就能提供多位检错信息,从而对错误位置进行定奇偶检测,就能提供多位检错信息,从而对错误位置进行定位,并将其纠正。海明校验码实质上就是一种多重奇偶校验位,并将其纠正。海明校验码实质上就是一种多重奇偶校验码。码。海明校验码的处理过程与上面给出的一般过程一样。最海明校验码的处理过程与上面给出的一般过程一样。最终进行比较时,按位进行异或
105、操作,根据异或操作的结果,终进行比较时,按位进行异或操作,根据异或操作的结果,确定是否发生了差错。这种异或操作所得到的结果称为故障确定是否发生了差错。这种异或操作所得到的结果称为故障字(字(syndromeword)。显然,校验位和故障字的位数是相)。显然,校验位和故障字的位数是相同的同的瞒档科卧挡摆斩搏咏盖任缮耽获蔗介寅淆滞昭庭辙折疾堕辖她凝衡陈歹人运算方法和运算部件运算方法和运算部件2007.7.277计算机组成原理1.校验位位数的确定校验位位数的确定假设校验位的个数为假设校验位的个数为r。则它能表示。则它能表示2r个信息,个信息,用其中的一个信息指出用其中的一个信息指出“没有错误没有错误
106、”,其余的,其余的2r-1个信息指出错误发生在哪一位。然而错误也可能发个信息指出错误发生在哪一位。然而错误也可能发生在校验位,因此只有生在校验位,因此只有k2r-1-r个信息能用于纠正个信息能用于纠正被传送数据的位数,也就是说要满足关系:被传送数据的位数,也就是说要满足关系:2rk+r+1(公式公式1)如要能检测与自动校正一位错,并发现两位错,如要能检测与自动校正一位错,并发现两位错,此时校验位的位数此时校验位的位数r和数据位的位数和数据位的位数k是应满足下述是应满足下述关系:关系:2r-1k+r(公式公式2)讯妄搂度锯收毗眯酞吮婴臭岭坦孔鲤廖秀泳酮让政禁粱缸散干祈娥妻觉标运算方法和运算部件运
107、算方法和运算部件2007.7.278计算机组成原理2分组方式的确定分组方式的确定数据位和校验位是一起被存储的,通过将它们中的各位按某种数据位和校验位是一起被存储的,通过将它们中的各位按某种方式排列为一个方式排列为一个n+k的码字,将该字中每一位的出错位置与故障字的码字,将该字中每一位的出错位置与故障字的数值建立关系,这样就可通过故障字的值很快确定是该码字中的数值建立关系,这样就可通过故障字的值很快确定是该码字中的哪一位发生了错误,并能很容易地将其取反来纠正。的哪一位发生了错误,并能很容易地将其取反来纠正。根据上述基本思想,我们按以下规则来解释各故障字的值。根据上述基本思想,我们按以下规则来解释
108、各故障字的值。(1)如果故障字各位全部是)如果故障字各位全部是0,则表示没有发生错误。,则表示没有发生错误。(2)如果故障字中有且仅有一位为)如果故障字中有且仅有一位为1,则表示校验位中有一位,则表示校验位中有一位出错,不需要纠正。出错,不需要纠正。(3)如果故障字中多位为)如果故障字中多位为1,则表示有一个数据位出错,其在,则表示有一个数据位出错,其在码字中的出错位置由故障字的数值来确定。纠正时只要将出错位码字中的出错位置由故障字的数值来确定。纠正时只要将出错位取反即可。取反即可。为了介绍海明校验码的原理,以为了介绍海明校验码的原理,以8位数据进行检测与自动校正位数据进行检测与自动校正一位错
109、的代码为例说明。假定一个一位错的代码为例说明。假定一个8位数据位数据M=D8D7D6D5D4D3D2D1,K=8,根据公式根据公式1可以计算出可以计算出r4,8位数位数据需要据需要4位校验位,其相应的位校验位,其相应的4位校验位为位校验位为P=P4P3P2P1,所以可,所以可知海明码共知海明码共12位(位(k+r)。)。豁处逢善矩埔敞铺旧膘张桑浴扭唯湾桨萄夷慈址售遥抬哗鉴逊仰珐当关苫运算方法和运算部件运算方法和运算部件2007.7.279计算机组成原理假若海明码表示为假若海明码表示为MHmHm-1H2H1,其最高位号,其最高位号为为m,最低位号为,最低位号为1,则此海明码的编码规律通常是:,则
110、此海明码的编码规律通常是:(1)校验位与数据位之和为校验位与数据位之和为m,每个校验位,每个校验位Pi在海明码在海明码中被分在位号中被分在位号2i-1位置,其余各位为数据位,并按从低向高位置,其余各位为数据位,并按从低向高逐位依次排列的关系分配各数据位逐位依次排列的关系分配各数据位。(2)海明码的每一位码海明码的每一位码Hi(包括数据位和校验位本身包括数据位和校验位本身)由由多个校验位校验,其关系是被校验的每一位位号要等于校验多个校验位校验,其关系是被校验的每一位位号要等于校验它的各校验位的位号之和。这样安排的目的,是希望校验的它的各校验位的位号之和。这样安排的目的,是希望校验的结果能正确反映
111、出出错位的位号。结果能正确反映出出错位的位号。按上述规律按上述规律8个二进制数据位的海明码可表示为:个二进制数据位的海明码可表示为:H12H11H3H2H14个校验位个校验位P4P1对应的海明码位号应分别为对应的海明码位号应分别为H8,H4,H2和和H1,满足,满足Pi的位号等于的位号等于2i-1的关系。其余为数据位的关系。其余为数据位Di,则,则H12H1有如下排列关系:有如下排列关系:D8D7D6D5P4D4D3D2P3D1P2P1翌拂郡赛桔毅汀掉煌袜戊萤诫借棍仿敲违央烁驴榷凯恫崭予邀摩肢秦恬颓运算方法和运算部件运算方法和运算部件2007.7.280计算机组成原理按照前面叙述的规则解释上述
112、编码,将数据按照前面叙述的规则解释上述编码,将数据D和校验位和校验位P按照一定的规律排到一个按照一定的规律排到一个12位的码字中。根据上述第一个位的码字中。根据上述第一个规则,故障字为规则,故障字为0000时,表示无错,因此没有和位置号时,表示无错,因此没有和位置号0000对应的出错情况,所以位置号从对应的出错情况,所以位置号从0001开始。根据第二开始。根据第二个规则,故障字中有且仅有一位为个规则,故障字中有且仅有一位为1时,表示校验位中有一时,表示校验位中有一位出错,此时,故障字只可能是位出错,此时,故障字只可能是0001、0010、0100、1000四种情况,将这四种状态分别代表校验位中
113、第四种情况,将这四种状态分别代表校验位中第P1、P2、P3、P4位发生错误的情况,因此,校验位位发生错误的情况,因此,校验位P1、P2、P3、P4应分应分别位于码字的第别位于码字的第0001、0010、0100、1000位。根据最后一位。根据最后一个规则,将其他多位为个规则,将其他多位为1的故障字依次表示数据位的故障字依次表示数据位D1D8发发生错误的情况。因此,数据位生错误的情况。因此,数据位D1D88应分别位于码字的第应分别位于码字的第0011、0101、0110、0111、1001、1010、1011、1100位。位。料疵躬参舷杆份坛券旋叭能忆冲釜袍浅萧膘诛非桌桅医颗终辫竣资难袄会运算方
114、法和运算部件运算方法和运算部件2007.7.281计算机组成原理3校验位的生成和检错、纠错分组完成后,就可对每组采用相应的奇(偶)校验,以得到相应分组完成后,就可对每组采用相应的奇(偶)校验,以得到相应的一个校验位。如的一个校验位。如P1参与对数据位参与对数据位Dl,D2,D4,D5和和D7的校验,的校验,P4参参与对与对D5D6D7和和D8的校验等等。假定采用偶校验(即取校验位的校验等等。假定采用偶校验(即取校验位Pi,使,使对应组中有偶数个对应组中有偶数个1),则得到校验位与数据位之间存在如下关系:),则得到校验位与数据位之间存在如下关系:P1=Dl D2 D4 D5 D7(3.1)P2=
115、Dl D3 D4 D6 D7(3.2)P3=D2 D3 D4 D8(3.3)P4=D5 D6 D7 D8(3.4)注意:如果要分清是两位出错还是一位出错,还要补充一个注意:如果要分清是两位出错还是一位出错,还要补充一个P5总总校验位,使校验位,使P5D8 D7 D6 D5 D4 D3 D2 D1 P5 P4 P3 P2 P1在上面式子中,每一位数据位都至少出现在在上面式子中,每一位数据位都至少出现在3个个Pi值的形成关系中。值的形成关系中。当任一位数据码发生变化时,必将引起当任一位数据码发生变化时,必将引起3个或个或4个个Pi值跟着变化。值跟着变化。兆隐翼俄俘馅涟译译巾谍穷虚哉皇羊祷辣否磷腐茎
116、祖祈卿实巴汽驻珐盂蔫运算方法和运算部件运算方法和运算部件2007.7.282计算机组成原理假如故障字假如故障字S=S4S3S2S1,根据,根据S的值可以确定是没有发生错误,的值可以确定是没有发生错误,还是仅校验位发生错误,还是哪一个数据位发生了错误。结合式子还是仅校验位发生错误,还是哪一个数据位发生了错误。结合式子(3.1)(3.4)可得到故障字和海明码偶校验关系如下:可得到故障字和海明码偶校验关系如下:S1=P1 D1 D2 D4 D5 D7(3.5)S2=P2 D1 D3 D4 D6 D7(3.6)S3=P3 D2 D3 D4 D8(3.7)S4=P4 D5 D6 D7 D8(3.8)S5
117、=P5 P4 P3 P2 P1 D8 D7 D6 D5 D4 D3 D2 D1(3.9)则校验得到的结果值则校验得到的结果值S4S1能反映能反映12位海明码的出错情况。位海明码的出错情况。注意:如果要发现两位出错必须使用注意:如果要发现两位出错必须使用S5=P5 P4 P3 P2 P1 D8 D7 D6 D5 D4 D3 D2 D1公式计算出公式计算出S5,任何,任何偶数个数出错,偶数个数出错,S5一定为一定为0,因此可区分两位出错或一位出错。,因此可区分两位出错或一位出错。恩冒吴恰芥屈稍绚釜肿馅疫褪矾寺速少应磺蝉崔雍迂剿樊屿戍籽岔辆氖箭运算方法和运算部件运算方法和运算部件2007.7.283
118、计算机组成原理图图3-9是是H12,数据位,数据位k8,校验位,校验位r=4的海的海明校验线路,记作明校验线路,记作(12,8)分组码。分组码。图图3-9(12,8)分组码海明校验框图分组码海明校验框图猖饯赎碗宝卢拓檄存钟敏这攘拔昼酷锦隔航锨扩乌民刑苯烽秒陌草澜细屑运算方法和运算部件运算方法和运算部件2007.7.284计算机组成原理3.6.3循环冗余校验(CRC)码循环冗余校验码(循环冗余校验码(CyclicRedundancyCheck),简),简称称CRC码,是一种具有很强检错、纠错能力的校验码。循环码,是一种具有很强检错、纠错能力的校验码。循环冗余校验码常用于外存储器的数据校验,在计算
119、机通信中,冗余校验码常用于外存储器的数据校验,在计算机通信中,也被广泛采用。在数据传输中奇偶校验码是在每个字符信息也被广泛采用。在数据传输中奇偶校验码是在每个字符信息后增加一位奇偶校验位来进行数据校验的,这样对大批量传后增加一位奇偶校验位来进行数据校验的,这样对大批量传输数据进行校验时,会增加大量的额外开销,尤其是在网络输数据进行校验时,会增加大量的额外开销,尤其是在网络通信中,传输的数据信息都是二进制比特流,因而没有必要通信中,传输的数据信息都是二进制比特流,因而没有必要将数据再分解成一个个字符,这样也就无法采用奇偶校验码,将数据再分解成一个个字符,这样也就无法采用奇偶校验码,因此,通常采用
120、因此,通常采用CRC码进行校验。码进行校验。CRC码可以发现并纠正信息存储或传送过程中连续出现码可以发现并纠正信息存储或传送过程中连续出现的多位错误,其实现方法主要是的多位错误,其实现方法主要是在在k位信息码之后拼接位信息码之后拼接r位位校验码。应用校验码。应用CRC码的关键是如何从码的关键是如何从k位信息位简便地得到位信息位简便地得到r位校验位位校验位(编码编码),以及如何从,以及如何从k+r位信息码判断是否出错。位信息码判断是否出错。因为因为CRC码的编码原理复杂,它是通过某种数学运算来码的编码原理复杂,它是通过某种数学运算来建立数据和校验位之间的约定关系,这里仅对其编码方式和建立数据和校
121、验位之间的约定关系,这里仅对其编码方式和实现过程作简单介绍,而不详细进行数学推导。实现过程作简单介绍,而不详细进行数学推导。书巷旷禹赵蹬悼歌庞拎欺赣骏掩酉莎禾珍昌钞琅养诗卞赁胃挟亭聘晾不账运算方法和运算部件运算方法和运算部件2007.7.285计算机组成原理1模模2运算运算先介绍先介绍CRC码编码用到的模码编码用到的模2运算。运算。模模2运算是指以按位模运算是指以按位模2相加为基础的四则运算,运算时相加为基础的四则运算,运算时不考虑进位和借位。不考虑进位和借位。(1)模模2加减:即按位加,可用异或逻辑实现。模加减:即按位加,可用异或逻辑实现。模2加与加与模模2减的结果相同,减的结果相同,即即0
122、0=0,01=1,10=1,11=0。两个相同的数据。两个相同的数据的模的模2和为和为0。(2)模模2乘乘按模按模2加求部分积之和加求部分积之和.例如:例如:1110)110000011101110100100渣颠肯淘两喊匣踊蔼范团将亡鹅畦箔履搬琢靳盏行幼够警键粹桃散胀锦邹运算方法和运算部件运算方法和运算部件2007.7.286计算机组成原理(3)模模2除除按模按模2减求部分余数。每求一位商应使部减求部分余数。每求一位商应使部分余数减少一位。上商的原则是:当部分余数的首位为分余数减少一位。上商的原则是:当部分余数的首位为1时,时,商取商取1;当部分余数的首位为;当部分余数的首位为0时,商取时,
123、商取0。当部分的余数的。当部分的余数的位数小于除数的位数时,该余数即为最后余数。位数小于除数的位数时,该余数即为最后余数。110商商1101101101110111001101001100000011R余数余数弓倘撼惠头恍秋汞梭疗联辫饰秉馏钎斧虹翼氨亦蛤赖针想咸沦涵代侮道蛤运算方法和运算部件运算方法和运算部件2007.7.287计算机组成原理2.CRC码的编码方法码的编码方法CRC码的编码方法是在纠错编码代数中,把以二进制数字表码的编码方法是在纠错编码代数中,把以二进制数字表示的一个数据系列看成一个多项式。例如,可将待编码的示的一个数据系列看成一个多项式。例如,可将待编码的k位有位有效信息位组
124、表达为多项式效信息位组表达为多项式M(x):M(x)=Ck-1Xk-1+Ck-2Xk-2+CiXi+C1X+C0式中式中Ci为为0或或1。若将信息位组左移若将信息位组左移r位,则可表示为多项式位,则可表示为多项式M(x)Xr。这样就。这样就可以空出可以空出r位,以便拼接位,以便拼接r位校验位,即:位校验位,即:n=(k+r)位,如表位,如表3-10所所示。示。信息位组信息位组k k位位左移左移r r位位k k位位+ r+ r位位表表3-10信息位组左移信息位组左移r位情况表位情况表煞煌莆获腋盆影绞鸥份抄欺耶肾捕币侣贡胀辜镍鹊蚕郭染刽抵闲蔬热衙熊运算方法和运算部件运算方法和运算部件2007.7.
125、288计算机组成原理设所得余数表达为设所得余数表达为R(x),商为,商为Q(x)。将余数拼接在信息。将余数拼接在信息位组左移位组左移r位空出的位空出的r位上,就构成这个有效信息的位上,就构成这个有效信息的CRC码。码。这个这个CRC码可用多项式表达为:码可用多项式表达为:M(x)Xr+R(x)=Q(x)G(x)+R(x)+R(x)=Q(x)G(x)+R(x)+R(x)=Q(x)G(x)因此所得因此所得CRC码可被码可被G(x)表示的数码除尽。表示的数码除尽。【例【例3-22】对】对4位有效信息位有效信息(1001)求循环校验编码,选求循环校验编码,选择生成多项式择生成多项式(1101)。涪灰毡
126、摩棒弹帕泼逾兼篆眶棋墓异颅迭挨峰吧胁腋淋挚捶怒钵扫汕沾矢返运算方法和运算部件运算方法和运算部件2007.7.289计算机组成原理M(x)=X3+1=1001(k=4)M(x)X3=X6+X3=1001000(左移左移r=3位位)G(x)=X3+X2+1=1101(r+1=4位位)(模模2除除)M(x)X31001000011=1111+G(x)11011101所以所以R(x)=011M(x)X3+R(x)=1001000+010=1001011(模模2加加)上面循环校验码中上面循环校验码中n=7,k=4,称为,称为(7,4)码码说明:生成多项式不是随意设定的,也不是唯一的,上面例子中生说明:生
127、成多项式不是随意设定的,也不是唯一的,上面例子中生成多项式使用成多项式使用1101,也可以用,也可以用1011,但使用,但使用1011时,计算出的时,计算出的R(x)=110,则,则(7,4)码为:码为:1001110。痢罢揭钒梭针涵蛮伪钝豢钵谨离响卧宗猩惹自裁敛叼行帧孪持斋怔谷磁眶运算方法和运算部件运算方法和运算部件2007.7.290计算机组成原理3CRC码的纠错码的纠错在接收方将收到的在接收方将收到的CRC码用约定的生成多项式码用约定的生成多项式G(x)去去除,如果码字没有错误,则余数除,如果码字没有错误,则余数为为0,若有一位出错,则余数不为,若有一位出错,则余数不为0,而且不同的出错
128、,而且不同的出错位置其余数不同。更换不同的码字,余数和出错位的关系不位置其余数不同。更换不同的码字,余数和出错位的关系不变。只和码制与生成多项式有关。例如,表变。只和码制与生成多项式有关。例如,表3-11给出了(给出了(7,4)循环码中生成多项式)循环码中生成多项式G(x)=1011时出错位置与余数的关时出错位置与余数的关系。表中给出两种不同的码字,可以看出其出错位置与余数系。表中给出两种不同的码字,可以看出其出错位置与余数的关系是相同的。对于其他码制或选用其他生成多项式,出的关系是相同的。对于其他码制或选用其他生成多项式,出错位置与余数的关系可能发生改变。错位置与余数的关系可能发生改变。茨羡
129、迹搅纷砌芋瘴歹验焦律蹄眠氛锣终茬辈拂诗谎埃功扮坏炮篷彰在胚盾运算方法和运算部件运算方法和运算部件2007.7.291计算机组成原理如果循环码有一位出错,用如果循环码有一位出错,用G(x)作模作模2除将得到一个不除将得到一个不为为0的余数。如果对余数补的余数。如果对余数补1个个0继续除下去,我们将发现一继续除下去,我们将发现一个现象:各次余数将按表个现象:各次余数将按表3-11顺序循环。例如第七位出错,顺序循环。例如第七位出错,余数将为余数将为001,补,补0后再除,第二次余数为后再除,第二次余数为010,以后依次为,以后依次为100,011,反复循环,这是一个有价值的特点。如果我,反复循环,这
130、是一个有价值的特点。如果我们在求出余数不为们在求出余数不为0后,一边对余数补后,一边对余数补0继续做模继续做模2除,同时除,同时让被检测的校验码字循环左移。表让被检测的校验码字循环左移。表3-11说明,当出现余数说明,当出现余数(101)时,出错位也移到时,出错位也移到A1位置。可通过异或门将它纠正后位置。可通过异或门将它纠正后在下一次移位时送回在下一次移位时送回A7。继续移满一个循环。继续移满一个循环(对对7,4码共移码共移7次次),就得到一个纠正后的码字。这样我们就不必像海明校,就得到一个纠正后的码字。这样我们就不必像海明校验那样用译码电路对每一位提供纠正条件。当位数增多时,验那样用译码电
131、路对每一位提供纠正条件。当位数增多时,循环码校验能有效地降低硬件代价。循环码校验能有效地降低硬件代价。呆湛斜六眺撤柱拎律墒悍德暗厌鹤俊诌垃出猴悸能木育斩但颁框巫钾剧虱运算方法和运算部件运算方法和运算部件2007.7.292计算机组成原理表表3-11信息位、余数和出错位的关系(生成多项式信息位、余数和出错位的关系(生成多项式G(x)=1011)觅显憨粘巳底取廉抨栈牟余阎作捅钵务枷袄齐座午欠秋悍庚驴鸭太锑袋滦运算方法和运算部件运算方法和运算部件2007.7.293计算机组成原理4.生成多项式的选取生成多项式的选取并不是任何一个并不是任何一个k位多项式都能作为生成多项式。从查位多项式都能作为生成多项
132、式。从查错和纠错的要求来看,选取的一个生成多项式应满足以下几错和纠错的要求来看,选取的一个生成多项式应满足以下几个条件:个条件:(1)任何一位发生错误时,都应使余数不为)任何一位发生错误时,都应使余数不为0。(2)不同位发生错误时,余数应该不同。)不同位发生错误时,余数应该不同。(3)对余数作模)对余数作模2除时,应使余数循环。除时,应使余数循环。将这些条件用数学方式描述起来比较复杂,对一个将这些条件用数学方式描述起来比较复杂,对一个(n,k)码来说,可将码来说,可将(xn-1)按模按模2运算分解为若干质因子,根运算分解为若干质因子,根据所要求的码距,选取其中的因式或若干因式的乘积作为生据所要
133、求的码距,选取其中的因式或若干因式的乘积作为生成多项式。例如,若要求对一个成多项式。例如,若要求对一个(7,k)码选取相应的生成多项码选取相应的生成多项式,可以按上述方法对式,可以按上述方法对(x7-1)分解质因子。分解质因子。x7-1=(x+1)(x3+x+1)(x3+x2+1)(模模2运算运算)农唤啪钦缝歹拖雁拣韦梁椎灰拘绒弥嗣慈必鳞勺盏峭倒挖貉踪斯触啊吱盅运算方法和运算部件运算方法和运算部件2007.7.294计算机组成原理若选择若选择G(x)=x+1=11,则可构成,则可构成(7,6)码,只能发现一位错。若选码,只能发现一位错。若选择择G(x)=x3+x+1=1011或或G(x)=x3
134、+x2+1=1101,则可构成,则可构成(7,4)码,能码,能纠正一位错或发现两位错。若选择纠正一位错或发现两位错。若选择G(x)=(x+1)(x3+x+1)=11101,则可,则可构成构成(7,3)码,能纠正一位错并发现两位错。码,能纠正一位错并发现两位错。表表3-12常用的生成多项式常用的生成多项式荚该咳叔凯框借身开牺奎痞署箭剖收惹鹰鸿铱沼打癸月来锐见盗桩擞瘁耳运算方法和运算部件运算方法和运算部件2007.7.295计算机组成原理3.7 实例解析【例【例3-23】将】将(18)10表示成二进制数。表示成二进制数。解:根据上述转换方法的转换过程为:解:根据上述转换方法的转换过程为:1890(
135、18除以除以2得得9,余,余0)41(9除以除以2得得4,余,余1)20(4除以除以2得得3,余,余0)10(2除以除以2得得1,余,余0)01(1除以除以2得得0,余,余1)将右列余数从下到上排列,就可以得到结果为将右列余数从下到上排列,就可以得到结果为10010,即,即1810=100102。嘛锅邑跑甘柴毅叙怔敲秧罐辉搏怖父堪壳驱妙庶婶曰煤今券措崔秦删纳启运算方法和运算部件运算方法和运算部件2007.7.296计算机组成原理【例【例3-24】写出下列二进制数的原码、反码、补码和】写出下列二进制数的原码、反码、补码和移码。移码。(1)11010100(2)0.1010000(3)-10101
136、100(4)-0.0110000解:解:(1)x原原=011010100x反反=011010100x补补=011010100x移移=111010100(2)x原原=0.1010000x反反=0.1010000x补补=0.1010000x移无定义移无定义(3)x原原=110101100x反反=101010011x补补=101010100x移移=001010100(4)x原原=1.0110000x反反=1.1001111x补补=1.1010000x移无定义移无定义疙冕记葫妈恬仿巍察系抬地辨玄奖级犁施许主沁肆埠梅演恒衫动唆芍枪腔运算方法和运算部件运算方法和运算部件2007.7.297计算机组成原理【
137、例【例3-25】设】设x补补a0.a1a2a6其中其中ai取取0或或1,若要,若要x-0.5,求,求a0,a1,a2,a6的取值。的取值。解:解:x补补=a0.a1a2a6(1)若)若a0=0,则,则x0,要满足,要满足x-0.5此时此时a1a6可任意可任意(2)若)若a0=1,则,则x-0.5,需需a1=1即即a0=1,a1=1,a2a6有一个不为有一个不为0孪辽诉父羊圈侩年鹤点载迁茄丽杜嚼财幼靴疟痢谊太萧抉饥歹抉月冶杭程运算方法和运算部件运算方法和运算部件2007.7.298计算机组成原理【例【例3-26】对数据】对数据12310进行规格化浮点数的编码,假进行规格化浮点数的编码,假定定1位
138、符号位,基数为位符号位,基数为2,阶码,阶码5位,采用移码,尾数位,采用移码,尾数10位,位,采用补码。采用补码。解:解这类题目的基本方法是先将数据表示成解:解这类题目的基本方法是先将数据表示成MRE的的形式,其中形式,其中M满足规格化的要求,然后分别对满足规格化的要求,然后分别对M和和E按照题目按照题目要求进行编码,最后将编码的结果按浮点数格式表示出来。要求进行编码,最后将编码的结果按浮点数格式表示出来。(1)将数据转换成二进制表示:)将数据转换成二进制表示:12310=11110112=0.111101000227(2)对阶码和尾数进行编码:)对阶码和尾数进行编码:7移移=10000+00
139、11=101110.1111011000补补=0.1111011000(3)构成浮点格式编码。符号位为)构成浮点格式编码。符号位为0,加上阶码和尾数,加上阶码和尾数后构成浮点格式编码为:后构成浮点格式编码为:0101111111011000偶作峪盏丙瑚碗就脱啪尘副堡释访辕掌谷挫兹冤桩墒船茁伶丸慷岔振和班运算方法和运算部件运算方法和运算部件2007.7.299计算机组成原理【例【例3-27】以】以2为基数,有为基数,有1位符号位、位符号位、4位阶码和位阶码和8位尾位尾数的浮点数,阶码采用移码表示,求数值表示范围及可表示数的浮点数,阶码采用移码表示,求数值表示范围及可表示的数据个数。的数据个数。解
140、:尾数与符号位构成符号位加绝对值的表示,实际上解:尾数与符号位构成符号位加绝对值的表示,实际上是原码。规格化尾数要求尾数的最高位必须是是原码。规格化尾数要求尾数的最高位必须是1,使得最小,使得最小规格化尾数为:规格化尾数为:1/2最大规格化尾数:最大规格化尾数:1-28阶码采用移码,根据移码的表示范围,可得:阶码采用移码,根据移码的表示范围,可得:最大阶码:最大阶码:23-1=7最小阶码:最小阶码:-23=-8将最小尾数乘以将最小尾数乘以2的最小阶码次方,就得到最小正值:的最小阶码次方,就得到最小正值:1/22-8=2-9将最大尾数乘以最大阶码次方,就得到最大正值:将最大尾数乘以最大阶码次方,
141、就得到最大正值:27(1-2-8)同理可得最大负值:同理可得最大负值:-1/22-8=2-9最小负值:最小负值:-27(1-2-8)鲍拙迄进莫俐涧刨栽庙圆辣雹窘赢肥辰囱码匹毖篙灸印豢浙撞务添加钎才运算方法和运算部件运算方法和运算部件2007.7.2100计算机组成原理对于正值,阶码有对于正值,阶码有24种组合,尾数因为规格化种组合,尾数因为规格化的约束,有的约束,有27种组合,共有种组合,共有2427=211种正值。同种正值。同样也有样也有211种负值。加上机器零,共有种负值。加上机器零,共有212+1个规格个规格化浮点数代码。化浮点数代码。注意:这个浮点数总共有注意:这个浮点数总共有13位,
142、表示的浮点数位,表示的浮点数个数不足个数不足213个,说明这种浮点数格式减少了可表个,说明这种浮点数格式减少了可表示的数据个数。示的数据个数。喳裕郑惮兹锨骤休戳霸吠麦聘休盲慢嘛唐买备奉淘懒愈斑婪毙匪膜娩赶生运算方法和运算部件运算方法和运算部件2007.7.2101计算机组成原理【例【例3-28】用浮点数加法流程对数据】用浮点数加法流程对数据0.5和和-0.4375进行二进制加法操作,假定可存储进行二进制加法操作,假定可存储4位尾数。位尾数。解:本题没有规定浮点数的编码方式,故可以解:本题没有规定浮点数的编码方式,故可以直接采用数据值运算来表示浮点数的运算步骤。直接采用数据值运算来表示浮点数的运
143、算步骤。0.5=1/2=0.100020-0.4375=-7/16=-0.0111=-0.11102-1步骤步骤1:对阶。:对阶。将较小的数进行右移:将较小的数进行右移:-0.11102-1=-0.011120阻窄比饭奸灸亡麓攫深傻助珊尤靠贬烽期跨宰卯崭淀特呛灸翼借瑶描盆引运算方法和运算部件运算方法和运算部件2007.7.2102计算机组成原理步骤步骤2:尾数相加。:尾数相加。0.100020+(-0.011120)=0.000120步骤步骤3:规格化结果。:规格化结果。得到:得到:0.000120=0.10002-3步骤步骤4:舍入。:舍入。数据已经适合于数据已经适合于4位存储,不必进行舍入
144、操作。位存储,不必进行舍入操作。步骤步骤5:检查溢出:检查溢出.数据无溢出,最后结果为:数据无溢出,最后结果为:0.10002-3=0.0001=1/16=0.0625歪伏今匈咋酵汇酗萍熏洲涯另吻函变机乃涉逛妈岭吗颅掇阜早癌翼挠称疥运算方法和运算部件运算方法和运算部件2007.7.2103计算机组成原理【例【例3-28】用求余数多项式的方法对四位有效信息】用求余数多项式的方法对四位有效信息(1100)做做(7,4)循环冗余编码,选择的生成多项式是循环冗余编码,选择的生成多项式是G(x)=x3+x+1。解:解:(1)将编码的将编码的4位有效信息码组表示为多项式位有效信息码组表示为多项式M(x):
145、M(x)=x3+x2(2)将将M(x)提高提高r=3次,得次,得M(x)xr,其目的是空,其目的是空r项,以项,以便拼装便拼装r项的余数多项式:项的余数多项式:M(x)x3=x6+x5(3)用用r次的生成多项式次的生成多项式G(x)对对M(x)xr进行模进行模2除:除:(4)将将M(x)xr与余数多项式与余数多项式R(x)相加,即形成相加,即形成CRC循环循环码多项式:码多项式:M(x)x3+R(x)=x6+x5+x即编码的结果为即编码的结果为1100010。败咐访割爆蚀袱再杰官猪弦杖软搞搔肋项森枕履冯踌宇峪匪舵写燕块闻壤运算方法和运算部件运算方法和运算部件2007.7.2104计算机组成原理