数据的机器级表示.ppt

上传人:小飞机 文档编号:6296745 上传时间:2023-10-14 格式:PPT 页数:86 大小:966KB
返回 下载 相关 举报
数据的机器级表示.ppt_第1页
第1页 / 共86页
数据的机器级表示.ppt_第2页
第2页 / 共86页
数据的机器级表示.ppt_第3页
第3页 / 共86页
数据的机器级表示.ppt_第4页
第4页 / 共86页
数据的机器级表示.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

《数据的机器级表示.ppt》由会员分享,可在线阅读,更多相关《数据的机器级表示.ppt(86页珍藏版)》请在三一办公上搜索。

1、Ch2:Data Representation数据的机器级表示,第一讲 数值数据的表示第二讲 非数值数据表示及 数据的宽度、存储排列、纠/检错,第一讲:数值数据的表示,主 要 内 容定点数的表示进位计数制定点数的二进制编码原码、补码、移码表示定点整数的表示无符号整数、带符号整数浮点数格式和表示范围浮点数的规格化IEEE754浮点数标准单精度浮点数、双精度浮点数特殊数的表示形式C语言程序中的整数类型、浮点数类型十进制数表示,信息的二进制编码,计算机的外部信息与内部机器级数据 机器级数据分两大类:数值数据:无符号整数、带符号整数、浮点数(实数)、十进制数非数值数据:逻辑数(包括位串)、西文字符和汉

2、字计算机内部所有信息都用二进制(即:0和1)进行编码用二进制编码的原因:制造二个稳定态的物理器件容易二进制编码、计数、运算规则简单正好与逻辑命题对应,便于逻辑运算,并可方便地用逻辑电路实现算术运算真值和机器数机器数:用0和1编码的计算机内部的0/1序列真值:机器数真正的值,即:现实中带正负号的数,首先考虑数值数据的表示,C语言中哪些类型是数值数据?哪些是非?,BACK,P.26 图2.1,数值数据的表示,数值数据表示的三要素进位计数制定、浮点表示如何用二进制编码即:要确定一个数值数据的值必须先确定这三个要素。例如,机器数 01011001的值是多少?进位计数制十进制、二进制、十六进制、八进制数

3、及其相互转换定/浮点表示(解决小数点问题)定点整数、定点小数浮点数(可用一个定点小数和一个定点整数来表示)定点数的编码(解决正负号问题)原码、补码、反码、移码(反码很少用),答案是:不知道!,Sign and Magnitude(原码的表示),容易理解,但是:0 的表示不唯一,不利于程序员编程 加、减运算方式不统一 需额外对符号位进行处理,不利于硬件设计 特别当 ab时,实现 a-b比较困难,从 50年代开始,整数都采用补码来表示但浮点数的尾数用原码定点小数表示,Binary,Decimal,-0-1-2-3-4-5-6-7,10001001101010111100110111101111,补

4、码特性-模运算(modular运算),时钟是一种模-12系统 假定钟表时针指向10点,要将它拨向点,则有两种拨法:倒拨4格:10-4=6 顺拨8格:10+8=18 6(mod 12)模12系统中:10-4 10+8(mod 12)-4 8(mod 12)则,称8是-4对模12的补码。同样有-3 9(mod 12)-5 7(mod 12)等,结论2:对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替。,补码(modular运算):+and 的统一,重要概念:在一个模运算系统中,一个数与它除以“模”后的余数等价。,结论1:一个负数的补码等于模减该负数的绝对值。,模运算

