第四章-运算方法和运算部件_第1页
第四章-运算方法和运算部件_第2页
第四章-运算方法和运算部件_第3页
第四章-运算方法和运算部件_第4页
第四章-运算方法和运算部件_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

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

文档简介

计算机组成与结构王爱英(第四版)齐鲁师范学院梁晨第三章运算方法&运算部件3.1数据的表示方法3.2带符号二进制数据表示方法及加减运算3.3二进制乘法运算3.4二进制除法运算3.5浮点数的运算方法3.6运算部件3.7数据校验码本章要点计算机的基本功能是对信息进行加工处理,在计算机内部,各种信息都必须采用数字化编码,即用最简单的二进制数码来表示。本章主要介绍常用的进位计数制、二进制运算及其实现、无符号数和带符号数的表示方法、数的定点与浮点表示方法、字符和汉字的编码方法及数据校验码等。熟悉和掌握本章的内容是学习计算机原理的最基本要求。3.1数据的表示方法1.数制的概念进位计数制,简称数制,是人们利用符号来计数的方法。二进制、十进制、八进制和十六进制是学习计算机知识应该掌握的数制。R进制的数,都有以下三个要点:(1)基数为R,即使用R个数码。(2)进位规则为逢R进一(3)第i个数位上的数码所具有的位权为Ri。

数值可用下面的通式表示:N=an-1Rn-1+an-2Rn-2+∧+a1R1+a0R0+∧+amR-m

数制转换1.R进制数转换成十进制数转换方法:按权展开法,即把各数位乘权Ri后再相加。例1将二进制数10111.1转换成十进制数。(10111.1)2=1×24+0×23+1×22+1×21+1×20+1×2-1=16+0+4+2+1+0.5=23.5

例2将十六进制数35CH转换成十进制数(35C)16=3×162+5×161+12×160=768+80+12=860例3将八进制数127.1转换成十进制数(127.1)8=1×82+2×81+7×80+1×8-1=87.125不同数制间的数据转换十进制数转换成R进制数整数转换方法:除基数(R)取余。小数转换方法:乘基数(R)取整。例4将十进制数45.25转换成二进制数整数部分小数部分45÷2=22余1低位0.25×2=0.5取整数0高位22÷2=11余011÷2=5余10.5×2=1.0取整数1低位

5÷2=2余12÷2=1余01÷2=0余1高位所以,45.25=(101101.01)2

或(101101.01)B二进制与十六进制数相互转换2→16转换方法:四位一组。即从最低位开始,每四位分成一组(不足四位时补0),依次转换。例6将二进制数10011010111转换成十六进制数。

010011010111最高位补0(粗体字)(4)(D)(7)所以,(10011010111)2=(4D7)16或(4D7)H16→2转换方法:一位变四位。例7将十六进制数(4AC)H转换成二进制数

4AC

(0100)(1010)(1100)所以,(4AC)H=(010010101100)B

十进制数的编码与运算BCD码用4位二进制数表示每个十进制数,数位内满足二进制规则,数位间,满足十进制规则,这种编码称为BCD码

BCD码算术运算,要对结果进行修正。

修正规则:两数每数位相加之和小于等于1001,不需修正,若大于1001,要加6(0110)修正,同时向高位进位无权码余3码余3码是在BCD码的基础上,每个编码加上0011形成的,如2的余3码是0101,8的余3码是1011

例11:(28)10+(55)1001011011+1000100011100011-0011+001110110110带符号二进制数据的运算机器数机器数与真值的概念在计算机中一个数的数值部分和符号都要用0、1编码。通常,用数的最高位(MSB—MostSignificantBit)表示数的正负MSB=0,表示正数,如+1011表示为01011;MSB=1,表示负数,如-1011表示为11011;我们把一个数在机器内的二进制表示形式称为机器数,而把这个数本身称为该机器数的真值,真值是用“+”,“-”号加绝对值来表示数值的大小。如:机器数:01011和11011对应的真值:+1011和-1011。2.无符号数和符号数无符号数:用整个机器字长的全部二进制位均表示数值位,无符号位。符号数:它的最高位被用来表示该数的符号位,不表示数值位。为解决机器内负数的符号位能与数值位一起参加运算的问题,引入了原码、反码和补码的概念。原码表示法原码表示法是一种最简单的机器数表示法,其最高位为符号位,符号位为0时表示该数为正,符号位为1时表示该数为负,数值部分与真值相同。若真值为纯小数,其原码形式为XS.X1X2…Xn,其中XS表示符号位。原码的定义为:

