05计算机体系结构最新23期改革版本.docx
- 文档编号:7497749
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:61
- 大小:2.28MB
05计算机体系结构最新23期改革版本.docx
《05计算机体系结构最新23期改革版本.docx》由会员分享,可在线阅读,更多相关《05计算机体系结构最新23期改革版本.docx(61页珍藏版)》请在冰豆网上搜索。
05计算机体系结构最新23期改革版本
计算机体系结构知识
适用班级:
软件设计师、网络工程师
主讲:
网址:
分值说明:
软件设计师考5-8分(早上试题)
网络工程师考3-6分(早上试题)
xxx培训中心
贵州·贵阳
2018年09月
目录
第1章计算机科学基础1
1.1数制及其转换1
1.1.1计算机中常用的数制1
1.1.2不同数制间的转换1
1.2数据的表示2
1.2.1数的机器码表示2
1.2.2定点数和浮点数4
1.3逻辑运算和算术运算5
1.3.1逻辑运算5
1.3.2算术运算5
1.3.3溢出判别6
第2章计算机体系结构7
2.1计算机系统结构概述7
2.2存储系统7
2.2.1主存(MainMemory)7
2.2.2高速缓存Cache8
2.2.3主存与Cache的地址映射9
2.2.4虚拟存储器11
2.2.5硬磁盘存储设备11
2.2.6相联存储器14
2.2.7缓冲区管理14
2.3指令系统16
2.3.1指令格式16
2.3.2操作码格式16
2.3.3地址码格式16
2.3.4扩展操作码17
2.3.5指令长度17
2.3.6指令和数据的寻址方式18
2.3.7CISC和RISC的区别18
2.4中央处理器19
2.4.1指令执行的过程20
2.4.2CPU指令执行流程图20
2.4.3CPU的组成20
2.5中断系统22
2.6流水线操作22
2.6.1指令流水线22
2.6.2流水线处理机的主要性能23
2.7总线结构25
2.7.1总线的定义与分类25
2.7.2系统总线标准27
2.7.3外总线标准27
2.8输入输出系统28
2.9多处理机与并行处理29
第3章计算机可靠性与系统性能基础知识30
3.1计算机可靠性与系统性能30
第1章计算机科学基础
1.1数制及其转换
1.1.1计算机中常用的数制
在计算机中,常涉及到的数制有二进制(基数为2)、八进制(基数为8)、十进制(基数为10)和十六进制(基数为16)。
1.十进制数
基数为10,逢十进一,数字位的表示从0到9,进制表示符号为D,如“12.3”按照位权展开:
(12.3)10=1×101+2×100+3×10-1=12.3D。
采用位置计数法,十进制按位权展开规律如下:
⏹整数部分
某数位对应的位权值是当前位值乘上以基数为底的幂,幂中指数为当前数位到小数点之间的数值个数(正数且不包含当前位),即位权值=位值×基数离小数点的数位个数,如(634.57)10中整数部分位权值依次是:
6×102、3×101、4×100。
⏹小数部分
某数位对应的位权值是当前位值乘上以基数为底的幂,幂中指数为当前数位到小数点之间的数值个数(负数且包含当前位),即位权值=位值×基数-离小数点的数位个数,如(634.57)10中小数部分位权值依次是:
5×10-1、7×10-2。
⏹合并
将整数部分和小数部分的位权值相加即为原数的位权展开式,如(634.57)10的位权展开式为6×102+3×101+4×100+5×10-1+7×10-2,即(634.57)10=6×102+3×101+4×100+5×10-1+7×10-2=634.57D。
位置计数法不仅仅适用于十进制数,同样适用于二进制、八进制和十六进制,只需要将幂中的底数改成相应的数制基数即可。
2.二进制数
基数为2,数字位符号只有0和1,逢二进一,进制表示符号为B,如“11.1”按照位权展开:
(11.1)2=1×21+1×20+1×2-1=11.1B。
3.八进制数
基数为8,逢八进一,数字位的表示从0到7,进制表示符号为O,如“11.1”按照位权展开:
(11.1)8=1×81+1×80+1×8-1=11.1O
4.十六进制数
基数为16,逢十六进一,数字位的表示从0到9,10用A表示,以此类推11为B,12为C,13为D,14为E,15为F,进制表示符号为H,如“4FD”按照位权展开:
(4FD)16=4×162+15×161+13×160=4FDH
1.1.2不同数制间的转换
各种数制之间的相互转化知识在软考中频率很高,请一定学会这部分知识。
1.二、八、十六进制转换为十进制
其他进制转化为十进制数使用的是位置计数法。
⏹二进制转10进制:
(11.1)2=11.1B=1×21+1×20+1×2-1=2+1+0.5=(3.5)10
⏹八进制转10进制:
(11.1)8=11.1O=1×81+1×80+1×8-1=8+1+0.125=(9.125)10
⏹十六进制转10进制:
(4FD)16=4FDH=4×162+15×161+13×160=1024+240+13=(1277)10
2.十进制转其他进制
十进制转换为其他进制,将十进制数及其商连续除目标进制的基数(除数为0时停止),最后将余数从下往上连续写出来便构成十进制数对应的其他进制数,过程如图1.1所示。
在图中,127D=1111111B,127D=177O,127D=7FH。
图1.1十进制转二进制、八进制和十六进制
3.八进制转换为二进制
⏹用“1位拆分为3位”的方法,如(7.2)8=111.010B=(111.010)2
4.十六进制转换为二进制
⏹用“1位拆分为4位”的方法,A2B.CH=101000101011.1100B=(101000101011.1100)2
5.二进制转换为八进制和十六进制
二进制转换为八进制是八进制转换为二进制的逆过程,以二进制中的小数点为分界点分别向左和向右分组,每三位一组,整数部分分组位数不够时在分组前补0,小数部分分组位数不够,在分组后补零。
如10111.01B转换为八进制,先分组并补零后得(带下划线的为补零位):
010111.010B,再转换为八进制为:
27.2O。
二进制转换为十六进制的过程与二进制转换为八进制的过程雷同,不同的是4位为一组。
如10111.01B转换为十六进制,先分组并补零后得:
00010111.0100B,再转换为十六进制为:
17.4H。
6.各种进制小范围数据对照表
如表1.1所示为十进制、二进制、八进制、十六进制基数对照表,这些数据只是小范围数据,学员必须牢牢记住。
表1.1十进制、二进制、八进制、十六进制基数对照表
十进制
二进制
八进制
十六进制
0D
0000B
0O
0H
1D
0001B
1O
1H
2D
0010B
2O
2H
3D
0011B
3O
3H
4D
0100B
4O
4H
5D
0101B
5O
5H
6D
0110B
6O
6H
7D
0111B
7O
7H
8D
1000B
10O
8H
9D
1001B
11O
9H
10D
1010B
12O
AH
11D
1011B
13O
BH
12D
1100B
14O
CH
13D
1101B
15O
DH
14D
1110B
16O
EH
15D
1111B
17O
FH
16D
10000B
20O
10H
1.2数据的表示
各种数值在计算机中表示的形式称为机器数,其特点是采用二进制计数制,数的符号用0,1表示,小数点则隐含表示而不占位置。
机器数对应的实际数值称为数的真值。
机器数有无符号数和有符号数之分。
无符号数表示正数,在机器数中没有符号位。
对于无符号数,若约定小数点的位置在机器数的最低位之后,则是纯整数;若约定小数点的位置在机器数的最高位之前,则是纯小数。
对于有符号数,机器数的最高位是表示正、负的符号位,其余位则表示数值。
若约定小数点的位置在机器数的最低数值之后,则是纯整数;若约定小数点的位置在机器数的最高数值位之前(符号位之后),则是纯小数。
为了便于运算,有符号的机器数可采用原码、反码和补码等不同的码制方法,机器数的这些编码方法称为码制。
1.2.1数的机器码表示
这里假设机器字长为n位,即有符号数用n个二进制位表示,最高位为符号位(0表示正数,1表示负数),其余n-1位为数值的绝对值。
以下的码制讲解都假设机器字长为8位。
⏹机器字长:
机器字长也就是运算器进行定点数运算的字长,通常也是CPU内部数据通路的宽度。
即字长越长,数的表示范围也越大,精度也越高。
机器的字长也会影响机器的运算速度。
倘若CPU字长较短,又要运算位数较多的数据,那么需要经过两次或多次的运算才能完成,这样势必影响整机的运行速度。
1.原码:
符号位用0表示正数,1表示负数,其余位不变。
[+1]原=00000001[-1]原=10000001[+127]原=01111111[-127]原=11111111
[+45]原=00101101[-45]原=10101101[+0.5]原=01000000[-0.5]原=11000000
[+0]原=00000000[-0]原=10000000
注意:
纯整数约定小数点的位置在机器数的最低位之后,纯小数约定小数点在机器数的最高数值位之前(符号位之后),且小数点隐含表示而不占位置,但在理解时要加上小数的位置理解,如(+127)原=01111111理解为“01111111.”,(+0.5)原=01000000理解为“0.1000000”,但其中的“0.”中的“0”(表示正数)为符号位,(-0.5)原=11000000理解为“1.1000000”,其中的“1.”中的“1”(表示负数)为符号位。
故计算机在实际存储时将纯小数中数值意义上的“0.”隐含而不存储的方式进行处理,但我们自己要注意理解。
2.反码:
正数的反码与原码一样,负数的反码是对它的原码(除符号位外)各位取反。
[+1]反=00000001[-1]反=11111110[+127]反=01111111[-127]反=10000000
[+45]反=00101101[-45]反=11010010[+0.5]反=01000000[-0.5]反=10111111
[+0]反=00000000[-0]反=11111111
3.补码:
正数的补码与原码一样,负数的补码是其反码尾部加1。
[+1]补=00000001[-1]补=11111111[+127]补=01111111[-127]补=10000001
[+45]补=00101101[-45]补=11010011[+0.5]补=01000000[-0.5]补=11000000
[+0]补=00000000[-0]补=00000000
注意:
在(-0)反=11111111的基础上加1后结果为100000000(9位),而此部分讲解是假设计算机字长为8位,所以100000000(9位)中的1就被扔掉而变成8位的00000000,故(-0)补=00000000。
记住:
在补码表示中,0有唯一的编码:
(+0)补与(-0)补都是00000000。
4.移码:
移码表示法是在数X上增加一个偏移量来定义的,通常用于表示浮点数的阶码。
如果机器字长为n,规定偏移量为2n-1,则移码定义如下:
⏹X为纯整数:
[X]移=2n-1+X(-2n-1≤X<2n-1)
⏹X为纯小数:
[X]移=1+X(-1≤X<1)
这里还是假设某机器字长为8,则+1、-1、+127、-127、+45、-45、+0.5、-0.5、+0、-0对应的移码表示如下:
[+1]移=28-1+1=129=10000001[-1]移=28-1-1=127=01111111[+127]移=28-1+127=255=11111111
[-127]移=28-1-127=1=00000001[+45]移=28-1+45=173=10101101[-45]移=28-1-45=83=01010011
[+0.5]移=1+0.5=1.5=11000000[-0.5]移=1-0.5=0.5=01000000[+0]移=[-0]移=10000000
注意:
实际上在偏移2n-1情况下,只要将补码的符号位取反便是相应的移码表示;在移码中,0有唯一的编码:
10000000。
记住:
在原码、反码、补码和移码表示中,补码和移码中的0都有唯一值。
5.原码、反码、补码和移码的作用
⏹原码:
对于计算机,加减乘除是最基础的运算,要设计的尽量简单。
计算机辨别“符号位”显然会让计算机的基础电路设计变得十分复杂!
于是科学家想出了将符号位也参与运算的方法。
我们知道,根据运算法则减去一个正数等于加上一个负数,即:
1-1=1+(-1)=0,所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了。
在运算中,原码进行加法运算是没有问题的,但是在减法运算中会出问题,如:
1D-1D=1D+(-1)D=[00000001]原+[10000001]原=[10000010]原=-2D,这个结果明显是错误的!
如果用原码表示,让符号位也参与计算,显然对于减法来说,结果是不正确的。
这也就是为何计算机内部不使用原码表示一个数的原因。
为了解决原码做减法的问题,出现了反码。
⏹反码:
使用反码计算1-1过程如下:
1D-1D=1D+(-1)D=[00000001]原+[10000001]原=[00000001]反+[11111110]反=[11111111]反=[10000000]原=-0D,发现用反码计算减法,结果的真值部分是正确的。
而唯一的问题其实就出现在“0”这个特殊的数值上。
虽然人们理解上+0和-0是一样的,但在这里0带符号是没有任何意义的,而且会有[00000000]原和[10000000]原两个编码表示0。
于是补码的出现,解决了0的符号和0的两个编码问题,以及原码和补码进行减法运算时出现的问题。
⏹补码:
使用补码计算1-1过程如下:
1D-1D=1D+(-1)D=[00000001]原+[10000001]原=[00000001]补+[11111111]补=[00000000]反=[00000000]原=0D,这样0用00000000表示,而以前出现问题的-0则不存在了,且在补码中0也只有一种唯一的表示形式。
假设机器字长为8位,使用补码可以用[10000000]补表示-128D:
(-1)D+(-127)D=[10000001]原+[11111111]原=[11111111]补+[10000001]补=[10000000]补,最终运算结果应为“[110000000]补”,但由于机器字长为8位,最左边的“1”被丢掉了,故只剩下[10000000]补。
-1-127的结果应该是-128,在用补码运算的结果中,[10000000]补就是-128。
但是注意因为实际上是使用以前的-0的补码来表示-128,所以-128并没有原码和反码表示(对-128的补码表示[10000000]补算出来的原码是[00000000]原,这是不正确的)。
使用补码,不仅仅修复了0的符号以及0的两个编码的问题,而且还能够多表示一个最低数。
这就是为什么8位二进制使用原码或反码表示的范围为[-127,+127],而使用补码表示的范围为[-128,127]的原因。
因为机器使用补码,所以对于编程中常用到的32位int类型,可以表示范围是(最高位是符号位):
[-231,231-1],使用补码表示时可以多保存一个最小值-231。
假设机器字长为n位,则使用补码表示的最小的一个数是-2n-1。
⏹移码:
常用来比较大小,一般会把浮点数的阶码用移码表示。
当把数值用移码表示出来可一眼看出它们的大小,这样很容易判断阶码的大小,移码可用于简化浮点数的乘除法运算。
总之,反码用来解决负数加法运算问题,将减法运算转换为加法运算,从而简化运算规则;补码解决负数加法运算正负零问题,弥补了反码的不足。
反码与补码都是为了解决负数运算问题,跟正数没关系,因此,不管是正整数还是正小数,原码,反码,补码都全部相同。
将补码符号位取反即得到相应的移码。
历年试题
●(2011年上)原码表示法和补码表示法是计算机中用于表示数据的两种编码方法,在计算机系统中常采用补码来表示和运算数据,原因是采用补码可以(4)。
(4)A.保证运算过程与手工运算方法保持一致B.简化计算机运算部件的设计
C.提高数据的运算速度D.提高数据的运算精度
●(2010年上)若某整数的16位补码为FFFFH(H表示十六进制),则该数的十进制值为(20)。
(20)A.0B.-1C.216-1D.-216+1
●(2009年上)计算机中常采用原码、反码、补码和移码表示数据,其中,±0编码相同的是(5)。
(5)A.原码和补码B.反码和补码C.补码和移码D.原码和移码
1.2.2定点数和浮点数
1.定点数的表示方法
其实这个概念之前也有提到一点,所谓定点定点数,即约定机器中所有数据的小数点位置是固定不变的数。
例如真值X存储如图1.2所示:
图1.2定点格式
⏹定点整数:
纯整数,小数点位于最低位Xn的右边,但在计算机中被隐含而不占用实际的存储位置。
⏹定点小数:
纯小数,小数点约定位于X0和X1之间,但在计算机中“0.”被隐含而不占用实际的存储位置。
为了方便,一般只采取三种简单的约定,相应有三种类型的约定:
无符号整数、带符号定点整数、带符号定点小数。
假设机器字长为n,各种码制下带符号数的表示范围如表1.2所示。
表1.2机器字长为n时各种码制表示的有符号数的范围
2.浮点数表示方法
由于定点数所能表示的数值范围比较小,运算中很容易因结果超出范围而溢出,因此引入了浮点数,浮点数是小数点位置不固定的数,它能表示更大范围的数。
在十进制数中,83.125可写成0.083125×103或0.0083125×104等。
同理,一个二进制也可以写成多种表示形式,如1011.10101可以写成24×0.101110101、25×0.0101110101等。
由此可知,一个二进制数N可表示成:
N=RE*M,其中M称为尾数,通常为小数,E为指数,是一个整数,即阶码,R为基数,可采用2,8或16进制等,这种表示法称为浮点数表示法。
在浮点表示法中,阶码通常为带符号的纯整数,尾数为带符号的纯小数。
浮点数的表示格式如下:
图1.3浮点数的表示
一个数的浮点表示不是唯一的,当小数点的位置改变时,阶码也随着改变,因此可以用多种浮点形式表示同一个数。
浮点数所能表示的数值范围主要由阶码决定,而表示的精度由尾数决定。
为了充分利用尾数来表示更多的有效数字,通常采用规格化浮点数。
规格化就是将尾数的绝对值限定在[0.5,1]区间。
当尾数用补码表示时,需要注意如下的问题:
⏹如尾数M≥0,则规格化的尾数形式为M=0.1××ו••××,其中×可为0,也可以为1,即将尾数M的范围限定在区间[0.5,1]。
⏹如尾数M<0,则规格化的尾数形式为M=1.0××ו••××,其中×可为0,也可以为1,即将尾数M的范围限定在区间[-1,-0.5]。
注意:
若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是唯一的,例:
十进制数11,如果尾数只用2位存储,则可以表示为0.11*102,也可以表示为0.01*103(由于只有2位存储,0.001被丢失了),可见0.11*102精度高,浮点数的精度是由尾数的长度来确定的。
为了提高数据的表示精度,应该对不满足规格化的尾数进行左归或右归变成规格化的表示形式:
⏹左规:
如当尾数出现0.0××ו••××时,即数字左移一位,阶码减1,直到符合规格化表示式为止。
⏹右规:
当尾数出现1.××ו••××时,数字右移一位,阶码加1,直到符合规格化表示式为止。
3.工业化标准IEEE754
IEEE754是由IEEE(InstituteofElectricalandElectronicsEngineers)提出有关浮点数的工业标准。
该标准表示形式如下:
(-1)S2E(b0b1b2b3•••bp-1),其中,(-1)S为该浮点数的数符,当S为0时表示正数,S为1时表示负数;E为指数(阶码),用移码表示;(b0b1b2b3•••bp-1)为尾数,其长度为P位,用原码表示。
图1.4为32位单精度浮点数的IEEE754标准格式(以32位二进制形式在计算机中存储)。
其中S为1位,即0或1,E为8位(最高位为符号位),尾数长度P为23位:
图1.432位浮点数的标准格式
在总长为32位的单精度浮点数存储结构中,最大指数为+127,最小指数为-126,指数偏移量为+127。
在IEEE754标准中,约定小数点左边隐含一位,通常这个位就是1,因此单精度浮点数尾数的有效位数为24位(但计算机实际只存储23位,隐含的“1.”不存储),即尾数为1.××ו••××。
例:
利用IEEE754标准将数176.0625表示为单精度浮点数。
解:
首先将该十进制转换成二进制为:
(176.0625)10=(10110000.0001)2,其次对二进制数进行规格化处理,10110000.0001=1.01100000001×27,这样保证了b0为1,且尾数为1.01100000001,在小数点右边部分最低位后补零满24位得1.01100000001000000000000,将“1.0”隐含掉得计算机实际存储的23位尾数:
M=01100000001000000000000,这样便得到了满足图1.4所示的单精度尾数部分。
然后求阶码,上述表示中的指数为7,而单精度浮点数规定指数的偏移量为127(注意,不是前面移码描述中提到得的128),即在指数7上加127。
那么E=7+127=134,则指数的移码表示为10000110。
最后,由于本例中数是一个正数,故S为0。
最终得到(176.0625)10的单精度浮点数结果为:
010*********000000000000,结合图1.4理解为:
历年真题
●(2015年下)浮点数能够表示的数的范围是由(3)的位数决定的。
(3)A.尾数B.阶码C.数符D.阶符
●(2012年下)以下关于数的定点表示和浮点表示的叙述中,不正确的是(3)。
(3)A.定点表示法表示的数(称为定点数)常分为定点整数和定点小数两种
B.定点表示法中,小数点需要占用一个存储位
C.浮点表示法用阶码和尾数来表示数,称为浮点数
D.在总位数相同的情况下,浮点表示法可以表示更大的数
●(2011年上)计算机中的浮点数由三部分组成:
符号位S,指数部分E(称为阶码)和尾数部分M。
在总长度固定的情况下,增加E的位数、减少M的位数可以(5)。
(5)A.扩大可表示的数的范围同时降低精度B.扩大可表示的数的范围同时提高精度
C.减小可表示的数的范围同时降低精度D.减小可表示的数的范围同时提高精度
●(2009年下)浮点数的一般表示形式为N=2E*F,其中E为阶码,F为尾数。
以下关于浮点表示的叙述中,错误的是(3)。
两个浮点数进行相加运算,应首先(4)。
(3)A.阶码的长度决定浮点表示的范围,尾数的长度决定浮点表示的精度
B.工业标准IEEE754浮点数格式中阶码采用移码、尾数采用原码表示
C.规格化指的是阶码采用移码、尾数采用补码
D.规格化表示要求将尾数的绝对值限定在区间[0.5,1]
(4)A.将较大的数进行规格化处理B.将较小的数进行规格化处理C.将这两个数的尾数相加D.统一这两个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 05 计算机体系结构 最新 23 改革 版本
![提示](https://static.bdocx.com/images/bang_tan.gif)