5、系统举例,例1:“钟表”模运算系统 假定时针只能顺拨,从10点倒拨4格后是几点?10-4=10+(12-4)=10+8=6(mod 12)例2:“4位十进制数”模运算系统 假定算盘只有四档,且只能做加法,则在算盘上计算 9828-1928等于多少?9828-1928=9828+(104-1928)=9828+8072=1 7900=7900(mod 104),运算器是一个模运算系统,适合用补码表示和运算,计算机中运算器只有有限位。假定为n位,则运算结果只能保留低n位,故可看成是个只有n档的二进制算盘。所以,其模为2n。,补码的定义 假定补码有n位,则:定点整数:X补=2n+X(-2nX 2n,

6、mod 2n)定点小数:X补=2+X(-1X1,mod 2),求特殊数的补码,-1补=2n-001=111(n个1)(mod 2n),假定机器数有n位-2n-1补=2n-2n-1=100(n-1个0)(mod 2n),-1.0补=2-1.0=1.000(n-1个0)(mod 2),+0补=-0补=000(n个0),补码与真值之间的简便转换,例:设机器数有8位,求123和-123的补码表示。,解:123=127-4=01111111B-100B=01111011B-123=-01111011B 01111011补=28+01111011=100000000+01111011=01111011(m

7、od 28),即 7BH。-01111011补=28 01111011=10000 0000-01111011=1111 1111 0111 1011+1=1000 0100+1=1000 0101,即 85H。,如何快速得到123的二进制表示?,Twos Complement(补码的表示),正数:符号位(sign bit)为0,数值部分不变负数:符号位为1,数值部分“各位取反,末位加1”,变形(模4)补码:双符号,用于存放可溢出的中间结果。,如何求补码的真值,根据补码各位上的“权”,可以求出一个补码的值,当N=4时,范围为:-23 23-1(即:-8+7)当N=32时,范围为:-231 23

8、1-1,真值范围:,令:A补=an-1an-2 a1a0 则:A=-an-1.2n-1+an-2.2n-2+a1.21+a0.20,Excess(biased)notion-移码表示,什么是“excess(biased)notation-移码表示”?将每一个数值加上一个偏置常数(Excess/bias)一般来说,当编码位数为 n时,bias取 2n-1 Ex.n=4:Ebiased=E+23(bias=23=10002)-8(+8)00002-7(+8)00012 0(+8)10002+7(+8)11112为什么要用移码来表示指数(阶码)?便于浮点数加减运算时的对阶操作,例:1.01 x2-1

9、+1.11 x23,移码主要用来表示浮点数阶码!,0的移码表示惟一移码和补码仅第一位不同,Unsigned integer(无符号整数),机器中字的位排列顺序有两种方式:(例:32位字:0010112)高到低位从左到右:0000 0000 0000 0000 0000 0000 0000 1011高到低位从右到左:1101 0000 0000 0000 0000 0000 0000 0000MIPS采用高到低从左往右排列Leftmost和rightmost这两个词有歧义,故用LSB(Least Significant Bit)来表示最低有效位,用MSB来表示最高有效位一般在全部是正数运算且不出

10、现负值结果的场合下,可使用无符号数表示。例如,地址运算无符号数的编码中没有符号位在字长相同的情况下,它的表示范围大于有符号数无符号数总是整数,所以很多时候就简称为“无符号数”最大8位无符号整数是11111111B,其值为255,Signed integer(带符号整数),计算机必须能处理正数(positive)和负数(negative),MSB表示数符有三种表示方式Signed magnitude(原码)用来表示浮点(实)数的尾数Ones complement(反码)现已不用Twos complement(补码)50年代以来,所有计算机都用补码来表示定点(整)数为什么用补码表示带符号整数?补码

11、运算系统是模运算系统,加、减运算统一数0的表示惟一,方便使用比原码和反码多表示一个最小负数与移码相比,其符号位和真值的符号对应关系清楚,C语言程序中的整数,无符号数:unsigned int(short/long);带符号整数:int(short/long),常在一个数的后面加一个“u”或“U”表示无符号数,若同时有无符号数和带符号整数,则C编译器隐含将带符号整数强制转换为无符号数,假定以下关系表达式在32位用补码表示的机器上执行,结果是什么?,C语言程序中的整数,带*的结果与常规预想的相反!,Example:mantissa(尾数)exponent(阶码、指数)6.02 x 10 21 de

12、cimal point radix(base,基)Normalized form(规格化形式):小数点前只有一位非0数 同一个数有多种表示形式。例:对于数 1/1,000,000,000 Normalized(唯一的规格化形式):1.0 x 10-9 Unnormalized(非规格化形式不唯一):0.1 x 10-8,10.0 x 10-10,科学计数法(Scientific Notation)与浮点数,for Binary Numbers:,只要对尾数和指数分别编码,就可表示一个浮点数(即:实数),浮点数(Floating Point)的表示范围,例:画出下述32位浮点数格式的表数范围。0