[X]原=例3.11:X=0.0110[X]原=X=0.0110X=-0.0110,[X]原=1-X=1-(-0.0110)=1+0.0110=1.0110

X0≤X<11-X=1+∣X∣-1<X≤0若真值为纯整数,其原码形式为XSX1X2…Xn,其中XS表示符号位。原码的定义为:[X]原=例3.12:X=1101[X]原=X=01101X=-1101,[X]原=2n-X=24-(-1101)=10000+1101=11101原码表示中,真值0有两种不同的表示形式:

[+0]原=00000,[-0]原=10000原码的优点是直观易懂,机器数和真值间的转换很容易,用原码实现乘、除运算的规则简单。缺点是加、减运算规则较复杂。X0≤X<2n2n-X=2n+∣X∣,-2n<X≤0反码表示法(1)定义引出反码是为了求负数的补码。反码是对一个数的各位求反。对正数来说,其反码和原码的形式是相同的,而负数的反码是符号位为1,数值部分等于其各位的绝对值求反。如:X[X]原

[X]反+11010110101101

-11011110110010在反码表示中,真值0也有两种不同的表示形式:

[+0]反=00000[-0]反=11111反码运算反码运算要注意以下三个问题:●符号位要与数值位部分一样参加运算。●符号位运算后如有进位产生,则把这个进位送回到最低位去相加,这叫循环进位。●反码运算具有性质:[X]反+[Y]反=[X+Y]反例13.已知X=-0.1101,Y=-0.0001,求X+Y解:[X]反=1.0010(符号位取1,数值位逐位变反)+

[Y]反=1.1110[X+Y]反=11.0000

+循环进位1[X+Y]反=1.0001

所以,X+Y=-0.1110练习课本P67

例3.20,例3.21,例3.22,补码表示法补码的符号位表示方法与原码相同(即正0,负1),其数值部分的表示与数的正负有关:正数:数值部分与真值形式相同;x=+11010[X]补=011010负数:将真值的数值部分按位取反,且在最低位加1。

x=-11010[X]补=1,00110若真值为纯小数,其原码形式为XS.X1X2…Xn,其中XS表示符号位。小数的补码定义为[X]补=例3.16:X=0.0110[X]补=X=0.0110X=-0.0110[X]补=2+X=2+(-0.0110)=10-0.0110=1.1010X0≤X<12+X=2-∣X∣-1<X≤0采用补码运算要注意以下三个问题:●符号位要与数值位部分一样参加运算。●符号运算后如有进位产生,则把这个进位舍去不要。●补码运算具有性质:[X]补+[Y]补=[X+Y]补已知X=0.1101,Y=-0.0001,求[X+Y]补解:[X]补=0.1101

+[Y]补=1.1111[X+Y]补=10.1100↓

舍去不要对于减法运算有[X-Y]补=[X]补+[-Y]补机器数表示形式的变换[X]补[X]原[X]反X真值符号位+/-变成0/1数值位不变符号位不变,数值位不变(XS=0)

变反,末位+1(XS=1)符号位不变,数值位不变(XS=0)

数值位变反(XS=1)图3-1三种机器数及真值间的转换关系(1)比较●对正数而言,上述三种码都等于真值本身。●最高位都表示符号位,补码和反码的符号位可与数值位一样看待,和数值位一起参加运算;但原码的符号位必须与数值位分开处理。●原码和反码的真值0各有两种不同的表示方式,而补码的真值0表示是唯一的。(2)转换三种机器数及真值的转换关系如上图所示。从图中可见,真值X与补码或反码间的转换是通过原码实现的,当然,对于已熟练掌握转换方法的读者也可直接完成真值X与补码或反码间的转换。

