0%

计算机组成原理——第2章

2.2 数值数据的表示

  • 真值:使用"+“、”-"表示正负号的数值表示方式。
  • 机器数:符号数值化的数据表示方法,使用0、1表示符号。
  • 三种常见机器数(整数):
    • 原码:最高位为符号位,其余位值为数值的绝对值,符号位正数为0,负数为1。原码表示方便,但计算复杂,且有+0和-0两种0的表示方式。
    • 反码:最高位符号位规则与原码相同,当数值为负数时,其余位值相对于原码全部取反。表示相对于原码较复杂,但计算简单,但0的表示同样不唯一。
    • 补码:表示负数时为反码+1。
    • 规则:对于总位数为n的二进制数,三种码对于正数的表示方法相同,可表示正数范围均为0~2n-1-1。原码表示负数x,二进制数的值为2n-1-x,反码表示为2n+x-1,补码表示为2n+x。反码的加法计算方法:二进制数直接相加后再加1。
  • 移码:非符号位与补码相同,符号位与补码相反。编码方式是直接将真值加上一个常数偏移量,因此得名。
  • 定点数表示:X0.X1X2…,其表示范围为-1~1-2-n(使用补码形式进行编码)
  • 浮点数表示:一般格式为ESE1E2…EnMSM1M2…Mk,其中E为阶码位,确定数据的范围,M为尾数,表示数的精度。其中阶码位和尾数位的最高位均表示符号。浮点数表示的不足之处是不同机器可能从相同的二进制数中提取出不同的浮点数。
    • IEEE754标准规定单精度浮点数阶码8位,有效尾数23位(不含尾数中的符号位,尾数中的符号位位于阶码前面,在最高位);双精度浮点数阶码11位,有效尾数52位。阶码采用移码的方式表示,常数为127。其中有效尾数的整数位1被省略。对于单精度浮点数,若其偏指数(带有符号位的阶码的无符号值)为E,尾数为M,则真值可表示为2E-127×(-1)S×1.M。
      • 当E=0、M=0时表示机器零,无论S等于0还是1。
      • 当E=0、M≠0时,真值为非规格化的浮点数,2-126×(-1)S×0.M。即这个数太接近0,即使阶码为0也必须让尾数的整数位为0才能表示,这样会影响数的表示精度。
      • 当1≤E≤254时,正常表示,是规格化的浮点数。
      • 当E=255、M=0时表示无穷大。
      • 当E=255、M≠0时表示NaN。

2.4 数据信息的校验

2.4.1 码距与校验

码距:信息编码中两个编码对应的二进制位不同的位的个数。如10101和10001的码距为1,只有1个二进制位不同。码距越大、抗干扰、纠错能力越强,数据冗余越大,编码效率越低。
码距越大,纠错就越容易,当码距变大时,将一个合法编码转化为另一个合法编码需要修改多位,概率较低,且可以根据不合法编码与合法编码之间的码距,选择与不合法编码的码距最小的合法编码纠错。

  • 当码距d≥e+1时,可以检测出e个错误
  • 当码距d≥2t+1时,可以纠正t个错误
  • 当码距d≥e+t+1时(e≥t),可以在检测e个错误的同时纠正t个错误。

2.4.2 奇偶校验

检测二进制代码中1的个数的奇偶性进行校验。
奇校验要让数据位和校验位整个的1的个数为奇数,偶校验则让1的个数为偶数。因此奇校验是1的个数为偶数时校验码为1,而偶校验时1的个数为奇数时校验码为1。

优点:检错简单,编码效率高。
缺点:不能获取错误位置,只是一种检错码,无错结论不可靠(如果两位同时错误无法检测出来)

改进:交叉奇偶校验,将原始数据信息构建为行列矩阵式结构,每一行和每一列都产生一个偶校验位,最后生成一个公共校验位。当有一位出错时,可以根据行校验位和列校验位的检查判断出是哪一位出错。但当两位数据同事出错时,不能确定到底是哪两位出错(有两种情况)。可纠正1位错误、检查部分偶数位错误、不能检测出错误发生在数据位中任意一个矩形4个顶点上的错误。

2.4.3 CRC校验

Cyclic Redundancy Check,循环冗余校验,是一种基于模2运算建立编码规则的校验码。其中模2运算与异或运算的规则相同,在加的基础上不用进位。在此基础上可以获取模2乘法运算和除法运算的规则。

编码规则:设CRC码长度n位,原始数据Ck-1Ck-2…C0共k位,校验位Pr-1Pr-2…P0共r位,则n=k+r≤2r-1。生成一个多项式G(x),将待发送的二进制数据用该多项式表示:G(x)=Ck-1xk-1+Ck-2xk-2+…+C1x+C0。G(x)需要满足:

  • 最高位和最低位必须为1。
  • 被传送信息任意一位出错时,被生成多项式除之后余数均不为0。
  • 不同位发生错误时,模2除运算后余数不同。
  • 对不为0的余数进行模2除运算能够使余数循环。

编码方法:

  • 根据待校验信息的长度k按照k+r≤2r-1确定校验码位数。
  • 根据r和生成多项式的选择原则,选择一个位数为r+1的生成多项式。
  • 将有效信息左移r位得到r+k位的二进制数Q。
  • 对Q除生成多项式,以余数替换Q的低r位。

校验方法:
用数据除生成多项式,余数为0即为正确。

CRC校验码的循环特性:第i位出错的数据除以生成多项式获得的余数Ri与第i+1位出错的数据除以生成多项式获得的余数Ri+1满足:Ri+1=Ri左移1位后除以生成多项式获得的余数。

纠错方法:
记录当数据最高位错误时除以生成多项式获取的余数R。
当待检测数据除以生成多项式获得的余数不是0也不是R时,一边对余数补零继续除,另一边对待检测数据循环左移,当余数的值为R时,将当前循环移位后的待检测数据的最高位取反,再移位回来即可完成纠错。

2.4.3 海明校验

一种既能检错又能纠错的校验码,本质是多重奇偶校验。(海明码为偶校验)

设海明校验码共n位,原始数据k位,校验位r位,满足k+r≤2r-1。
r位校验码(Pi,i=1,2,…,r)分别位于海明编码的第2i-1位。海明码第i位的数据由若干个位于小于i的校验位校验。注意:第i位如果为数据位,那么参与检验该位的海明码的计算方式是——获取i的二进制表示,二进制中若第j位为1,则第j个海明码参与检验该值。如海明校验码的第11位,二进制表示为1011,则第1、2、4个校验码位参与校验该值。当有1位出错时,只需要将指错字的所有位转换为一个数值,该数值即为出错的位的索引。如第11位出错,则4个指错字中第1、2、4位必然为1,4个指错字结合为1011,即为出现错误的那一位。这种纠错方式可以纠正海明校验码中任何一位的错误,包括校验位。但海明校验不一定能够分辨出一位错与两位错。