13、 1 8 9 31 第0位数符S;第18位为8位移码表示阶码E(偏置常数为128);第931位为24位二进制原码小数表示的尾数M。规格化尾数的第一位总是1,故规定第一位默认的“1”不明显表示出来。这样可用23个数位表示24位尾数。,S,阶码E,尾数M,最大正数:0.111 x 2111=(1-2-24)x 2127,最小正数:0.100 x 2000=(1/2)x 2-128,因为原码是对称的,所以其表示范围是关于原点对称的。,机器0:阶码为0 或 落在下溢区中的数浮点数范围比定点数大,但数的个数没变多,故数之间更稀疏,且不均匀,浮点数的表示,Normal format(规格化数形式):+/-

14、1.xxxxxxxxxxtwo x 2Exponent32-bit 规格化数:31 0 S Exponent Significand 1 bit?bits?bits S 是符号位(Sign)Exponent用 excess(or biased)notation(移码/增码)来表示 Significand 表示 xxxxxxxxxxxxx,尾数部分(基可以是 2/4/8/16,约定信息,无需显式表示)早期的计算机,各自定义自己的浮点数格式,问题:浮点数表示不统一会带来什么问题?,小数点前面总是“1”,故可隐含表示,“Father”of the IEEE 754 standard,现在所有计算机都

15、采用IEEE754来表示浮点数,1970年代后期,IEEE成立委员会着手制定浮点数标准,1985年完成浮点数标准IEEE754的制定,直到80年代初,各个机器内部的浮点数表示格式还没有统一 因而相互不兼容,机器之间传送数据时,带来麻烦,IEEE 754 Floating Point Standard,Single Precision:(Double Precision is similar)S Exponent Significand 1 bit 8 bits 23 bits,Sign bit:1 表示negative;0表示 positive,Significand(尾数):规格化尾数最高位

16、总是1,所以隐含表示,省1位 1+23 bits(single),1+52 bits(double),Exponent(阶码/指数):SP规格化数阶码范围为0000 0001(-126)1111 1110(127)bias为127(single),1023(double),SP:(-1)S x(1+Significand)x 2(Exponent-127),DP:(-1)S x(1+Significand)x 2(Exponent-1023),全0和全1用来表示特殊值!,为什么用127?若用128,则阶码范围为多少?,Ex:Converting Binary FP to Decimal,101

17、11 1101 110 0000 0000 0000 0000 0000,Sign:1=negative,Exponent:0111 1101two=125ten Bias adjustment:125-127=-2,Significand:1+1x2-1+1x2-2+0 x2-3+0 x2-4+0 x2-5+.=1+2-1+2-2=1+0.5+0.25=1.75,Represents:-1.75tenx2-2=-0.4375(=-4.375x10-1),(-1)S x(1+Significand)x 2(Exponent-127),BEE00000H is the hex.Rep.Of an

18、 IEEE 754 SP FP number,Ex:Converting Decimal to FP,-1.275 x 101,1.Denormalize:-12.75,2.Convert integer part:12=8+4=11002,3.Convert fractional part:.75=.5+.25=.112,4.Put parts together and normalize:1100.11=1.10011 x 23,5.Convert exponent:127+3=128+2=1000 00102,11000 0010 100 1100 0000 0000 0000 0000

19、,The Hex rep.is C14C0000H,Normalized numbers(规格化数),Exponent Significand Object1-254 anything Norms implicit leading 10 0?0 nonzero?255 0?255 nonzero?,前面的定义都是针对规格化数(normalized form)How about other patterns?,Representation for 0,How to represent 0?exponent:all zeros significand:all zeros What about si