加减法运算的溢出处理运算结果超出机器数所能表示的范围称为溢出溢出的判断(1)当符号相同的两数相加时,如果结果的符号与加数(或被加数)不相同,则为溢出。(2)当任意符号两数相加时,如果数值最高位进位与符号位进位不相同,则溢出(3)采用双符号位的运算数,正数的双符号位是00,负数的双符号位是11。符号位正常参加运算,若双符号位的两位不相同,则结果溢出。定点数与浮点数定点数表示法定点数表示法通常把小数点固定在数值部分的最高位之前,或把小数点固定在数值部分的最后。前者用来表示纯小数,后者用于表示整数。如图3-3所示。在计算机中,图示的小数点“.”实际上是不表示出来的,是事先约定好固定在那里的。对一台计算机来说,一旦确定了一种小数点的位置,整个系统就不再改变。只能处理定点数的计算机称为定点计算机。在这种计算机中机器指令访问的所有操作数都是定点数。符号数值部分符号数值部分纯小数表示法小数点整数表示法小数点图3-3定点数表示法浮点数表示法小数点的位置可按需浮动,这就是浮点数。例如:N=rE·M式中,r为浮点数阶码的底,与尾数的基数相同,通常r=2。E和M都是带符号的定点数,E叫数N的阶码(Exponent),M为数N的有效数字,称为尾数(Mantissa)。在大多数计算机中,尾数为纯小数,常用规格化形式表示。计算机中,通常用约定的4部分来表示一个浮点数:其中,Ef

、S分别称为阶码E和尾数M的符号位。按照IEEE754标准,常用的浮点格式如图3-4所示。msEm尾符

阶码部分尾数数值位尾数部分,用原码表示图3-4IEEE754标准的浮点格式尾数的规格化对非规格化浮点数,要通过将尾数左移和右移,并修改阶码值使之满足规格化要求例:浮点数尾数为0.0011,阶码为0100,规格化时将尾数左移2位,成为0.1100,阶码减去010,修改成0010,浮点数保持不变。浮点数尾数为0,或阶码的值不能在机器中表示的最小值还小,计算机把该浮点数看成零值,称为机器零。浮点数两种格式单精度浮点数(32位)阶码8位,尾数24位(含一位符号位)双精度浮点数(64位)阶码11位,尾数53位(含一位符号位)多数计算机中,浮点数的尾数用补码表示,阶码用补码或移码表示数值范围与精度标准的32位单精度数,其数值的表示范围为-2127~(1-2-23)2127定点整数(补码)的范围-231~+231-1二进制乘法运算定点数一位乘法

1.定点原码一位乘法

[x.y]原=[x]原*[y]原基本思想:每次用乘数的一位去乘被乘数。

1.算法分析例.0.1101×1.1011乘积P=X×Y符号SP=SXSYX原Y原(1)手算0.1101×0.101111011101000011010.10001111上符号:1.10001111部分积问题:1)加数多(由乘数位数决定)。

2)加数的位数多(与被乘数、乘数位数有关)。改进:将一次相加改为分步累加。(2)分步乘法每次将一位乘数所对应的部分积与原部分积的累加和相加,并移位。设置寄存器:

A:存放部分积累加和、乘积高位

B:存放被乘数

C:存放乘数、乘积低位

设置初值:

A=00.0000B=X=00.1101C=Y=.1011

步数条件操作AC00.0000.1011

1)Cn=1+BCn+00.110100.110100.01101.1012)Cn=1+B+00.110101.001100.100111.103)Cn=0+0+00.000000.100100.0100111.14)Cn=1+B+00.110101.000100.10001111X原×Y原=0.10001111乘积的符号位=X0Y0乘法开始时,A寄存器被清零,作为初始部分积,被乘数放在B寄存器中,乘数放在C寄存器中,部分积和被乘数相加通过给出A→ALU和B→ALU命令,在ALU中完成,ALU的输出经过移位电路向右移一位送入A寄存器,C寄存器使用移位寄存器实现,其低位用作B→ALU的控制命令。加法器最低一位的值,右移时将移入C寄存器的最高位,使乘积之积的最低位保存进C寄存器中。

3.运算规则(1)操作数、结果用原码表示;(2)绝对值运算,符号单独处理;(3)被乘数(B)、累加和(A)取双符号位,乘数只取尾数;(4)乘数末位(Cn)为判断位,其状态决定下步操作;(5)作n(乘数有效位数)次循环(累加、右移)定点补码一位乘法1.算法分析

X补

=X0.X1X2……Xn(1)Y为正:Y补

=0.Y1Y2……Yn

(XY)补

=X补(0.Y1Y2……Yn)(2)Y为负:Y补

=1.Y1Y2……Yn

(XY)补

=X补(0.Y1Y2……Yn)+[-X]补(3)Y符号任意:

(XY)补

=X补(0.Y1Y2……Yn)-[X]补Y0符号位比较法算法

比较法:用乘数的相邻两位比较结果决定+X补、-X补或+0。例3.35设X=—0.1101,Y=0.1011

求(XY)补

比较法算法YnYn+1Yn+1-Yn操作(A补为部分积累加和)00011011

1/2A补

1/2(A补+X补)1/2(A补-X补)1/2A补01-103.运算实例X=-0.1101,Y=-0.1011,求(XY)补。初值:A=00.0000,B=X补=11.0011,-B=(-X)补=00.1101,C=Y补=1.0101步数条件操作AC00.00001.0101

1)10-BCn+00.110100.110100.011011.01012)01+B+11.001111.100111.1100111.0103)10-B+00.110100.100100.01001111.014)01+B+11.001111.011111.101111111.00Cn+1CnCn+15)10-B+00.1101(XY)补

=0.100011115)10-B+00.110100.10001111修正(1)A、B取双符号位,符号参加运算;(2)C取单符号位,符号参加移位,以决定最后是否修正;(3)C末位设置附加位Cn+1,初值为0,CnCn+1组成判断位,决定运算操作;(4)做n+1步操作,其中n步循环,最后一步不移位。

4.运算规则定点数二位乘法按乘数每两位的取值情况,一次求出对应两位的部分积,这样做可以提高运算速度原码两位乘法乘数&被乘数都用原码表示。两位乘数共有4种状态,对应这4种状态可得下表。上表中2倍被乘数可通过将被乘数左移一位实现,而3倍被乘数的获得可以分两步来完成,利用3=4-1,第一步先完成减1倍被乘数的操作,第二步完成加4倍被乘数的操作。而加4倍被乘数的操作实际上是由比“11”高的两位乘数代替完成的,可以看作是在高两位乘数上加“1”。这个“1”可暂时存在Cj触发器中。机器完成置“1”Cj即意味着对高两位乘数加1,也即要求高两位乘数代替本两位乘数“11”来完成加4倍被乘数的操作。由此可得原码两位乘的运算规则如下表所示。当乘数位为偶数时,需作n/2次移位,最多作n/2+1次加法。当乘数位为奇数时,乘数高位前可只增加一个“0”,此时需作n/2+1次加法,n/2+1次移位(最后一步移一位)。

乘积的符号为X0Y0例题3.363.4二进制除法运算除法加减和移位操作。例.手工计算0.10110÷0.111110.1011011010.01111110.11111000111111101010111111101100.00000.0.商:0.10110余数:0.10110×25实现除法的关键:比较余数和除数的绝对值大小,以决定上商。两原码数相除,商的符号为两数符号的异或值,数值为两数绝对值相除后的结果。两种方法:

恢复余数法与加减交替法

P92例子原码恢复余数法1.算法

比较余数和除数的大小可用减法试探。余数×2-除数=新余数为正:够减,商1。为负:不够减,商0,恢复原余数。新余数2.实例已知X=-0.10110,Y=0.11111,求X/Y,给出商Q和余数R设置寄存器:

A:被除数、余数,B:除数,C:商A=X=00.10110-B=11.00001B=Y=00.11111C=Q=0.00000寄存器初值:步数条件操作AC00.101100.00000

1)正-B01.01100+11.0000100.011010.00002)负-B00.11010+11.0000111.110110.00013)恢复余数+B+00.1111100.1101001.101000.00104)正-B+11.0000100.10101CnrQ1

Q2

Q3

r02r0r12r1r2’r22r2r3101步数条件操作AC00.101010.00101

5)正-B01.01010+11.0000100.010110.01016)负-B00.10110+11.0000111.101110.10117)恢复余数+B+00.1111100.10110Q=-0.10110CnQ4

Q5

Q3

r32r3r42r4r5’r5R=0.10110×2-5X/Y=-0.10110+-0.10110×2-50.11111103.说明(1)A和B取双符号位,分别装X和Y的绝对值。(2)最后一步余数乘以2-n为结果的余数,其符号与被除数同号。

原码不恢复余数法(加减交替法)1.算法分析第二步:2r1-B=r2’<0第三步:r2’+B=r2(恢复余数)第四步:2r2-B=r32r2-B=2(r2’+B)-B=2r2’+B=r3第二步:2r1-B=r2<0第三步:2r2+B=r3(不恢复余数)2.算法