20、gn?Both cases valid.+0:0 00000000 00000000000000000000000-0:1 00000000 00000000000000000000000,Representation for+/-,How to represent+/-?Exponent:all ones(11111111B=255)Significand:all zeros+:0 11111111 00000000000000000000000-:1 11111111 00000000000000000000000,Operations 5/0=+,-5/0=-5+(+)=+,(+)+(+

21、)=+5-(+)=-,(-)-(+)=-etc,为什么要这样处理?可以利用+/-作比较。例如:X/0Y可作为有效比较,In FP,除数为0的结果是+/-,不是溢出异常.,:infinity,Representation for“Not a Number”,Sqrt(-4.0)=?0/0=?Called Not a Number(NaN)-“非数”,Operations sqrt(-4.0)=NaN 0/0=NaN op(NaN,x)=NaN+(-)=NaN+-(+)=NaN/=NaN etc.,How to represent NaN Exponent=255 Significand:nonz

22、ero NaNs can help with debugging,What have we defined so far?(for SP),Representation for Denorms(非规格化数),Used to represent Denormalized numbers,Exponent Significand Object0 0+/-00 nonzero Denorms 1-254 anything Norms implicit leading 1255 0+/-infinity255 nonzero NaN,Representation for Denorms,2-126,2

23、-125,2-124,2-123,1.00 x2-126 1.11x2-126,0.00 x2-126 0.11x2-126,2-126,2-125,2-124,2-123,0,0,GAP,(-1)s0.aaa 2-126,Questions about IEEE 754,Whats the range of representable values?The largest number for single:+1.111X 2127 How about double?What about following type converting:not always true!if(i=(int)

24、(float)i)printf(“true”);if(f=(float)(int)f)printf(“true”);How about FP add associative?FALSE!x=1.5 x 1038,y=1.5 x 1038,z=1.0(x+y)+z=(1.5x1038+1.5x1038)+1.0=1.0 x+(y+z)=1.5x1038+(1.5x1038+1.0)=0.0,How about double?,How about double?,True!,Not always true!,约+3.4 X 1038,约+1.8 X 10308,数值数据(numerical dat

25、a)的两种表示Binary(二进制数)定点整数:Fixed-point number(integer)Unsigned and signed int浮点数:Floating-point number(real number)Decimal(十进制数)用ASCII码表示用BCD(Binary coded Decimal)码表示计算机中为什么要用十进制数表示数值?日常使用的都是十进制数,所以,计算机外部都使用十进制数。在一些有大量数据输入/出的系统中,为减少二进制数和十进制数之间的转换,在计算机内部直接用十进制数表示数值。,十进制数的表示,用ASCII码表示十进制数,前分隔数字串符号位单独用一个字

26、节表示,位于数字串之前。正号用“+”的ASCII码(2BH)表示;负号用“-”的ASCII码(2DH)表示例:十进制数+236表示为:2B 32 33 36H 0010 1011 0011 0010 0011 0011 0011 0110B 十进制数-2369表示为:2D 32 33 36 39H 0010 1101 0011 0010 0011 0011 0011 0110 0011 1001B后嵌入数字串符号位嵌入最低位数字的ASCII码高4位中。比前分隔方式省一个字节。正数不变;负数高4位变为0111.例:十进制数+236表示为:32 33 36H 0011 0010 0011 0011

27、 0011 0110B 十进制数-2369表示为:32 33 36 79H 0011 0010 0011 0011 0011 0110 0111 1001B缺点:占空间大,且需转换成二进制数或BCD码才能计算。,编码思想:每个十进数位至少有4位二进制表示。而4位二进制位可组合成16种状态,去掉10种状态后还有6种冗余状态。编码方案1 十进制有权码每个十进制数位的4个二进制位(称为基2码)都有一个确定的权。8421码是最常用的十进制有权码。也称自然BCD(NBCD)码。2 十进制无权码每个十进制数位的4个基2码没有确定的权。在无权码方案中,用的较多的是余3码和格雷码。3其他编码方案(5中取2码、

28、独热码等)符号位的表示:“+”:1100;“-”:1101例:+236=(1100 0010 0011 0110)8421(占2个字节)-2369=(1101 0000 0010 0011 0110 1001)8421(占3个字节),用BCD码表示十进制数,补0以使数占满一个字节,第一讲小结,在机器内部编码后的数称为机器数,其值称为真值定义数值数据有三个要素:进制、定点/浮点、编码整数的表示无符号数:正整数,用来表示地址等;带符号整数:用补码表示C语言中的整数无符号数:unsigned int(short/long);带符号数:int(short/long)浮点数的表示符号;尾数:定点小数;指