ri+1=2ri+(1-2Qi)Yri为正,则Qi为1,第i+1步作2ri-Y;ri为负,则Qi为0,第i+1步作2ri+Y。3.实例X=0.10110,Y=0.11111,求X/Y,给出商Q和余数R。初值:A=X=00.10110B=Y=00.11111C=Q=0.00000-B=11.00001步数条件操作AC00.101100.00000

1)为正-B01.01100+11.0000100.011010.00002)为负-B00.11010+11.0000111.110110.00013)+B+00.1111111.101100.0010为正00.10101CnrQ1

Q2

Q3

r02r0r12r1r22r2r34)为正-B01.01010+11.0000100.010110.0101Q4

2r3r41011步数条件操作AC00.010110.01011

6)为负恢复余数+B+00.1111100.10110Q=0.10110CnQ4

r45)为正-B00.10110+11.0000111.101110.1011Q5

2r4r5’r5R=0.10110×2-5X/Y=0.10110+0.10110×2-50.111110

4.运算规则(1)A、B取双符号位,X、Y取绝对值运算,要求|X|<|Y|。(2)根据余数的正负决定商值及下一步操作。(3)求n位商,作n步操作;若第n步余数为负,则增加第n+1步恢复余数,不移位。补码加减交替法如何上商?

如何确定商符?

如何判断是否够减?已知[X]补与[Y]补求[X]补/[Y]补在补码除法中需要解决:1.判够减(1)同号相除4774-4-7-7-41-47-744-77-4010-43-7-3-(-4)-3-(-7)3够减不够减够减不够减够减:r与X、Y同号;不够减:r与X、Y异号。(2)异号相除1010+(-4)3+(-7)-3+4-3+73够减够减不够减不够减够减:r与X同号,与Y异号;不够减:r与X异号,与Y同号。(3)判断规则同号:作X补-Y补X补Y补够减:r补与Y补同号不够减:r补与Y补异号异号:作X补+Y补够减:r补与Y补异号不够减:r补与Y补同号2.求商值X补Y补同号:商为正异号:商为负够减商1不够减商0够减商0不够减商1(r、Y同号)(r、Y异号)(r、Y异号)(r、Y同号)够减商1不够减商0够减商0不够减商1(r、Y同号)(r、Y异号)(r、Y异号)(r、Y同号)(r、Y同号)(r、Y异号)(r、Y异号)(r、Y同号)够减商1不够减商0够减商0不够减商1上商规则:Qi=Sri⊕SY余数与除数同号商1,异号商0。3.算法

(ri+1)补=2ri补+(1-2Qi补)Y补ri补与Y补同号,则Qi补为1,第i+1步作2ri补-Y补;ri补与Y补异号,则Qi补为0,第i+1步作2ri补+Y补。4.求商符令X补

=r0补r0补与Y补同号:Q0补=1异号:Q0补=0与实际商符相反商符与原码加减交替法比较真商=假商+1.000…01Q0.Q1Q2……Qn-1(1)对第n位商(末位商)采取恒置1(2)将商符变反n位5.商的校正上述上商操作只作到小数点后第n-1位,差一位商,并且商的符号与实际相反。即假商校正:6.实例X=0.10110,Y=-0.11111,求X/Y,给出商Q和余数R。初值:A=X补=00.10110B=Y补=11.00001C=Q补=0.00000-B=00.11111步数条件操作AC00.101100.0000

1)异号+B01.01100+11.0000100.011010.00002)同号+B00.11010+11.0000111.110110.0001Cn-1r与YQ1

Q2

r02r0r12r1r2求商符Q0

异号5)+B+11.0000100.1011011.10111步数条件操作AC11.110110.0001

3)异号-B11.10110+00.1111100.101010.00104)异号+B01.01010+11.0000100.010110.0100Cn-1r与YQ3

Q2

r22r2r32r3r42r4r5假商=0.0100Q4

真商=0.0100+1.00001=1.01001Q=-0.10111R=-0.01001×2X/Y=-0.10111+-0.01001×2-5-0.11111-5

7.运算规则(1)A、B取双符号位,符号参加运算,并且

X<Y。(2)根据余数与除数的符号决定商值及下一步操作。(3)作n步操作,求出1位商符和n-1位商值。(4)对商校正(商符变反,第n位商恒置1)3.5浮点数的运算方法1.“对阶”操作:使两数阶码相等(小数点实际位置对齐,尾数对应权值相同)

比较两浮点数阶码大小,求出其差△E。△E≠0时,将阶码小的数的尾数右移△E位,使两数的阶码值相等。对阶规则:小阶向大阶对齐。对阶操作:小阶阶码增大,尾数右移。例.AE>BE,则BE+1BE,BM,直到BE=AE2.尾数相加减3.规格化操作规格化的结果是使尾数的绝对值尽可能以最大值的形式出现。尾数的规格化数的范围是1/2<|[M]补|<1-2-n(m为正),1/2<|[M]补|<1(M为负)双符号位原码规格化尾数,其数值最高位为1,双符号位补码规格化尾数应是00.1********或11.0************左规与右规如果两个符号位的值不同,表示加/减运算结果溢出,此时将尾数结果右移一位,阶码加1,称为“向右规格化”,简称“右规”如果结果的两个符号位的值相同,表示加/减运算结果不溢出,但若最高数值位与符号位相同,则尾数连续左移,直到最高数值位与符号位的值不同,同时在阶码中减去移位的位数,称为”向左规格化“,简称”左规“实例例111.0001+00.100111.1010例200.0101+00.1101结果规格化M<1/201.0010M>1应左移规格化阶码减移位位数应右移规格化阶码加移位位数4.舍入执行右规或对阶时,尾数上的数值会被移掉,使数值精度受到影响,常用0舍入1法,当移掉的最高位为1时,在尾数的末位加1,如果加1后使尾数溢出,则要在进行一次右规。5.判溢出阶码溢出表示浮点数溢出,规格化&舍入时都可能发生溢出,若阶码下溢,则置运算结果为机器零,若上溢,则置溢出标志。例题3.45浮点乘法运算步骤:1.检测操作数是否为0。2.阶码相加。浮点乘定点加、定点乘3.尾数相乘。(相乘前不需对阶)设A=2×AM,B=2×BMAEBEAE+BEA×B=2

×(AM×BM)

4.结果规格化。(一般左规)浮点除法运算步骤:浮点除定点减、定点除4.尾数相除。设A=2×AM,B=2×BMAEBE5.结果规格化。AE-BEA÷B=2

×(AM÷BM)

3.阶码相减。2.AM<BM?若不满足,则减小AM(同时调整AE)。1.检测操作数是否为0。3.7数据校验码为减少和避免错误信息的形成、存储、传送中发生的错误,除需提高硬件本身的可靠性外,还要在数据编码上想办法。数据校验码就是一种有效的方法。数据校验码是指能发现错误或能自动纠正错误的数据编码,又叫“检错纠错编码”。数据校验码的检验原理是:在编码中,除合法的码字外,再加上一些非法的码字,当某个合法码字出现错误时,就变成非法码字。合理安排非法码字的数量和编码规则,能达到纠错的目的。

数据校验码的码距是衡量两个编码相异程度大小的单位,码距为1,即表示两个码字间最少只有1个二进制位不同(如0000与1000之间),这种编码无检错能力。对于码距≥2的数据校验码开始具有检错能力。码距越大,检错、纠错的能力就越强,且检错能力总是大于或等于纠错能力。奇偶校验码奇偶校验概念奇偶校验码是一种最简单而有效的数据校验方法。实现方法:在每个被传送码的左边或右边加上1位奇偶校验位0或1,若采用奇校验位,只需把每个编码中1的个数凑成奇数;若采用偶校验位,只要把每个编码中1的个数凑成偶数。检验原理:码距为1的二进制码加上奇偶校验位就变成码距为2的奇偶校验码,这种编码能发现1个或奇数个错,但因码距较小,不能实现错误定位。对奇偶校验码的评价:它能发现一位或奇数个位出错,但无错误定位和纠错能力。尽管奇偶校验码的检错能力较低,但对计算机内存出错概率统计,其中70~80%是1位错误,另因奇偶校验码实现简单,故它还是一种应用最广泛的校验方法。实际应用中,多采用奇校验,因奇校验中不存在全“0”代码,在某些场合下更便于判别。