29、数(阶):定点整数(基不用表示)浮点数的范围正上溢、正下溢、负上溢、负下溢;与阶码的位数和基的大小有关浮点数的精度:与尾数的位数和是否规格化有关浮点数的表示(IEEE754标准):单精度SP(float)和双精度DP(double)规格化数(SP):阶码1254,尾数最高位隐含为1“零”(阶为全0,尾为全0)(阶为全1,尾为全0)NaN(阶为全1,尾为非0)非规格化数(阶为全0,尾为非0,没有隐藏位)十进制数的表示:用ASCII码或BCD码表示,第二讲 非数值数据、数据排列、纠/检错,主 要 内 容非数值数据的表示逻辑数据、西文字符、汉字数据的宽度数据的存储排列大端方式、小端方式数据的纠错和检

30、错奇偶校验、海明校验、循环冗余校验,表示用一位表示 真:1/假:0N位二进制数可表示N个逻辑数据,或一个位串运算按位进行如:按位与/按位或/逻辑左移/逻辑右移 等 识别逻辑数据和数值数据在形式上并无差别,也是一串0/1序列,机器靠指令来识别。,逻辑数据的编码表示,特点是一种拼音文字,用有限几个字母可拼写出所有单词只对有限个字母和数学符号、标点符号等辅助字符编码所有字符总数不超过256个,使用7或8个二进位可表示表示(常用编码为7位ASCII码)要求必须熟悉数字、字母和空格(SP)的表示十进制数字:0/1/2/9英文字母:A/B/Z/a/b/z专用符号:+/-/%/*/&/控制字符(不可打印或显

31、示)操作字符串操作,如:传送/比较等,西文字符的编码表示,特点汉字是表意文字,一个字就是一个方块图形。汉字数量巨大,总数超过6万字,给汉字在计算机内部的表示、汉字的传输与交换、汉字的输入和输出等带来了一系列问题。编码形式有以下几种汉字代码:输入码:对汉字用相应按键进行编码表示,用于输入内码:用于在系统中进行存储、查找、传送等处理字模点阵或轮廓描述:描述汉字字模点阵或轮廓,用于显示/打印,汉字及国际字符的编码表示,问题:西文字符有没有输入码?有没有内码?有没有字模点阵或轮廓描述?,向计算机输入汉字的方式:手写汉字联机识别输入,或者是印刷汉字扫描输入后自动识别,这两种方法现均已达到实用水平。用语音

32、输入汉字,虽然简单易操作,但离实用阶段还相差很远。利用英文键盘输入汉字:每个汉字用一个或几个键表示,这种对每个汉字用相应按键进行的编码称为汉字“输入码”,又称外码。输入码的码元为按键。是最简便、最广泛的汉字输入方法。常用的方法有:搜狗拼音、五笔字型、智能ABC、微软拼音等使用汉字输入码的原因:键盘面向西文设计,一个或两个西文字符对应一个按键,非常方便。汉字是大字符集,专门的汉字输入键盘由于键多、查找不便、成本高等原因而几乎无法采用。,汉字的输入码,问题:西文字符常用的内码是什么?其内码就是ASCII码。对于汉字内码的选择,必须考虑以下几个因素:不能有二义性,即不能和ASCII码有相同的编码。尽

33、量与汉字在字库中的位置有关,便于汉字查找和处理。编码应尽量短。国标码(国标交换码)1981年我国颁布了信息交换用汉字编码字符集基本集(GB231280)。该标准选出6763个常用汉字,为每个汉字规定了标准代码,以供汉字信息在不同计算机系统间交换使用可在汉字国标码的基础上产生汉字机内码,字符集与汉字的内码,由三部分组成:字母、数字和各种符号,包括英文、俄文、日文平假名与片假名、罗马字母、汉语拼音等共687个 一级常用汉字,共3755个,按汉语拼音排列 二级常用汉字,共3008个,不太常用,按偏旁部首排列汉字的区位码码表由94行、94列组成,行号为区号,列号为位号,各占7位指出汉字在码表中的位置,

34、共14位,区号在左、位号在右汉字的国标码每个汉字的区号和位号各自加上32(20H),得到其“国标码”国标码中区号和位号各占7位。在计算机内部,为方便处理与存储,前面添一个0,构成一个字节,GB2312-80字符集,汉字内码,至少需2个字节才能表示一个汉字内码。为什么?由汉字的总数决定!可在GB2312国标码的基础上产生汉字内码为与ASCII码区别,将国标码的两个字节的第一位置“1”后得到一种汉字内码 例如,汉字“大”在码表中位于第20行、第83列。因此区位码为0010100 1010011,国标码为00110100 01110011,即3473H。前面的34H和字符“4”的ACSII码相同,后

35、面的73H和字符“s”的ACSII码相同,将每个字节的最高位各设为“1”后,就得到其内码:B4F3H(1011 0100 1111 0011B),因而不会和ASCII码混淆。,国际字符集,国际字符集的必要性不同地区使用不同字符集内码,如中文GB2312/Big5、日文Shift-JIS/EUC-JP等。在安装中文系统的计算机中打开日文文件,会出现乱码。为使所有国际字符都能互换,必须创建一种涵盖全部字符的多字符集。国际多字符集通过对各种地区性字符集规定使用范围来唯一定义各字符的编码。国际标准ISO/IEC 10646提出了一种包括全世界现代书面语言文字所使用的所有字符的标准编码,有4个字节编码(

36、UCS-4)和2字节编码(UCS-2)。我国(包括香港、台湾地区)与日本、韩国联合制订了一个统一的汉字字符集(CJK编码),共收集了上述不同国家和地区共约2万多汉字及符号,采用2字节编码(即:UCS-2),已被批准为国家标准(GB13000)。Windows操作系统(中文版)已采用中西文统一编码,收集了中、日、韩三国常用的约2万汉字,称为“Unicode”,采用2字节编码,与UCS-2一致。,为便于打印、显示汉字,汉字字形必须预先存在机内字库(font):所有汉字形状的描述信息集合不同字体(如宋体、仿宋、楷体、黑体等)对应不同字库从字库中找到字形描述信息,然后送设备输出字形主要有两种描述方法:

37、字模点阵描述(图像方式)轮廓描述(图形方式)直线向量轮廓曲线轮廓(True Type字形),汉字的字模点阵码和轮廓描述,数据的基本宽度,比特(bit)是计算机中处理、存储、传输信息的最小单位二进制信息的计量单位是“字节”(Byte),也称“位组”现代计算机中,存储器按字节编址字节是最小可寻址单位(addressable unit)除比特和字节外,还经常使用“字”(word)作为单位“字”和“字长”的概念不同,数据的基本宽度,“字”和“字长”的概念不同“字长”指数据通路的宽度。(数据通路指CPU内部数据流经的路径以及路径上的部件,主要是CPU内部进行数据运算、存储和传送的部件,这些部件的宽度基本

38、上要一致,才能相互匹配。因此,“字长”等于CPU内部总线的宽度、运算器的位数、通用寄存器的宽度等。)“字”表示被处理信息的单位,用来度量数据类型的宽度。字和字长的宽度可以一样,也可不同。例如,x86体系结构定义“字”的宽度为16位,但从386开始字长就是32位了。,数据量的度量单位,存储二进制信息时的度量单位要比字节或字大得多容量经常使用的单位有:“千字节”(KB),1KB=210字节=1024B“兆字节”(MB),1MB=220字节=1024KB“千兆字节”(GB),1GB=230字节=1024MB“兆兆字节”(TB),1TB=240字节=1024GB 通信中的带宽使用的单位有:“千比特/秒

39、”(kb/s),1kbps=103 b/s=1000 bps“兆比特/秒”(Mb/s),1Mbps=106 b/s=1000 kbps“千兆比特/秒”(Gb/s),1Gbps=109 b/s=1000 Mbps“兆兆比特/秒”(Tb/s),1Tbps=1012 b/s=1000 Gbps,如果把b换成B,则表示字节而不是比特(位)例如,10MBps表示 10兆字节/秒,程序中数据类型的宽度,高级语言支持多种类型、多种长度的数据例如,C语言中Char类型的宽度为1个字节,可表示一个字符(非数值数据),也可表示一个8位的整数(数值数据)不同机器上表示的同一种类型的数据可能宽度不同必须确定相应的机器

40、级数据表示方式和相应的处理指令(在第五章指令系统介绍具体指令),C语言中数值数据类型的宽度(单位:字节),从表中看出:同类型数据并不是所有机器都采用相同的宽度,分配的字节数随机器字长和编译器的不同而不同。,Compaq Alpha是一个针对高端应用的64位机器,即字长为64位,数据的存储和排列顺序,80年代开始,几乎所有机器都用字节编址ISA设计时要考虑的两个问题:如何从一个字节地址中取到一个32位的字?-字的存放问题一个字能否存放在任何字节边界?-字的边界对齐问题,例如,若 int i=0 x01234567,存放在内存100号单元,则用“取数”指令访问100号单元取出 i 时,必须清楚i的

41、4个字节是如何存放的。,大端方式(Big Endian):MSB所在的地址是数的地址 e.g.IBM 360/370,Motorola 68k,MIPS,Sparc,HP PA小端方式(Little Endian):LSB所在的地址是数的地址 e.g.Intel 80 x86,DEC VAX,有些机器两种方式都支持,可以通过特定的控制位来设定采用哪种方式。,BIG Endian versus Little Endian,Ex1:Memory layout of a number ABCDH located in 1000,Ex2:Memory layout of a number 00ABCD

42、EFH located in 1000,10011000,10011000,1000100110021003,1003100210011000,BIG Endian versus Little Endian,Ex3:Memory layout of a instruction located in 1000,假定小端机器中指令:mov AX,0 x12345(BX)其中操作码mov为40H,寄存器AX和BX分别为0001B和0010B,立即数占32位,则存放顺序为:,若在大端机器上,则存放顺序如何?,Byte Swap Problem(字节交换问题),78,56,34,12,0,1,2,3,i

43、ncreasingbyteaddress,Big Endian,12,34,56,78,0,1,2,3,Little Endian,每个系统内部是一致的,但在系统间通信时可能会发生问题!因为顺序不同,需要进行顺序转换音、视频和图像等文件格式或处理程序都涉及到字节顺序问题 ex.Little endian:GIF,PC Paintbrush,Microsoft RTF,etc Big endian:Adobe Photoshop,JPEG,MacPaint,etc,上述存放在0号单元的数据(字)是什么?,12345678H?78563412H?,存放方式不同的机器间程序移植或数据通信时,会发生什

44、么问题?,Alignment(对齐),目前机器字长一般为32位或64位,而存储器地址按字节编址指令系统支持对字节、半字、字及双字的运算,也有位处理指令各种不同长度的数据存放时,有两种处理方式:按边界对齐(假定字的宽度为32位,按字节编址)字地址:4的倍数(低两位为0)半字地址:2的倍数(低位为0)字节地址:任意不按边界对齐坏处:可能会增加访存次数!(学了第四章存储器组织后会更明白!),Alignment:要求数据的地址是相应的边界地址,示例 假设数据顺序:字-半字-双字-字节-半字-按边界对齐 边界不对齐,Alignment(对齐),如:int i,short k,double x,char

45、c,short j,则:,则:,x:3个周期j:2个周期,x:2个周期j:1个周期,增加了访存次数!,数据的检/纠错(Error Detect/Correct),为什么要进行数据的错误检测与校正?存取和传送时,由于元器件故障或噪音干扰等原因会出现差错。措施:(1)从计算机硬件本身的可靠性入手,在电路、电源、布线等各方面采取必要的措施,提高计算机的抗干扰能力;(2)采取相应的数据检错和校正措施,自动地发现并纠正错误。如何进行错误检测与校正?大多采用“冗余校验”思想,即除原数据信息外,还增加若干位编码,这些新增的代码被称为校验位。,数据的检/纠错,比较的结果为以下三种情况之一:没有检测到错误,得到

46、的数据位直接传送出去。检测到差错,并可以纠错。数据位和比较结果一起送入纠错器,将正确数据位传送出去。检测到错误,但无法确认哪位出错,因而不能进行纠错处理,此时,报告出错情况。,BACK,码字和码距,什么叫码距?由若干位代码组成的一个字叫“码字”两个码字中具有不同代码的位的个数叫这两个码字间的“距离”码制中各码字间最小距离为“码距”,它就是这个码制的距离。问题:“8421”码的码距是几?2(0010)和3(0011)间距离为1,“8421”码制的码距为1。数据校验中“码字”指数据位和校验位按某种规律排列得到的代码码距与检错、纠错能力的关系(当d4)若码距d为奇数,则能发现d-1位错,或能纠正(d

47、-1)/2位错。若码距d为偶数,则能发现d/2位错,并能纠正(d/2-1)位错。常用的数据校验码有:奇偶校验码、海明校验码、循环冗余校验码。,奇偶校验码,基本思想:增加一位奇(偶)校验位并一起存储或传送,根据终部件得到的相应数据和校验位,再求出新校验位,最后根据新校验位确定是否发生了错误。实现原理:假设数据B=bn-1bn-2.b1b0从源部件传送至终部件。在终部件接收到的数据为B=bn-1bn-2.b1b0。第一步:在源部件求出奇(偶)校验位P。若采用奇校验,则P=bn-1bn-2.b1b01。若采用偶校验,则P=bn-1bn-2.b1b0。第二步:在终部件求出奇(偶)校验位P。若采用奇校验

48、,则P=bn-1bn-2.b1b01。若采用偶校验,则P=bn-1bn-2.b1b0。第三步:计算最终的校验位P*,并根据其值判断有无奇偶错。假定P在终部件接受到的值为P,则P*=PP”若P*=1,则表示终部件接受的数据有奇数位错。若P*=0,则表示终部件接受的数据正确或有偶数个错。,奇偶校验法的特点,问题:奇偶校验码的码距是几?为什么?码距d=2。在奇偶校验码中,若两个数中有奇数位不同,则它们相应的校验位就不同;若有偶数位不同,则虽校验位相同,但至少有两位数据位不同。因而任意两个码字之间至少有两位不同。特点根据码距和纠/检错能力的关系,它只能发现奇数位出错,不能发现偶数位出错,而且也不能确定

49、发生错误的位置,不具有纠错能力。开销小,适用于校验一字节长的代码,故常被用于存储器读写检查或按字节传输过程中的数据校验 因为一字节长的代码发生错误时,1位出错的概率较大,两位以上出错则很少,所以可用奇偶校验。,海明校验码,由Richard Hamming于1950年提出,目前还被广泛使用。主要用于存储器中数据存取校验。基本思想:奇偶校验码对整个数据编码生成一位校验位。因此这种校验码检错能力差,并且没有纠错能力。如果将整个数据按某种规律分成若干组,对每组进行相应的奇偶检测,就能提供多位检错信息,从而对错误位置进行定位,并将其纠正。海明校验码实质上就是一种多重奇偶校验码。处理过程:最终比较时按位进

50、行异或,以确定是否有差错。这种异或操作所得到的结果称为故障字(syndrome word)。显然,校验码和故障字的位数是相同。,每一组一个校验位,校验码位数等于组数!每一组内采用一位奇偶校验!,校验码位数的确定,假定数据位数为n,校验码为k位,则故障字位数也为k位。k位故障字所能表示的状态最多是2K,每种状态可用来说明一种出错情况。若只有一位错,则结果可能是:数据中某一位错(n种可能)校验码中有一位错(k种可能)无错(1 种可能)假定最多有一位错,则n和k必须满足下列关系:2K1+n+k,即:2K-1n+k有效数据位数和校验码位数间的关系从表中可看出,当数据有8位时,校验码和故障字都应有4位。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号