海明校验码海明校验码是由里查德.海明于1950年提出的,目前仍是广泛采用的一种有效的校验码实现原理:在数据中加入几个校验位,将数据代码的码距比较均匀地拉开,并把数据的每一个二进制位分配在几个奇偶校验组中。当某位出错时,就会引起相关的几个校验位值发生变化,这不仅可发现错误,还能指出哪一位出错,为进一步自动纠借提供了依据。构成规则:由数据位和一组校验位构成海明码,这些校验位穿插在数据位中间。校验位的位数r和数据位的位数k应满足海明不等式:2r-1≥r+k上述海明不等式只能发现和纠正一位错误,若要检测并纠正一位错,并发现两位错则要满足2r-1≥r+k(1)校验位分布:在m位的海明码中,各校验位Pi分布在位号为2i-1的位置,即校验位的位置为1、2、4、8、…,其余为数据位,数据位按原顺序排列。如有效信息码D5D4D3D2D1,则最终海明码是D5P4D4D3D2P3D1P2P1,其中Pi为第i个检验位。(2)校验关系:

校验关系是指海明码的每一位Hi要由多少个校验位来校验,其关系是被校验位的位号为校验位的位号之和。如D1(位号为3)要由P2(位号为2)与P1(位号为1)两个校验位校验,D2(位号为5)要由P3(位号为4)与P1(位号为1)两个校验位校验,D3(位号为6)要由P2(位号为2)与P3(位号为4)两个校验位校验,D4(位号为7)要由P1、P2、P3三个校验位校验……这样安排是希望校验的结果能正确反映出错位的位号。2.编码规则以8421码的海明码为例,介绍海明码的构成和纠错原理。8421码的N值为4,则其K值为3。设数据位是D4D3D2D1,按8421码编码,校验位是P3P2P1。按规则1:校验位分布为D4D3D2P3D1P2P1按规则2:D4(位号为7)要由P1、P2、P3三个校验位校验D3(位号为6)要由P2、P3二个校验位校验D2(位号为5)要由P1、P3二个校验位校验D1(位号为3)要由P1、P2二个校验位校验由以上分析可得:校验位的取值按下列公式求出:P3=D4⊕D3⊕D2P3应满足D4

、D3

、D2

、P3为偶校验P2=D4⊕D3⊕D1P2应满足D4

、D3

、D1、P2为偶校验P1=D4⊕D2⊕D1P1应满足D4

、D2

、D1、P1为偶校验可看出P3与D4D3D2有关2.编码规则三个校验和按下列公式求出:S2=D4⊕D3⊕D2⊕P3S1=D4⊕D3⊕D1⊕P2

S0=D4⊕D2⊕D1⊕P1若S2S1S0=0,则说明传送无错,接收到的代码无错;若S2S1S0≠0,则说明传送有错,此时S2S1S0的十进制数值就是出错的位号,故将S2S1S0称为指误字(Symptom)。与奇偶校验一样举例一个8421码4的海明码在传送第5位发生错误的检/纠例子。

7654321D4D3D2

P3D1P2P1发送4的海明码0101010(由表3-7可查得)接收的海明码0111010出错接收的海明码第5位发生了错误,由0变成了1。指误字S2S1S0分别是:S2=D4⊕D3⊕D2⊕P3=0⊕1⊕1⊕1=1S1=D4⊕D3⊕D1⊕P2=0⊕1⊕0⊕1=0S0=D4⊕D2⊕D1⊕P1=0⊕1⊕0⊕0=1从上式得到指误字S2S1S0

=101,说明是第5位(数据位D2)在传送中出错,此时,只要将此位取反即可。指误字S2S1S0

≠0,说明有错举例一个8421码4的海明码在传送时,第5、6位同时出错

7654321D4D3D2P3D1P2P1

发送的海明码0101010接收的海明码0011010检验的情况是:S2

=D4⊕D3⊕D2⊕P3

=0⊕0⊕1⊕1=0S1=D4⊕D3⊕D1⊕P2

=0⊕0⊕0⊕1=1S0

=D4⊕D2⊕D1⊕P1=0⊕1⊕0⊕0=1从上式得到指误字S2S2S1

=011,说明是第3位出错,这显然与实际情况(第5、6位同时出错)不符。结论:海明码能查出2位以上的错误,但不能作错误的定位,更不能纠正2位错。指误字S2S1S0

≠0,说明有错3.5.3循环冗余校验码CRC码是一种检错、纠错能力很强的数据校验码,主要用于网络、同步通信及磁表面存储器等应用场合。1.循环冗余校验码的编码方法循环冗余校验码由两部分组成,左边为信息位,右边为校验位。若信息位为N位,校验位为K位,则该校验码被称为(N+K,N)码

温馨提示

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

评论

0/150

提交评论