计算机系统结构试题

要有答案

  题2.1 数据结构和机器的数据表示之间是什么关系?确定和引入数据表示的基本原则是什么?
  [解答] 数据表示是数据结构的组成元素,数据结构要通过软件映象变换成机器所具有的各种数据表示来实现。不同的数据表示可为数据结构的实现提供不同的支持,表现在实现效率和方便性上不同。数据结构和数据表示是软件和硬件之间的交界面。
  确定和引入数据表示的基本原则:一是看系统效率有否提高,即是否减少了实现的时间和存贮的空间,实现时间有否减少又主要看在主存和处理机之间传送的信息量有否减少;二是看引入这种数据表示的通用性和利用率是否较高。
  题2.2 标志符数据表示与描述符数据表示有何区别?描述符数据表示与向量数据表示对向量数据结构所提供的支持有什么不同?
  [解答] 在标志符数据表示中,标志符是与每个数据相连的,并且合存在同一个存贮单元中,用于描述单个数据的类型等属性;在描述符数据表示中,数据描述符是与数据分开独立存放的,主要是用于描述成块数据的类型属性,地址及其它信息的。
  描述符数据表示在实现向量、阵列数据元素的索引上要比用变址方法的方便,能更快地形成元素的地址,从而可以迅速进行访问,同时,也有利于检查程序中的向量、数组在使用中是否越界。因此,它为向量、数组数据结构的实现提供了一定的支持,有利于简化编译中的代码生成。但是,描述符数据表示并没有向量、数组的运算类指令,也没有采用流水或处理单元阵列形式的高速运算硬件,没有时阵列中每个元素又是一个子阵列的相关型交叉阵列进行处理的硬件。也投有时大量元素是零的稀疏向量和数据进行压缩存贮、还原、运算等指令和硬件。因此,它对向量和数组的数据结构提供的支持不够强,所以并不是向量数据表示。
  题2.3 堆栈型机器与通用寄存器型机器的主要区别是什么?堆栈型机器系统结构为程序调用的哪些操作提供了支持?
  [解答] 通用寄存器型机器对堆栈数据结构的实现支持较差。这表现在:堆栈操作用的机器指令数少,一般只是些简单的压入(PUSH)和弹出(POP)之类的指令,功能单一;堆栈被放置于主存中,因此每次访问堆栈都要进行访存,速度低;堆栈一般只用于保存于程序调用时的返回地址,只有少量参数经堆栈来传递,大部分参数都是通过寄存器或内存区来传递的。
  堆栈型机器则不同,它主要表现在:有高速寄存器型的硬件堆栈,附加有控制电路让它与主存中的堆栈区在逻辑上构成一个整体,从而使堆栈的访问速度接近于寄存器的速度,容量却是主存的;有对堆栈的栈顶元素或栈顶元素和次栈顶元素进行各种操作和运算处理的丰富的堆栈操作指令,且功能很强;有力地支持高级语言程序的编译,由逆波兰表达式作为编译的中间语言,就可直接生成堆栈指令构成的程序,进行多元素表达式的计算,有力地支持于程序的嵌套和递归调用。
  堆栈型机器系统结构为程序的嵌套和递归调用提供了很强的支持,表现在:在程序调用时,不仅用堆栈保存返回地址,还保存条件码等多种状态信息和某些关键寄存器的内容,如全局性参数、局部性参数,以及为被调用的程序在堆栈中建立一个存放局部变量、中间结果等现场信息的工作区。堆栈机器在程序调用时,将这些内容全部用硬件方式压入堆栈。当子程序返回时,返回地址、运算结果、返回点现场信息均通过于程序返回指令用硬件方式从堆栈中弹出。只需修改堆栈指针内容就可删去堆栈中不用的信息。堆栈机器能及时释放不用的单元,访问堆栈时大量使用零地址指令,省去了地址码字段。即使访问主存,也采用相对寻址,使访存的地址位数较少,从而使堆栈型机器上运行的程序较短,程序执行时所用的存贮单元数少,存贮效率较高。
  题2.4 设某机阶码6位、尾数48位。阶符和数符不在其内,当尾数分别以2、8、16为基时,在非负阶、正尾数、规格化数情况下,求出 其最小阶、最大阶、阶的个数,最小尾数值、最大尾数值、可表示的最小值和最大值及可表示的规格化数的总个数。
  [分析] 由教材中图2.7的浮点数表示格式可知,阶码6位,就是阶码部分除去阶符外,剩下的阶码值部分为6位;尾数48位,就是尾数的二进位位数m=48位。当尾数基值为rm时,尾数每一个rm。进制数位需用 个二进位表示。尾数基值为rm的尾数位数m’=m/ 。对于rm为2、8、16时,m’分别为48、16、12位。
  由于是非负阶,最小阶应当是阶值部分为全“0”。所以,最小阶为0。最大阶应当是阶值部分6位为全‘l”,所以,最大阶为2 -1,即26-1(=63)。阶的个数由阶值0到2 -1l,共有2 个,即64个。
  所谓规格化正尾数,就是正尾数小数点后的第1个rm进制数位不是0的数。因为尾数为全“0”的数是机器零,不作为机器中可表示的数。所以,最小正尾数值应当是rm进制尾数的小数点后第1个rm进制数位为“1”,其余数位为全“0”的数值,即1 rm 。最大正尾数值当然是rm进制尾数各数位均为rm一1的数。可以设想,在小数点后,rm进制的第m’个数位上加1,即加上rm-m’,就会使整个尾数值变为1。所以。可表示的最大尾数值应当是1- rm-m’。
  按浮点数表示格式的含义,浮点数的值应当是r 尾数值。浮点数可表示的最小值应当是阶为非负阶的最小值0,尾数为规格化最小正尾数值,所以,可表示浮点数最小值应当为rm0• rm-1= rm-1;可表示浮点数的最大值应当是阶为正的最大值2 -1,尾数为规格化正尾数最大值,所以,可表示浮点数的最大值应为r •(1- r )。
  可表示的浮点数规格化数的总个数应当是可表示阶的个数与可表示尾数的个数的乘积。由于在m’个尾数rm进制数位中,每个数位均可以有0~(rm-1),共有rm个码,所以,尾数的编码总个数为r 个,但应当去掉小数点后第1个数位是0的那些非规格化的数。显然,非规格化数的个数占了全部尾数可编码总数的l/rm的比例。所以,可表示的浮点数规格化数的总个数就为2 •r •(1-1/rm) 。
  只要将p、m、m’、 rm的具体值代入上述各式就可以得到本题的解答。
  [解答] p=6、m=48时,在非负阶、规格化、正尾数情况下,rm =2、8、16时的各个参数的计算结果如表2.1所示。
  非负阶、正尾数、规格化 尾基rm(p=16位,m=48位)
  2(m’=48) 8(m’=16) 16(m’=12)
  最小阶值 0 0 0 0
  最大阶值 2 -1
  63 63 63
  阶的个数 2
  64 64 64
  尾数最小值 rm-1 1/2 1/8 1/16
  尾数最大值 1- rm-m’ 1-2-48 1-8-16 1-16-12
  最小值 rm-1 1/2 1/8 1/16
  最大值 r •(1- r )
  263•(1-2-48) 863•(1-8-16) 1663•(1-16-12)
  数的总个数 2 •r •
  2
  7
  15

  题2.5 (1)浮点数系统使用的阶基rp=2。阶码位数p=2,尾数基值rm=10,以rm为基的尾数位数m’=1,按照使用的位数来说,等价于m=4。试计算在非负阶、正尾数、规格化数情况下的最小尾数值、最大尾数值、最大阶值、可表示的最小值和最大值及可表示数的个数。
  (2)对于rp=2,p=2,rm=4,m’=2,重复以上计算。
  [分析] 因为尾数基值rm=10,所以,rm进制尾数的每个数位只能取0~9中的一个值,即每个数位能取的最大值为9。
  [解答] (1)在非负阶、正尾数、规格化数的情况下,
  最小尾数值为rm-1=l0-1=0.1
  最大尾数值为1- rm-m’=1-10-1=0.9
  最大阶值为2 -1=2
  可表示的最小值为=rm-1=10-1=0.1
  可表示的最大值为r •(1- r )=103 (1-10-1)=900
  可表示的数的个数为2 •r • =
  (2)最小尾数值为rm-1=4-1=0.25
  最大尾数值为1- rm-m’=1-4-2=15/16
  最大阶值为2 -1=22-1=3
  可表示的最小值为rm-1=4-1=0.25
  可表示的最大值为r •(1- r )=
  可表示的数的个数为2 •r • =4
  题2.6 由4位数(其中最低位为下溢处理之附加位)经ROM查表舍入法下溢处理成3位结果,设计使下滥处理干均误差接近于零的ROM表,列出ROM编码表地址与内容的对应关系。
  [分析] 根据题意,ROM表应当有24个单元。其中,每个单元的地址为待下溢处理的值,该地址单元的内容应为下滥处理后的3位结果值。所以,ROM表存贮单元的字长为3位。
  下溢处理表的填表原则是除了待处理的4位码的最高3位为全“1”时,按截断法填成全“1”外,其它情况均按4位(地址)码的最低位按0舍1入来填处理后相应该单元的3位结果。这样,既可体现出舍入法的优点。又避免了舍入法因进位影响下滥处理的速度的缺陷。同时,让完全用舍入法处理时所产生的平均误差略偏正的值可以与截断法的平均误差为负进行抵消,从而使经过这样的下溢处理之后,能让平均误差人为地调整到接近于零。
  [解答] ROM下溢处理表16个单元的地址码0000~1111,它与其内容(即下溢处理后的3位结果值)的对照关系如表2.2所示。
  地址 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
  内容 000 001 001 010 010 011 011 100 100 101 101 110 110 111 111 111
  题2.9 变址寻址和基址寻址各适用于何种场合?设计一种只用6位地址码就可以指向一个大地址空间中任意64个地址之一的寻址机构。
  [解答] 变址寻址适合在标量计算机中,通过循环程序对变址寄存#内容修改其变址值,来对向量或数组等数据结构中的元素进行访问和处理。基址寻址则主要是对程序的逻辑地址空间到物理地址空间进行变换时使用的,以支持程序使用动态再定位的技术。
  设计一种只用6位地址码就可以指向一个大地址空间中任意64个地址之一的寻址机构,意味着指令中为寻找该操作数的地址码只有6位,只好用来表示这64个地址中的某一个。那么,这64个地址之一应当是在哪个大的地址空间中的,就得使用其它办法来指明。这里可列举常见的两种做法。
  一种是采用隐含寻址,让标志这64个地址是相对哪个基点地址的区域,用指令隐式规定的某个专门的寄存器中所存放的基址值来给出。例如,可约定某个变址寄存器或某个基址寄存器。程序执行时,每当要访存时,就可以经硬件加法器将隐含寄存器的基址值与指令中给出的6位相对位移量相加来形成其访存单元的物理地址。
  另一种是规定基点地址就用程序计数器,程序计数器(PC)存放的是当前所执行指令 的下一条指令所在主存中的地址(或偏移地址),因此,可以通过使用无条件转移指令来修改PC的内容,实现在一个大的地址空间中的访问,这就是所谓的PC自相对寻址。做法是通过将PC的内容和指令中所提供的6位相对位移量相加来形成主存单元的物理地址。
  题2.8 指令中常用下列寻址方式来得到操作数:立即操作数、间接寻址、直接寻址、寄存器寻址、自相对寻址。请分别说明这些寻址方法的原理,井对它们在如下4个方面进行比较:可表示操作数的范围大小;除取指外,为获得操作数所需访问主存的最少次数;为指明该操作数所占用指令中的信息位数的多少;寻址复杂性程度。
  [解答] 指令为寻找或访问到所需操作数的某种寻址方式,其含义在不同的计算机中会有所差别。下面,我们以大多数计算机中的情况来定义。
  立即操作数的寻址原理是,操作数以常数形式直接存放在指令中操作码的后面。一旦指令被取出,操作数也被取得,立即可以使用。立即操作数由于受机器指令字长的限制,可表示数的范围小,一般为8位或16位的二进制常数。指令取出后,为获得操作数不需要再访存,即访存0次。操作数所占用指令中的信息位数是立即数在可表示最大值范围时所要占用的二进位位数。寻址的复杂性程度相对最低。
  间接寻址可以有寄存器间接寻址和存贮器间接寻址两种。其寻址原理是,在指令的操作数地址字段上只给出存放操作数在内存中物理地址的寄存器号或存贮单元地址。先由指令操作数地址字段,从寄存器或存贮单元中取出数在存贮器中的地址。再按此地址访存,才能间接取得所要的操作数。有的计算机在存贮器间接寻址时,还可以有多重间接寻址,即从存贮单元中取出的内容作为地址。再去访有时得到的并不是操作数,而只是操作数在内存中的地址,或是地址的地址。如此顺序递推。间接寻址访问到的操作数范围大,可以是主存中能访问到可表示数值范围最大的数。除取指外,获得所需操作数所需访问主存的最少次数,对于奇存器间接寻址为一次。对于存贮器间接寻址为两次。为指明该操作数所占用指令中的信息位数,对于寄存器间接寻址来说,只是为寄存器编号所占用的二进位位数,这种位数一般很短(例如,16个通用寄存器的编号只需用4位二进位);而对于存贮器间接寻址来说,需占访存逻辑地址所需的全部位数。间接寻址的复杂性一般最高。其中,寄存器间接寻址较存贮器间接寻址简单,最复杂的是存贮器多重间接寻址。
  直接寻址的原理是,由指令中操作数地址码字段给出存放操作数在内存中的有效地址或物理地址。直接寻址可表示操作数值的范围大,可以是主存中能访问的可表示值范围最大的数。除取指外,为获得所需操作数,需要再访问一次主存。为指明操作数所占用指令中的信息位数,是访存单元的有效地址或物理地址所需要的位数。直接寻址的复杂性较寄存器寻址的大,而它较寄存器间接寻址要简单些。
  寄存器寻址的原理是,指令的操作数地址码宇段给出存放操作数所用的寄存器号。可表示操作数的范围大小取决于存放操作数所用的寄存器的二进位位数。除取指外,为获得操作数不用访存,即访存0次。为指明操作数所占用指令中的信息位数,只是寄存器编号所占的二进位位数,很短。例如,16个寄存器编号只需4位二进位。寄存器寻址简单,其取数的时间要比访存的时间短很多。
  自相对寻址方式主要用于转移指令形成转向目标地址,有的也用于访问存贮器找操作数。以访问存贮器操作数寻址为例,指令中操作数字段给出所访问操作数存放在主存中相对于指令计数器当前值的位移地址。自相对寻址所寻址的操作数可表示值范围大,可以是主存中能访问的可表示值范围最大的数。除取指外,为获得操作数所需访存的次数为1次。为指明该操作数所占用指令中的信息位数取决于允许的最大相对位移量大小。寻址复杂性较直接寻址的略复杂些。
  题2.9 设计如IBM 370那样有基地址寄存器的机器的另一种办法是,每条指令不用现在的基地址寄存器地址(4位)加位移量(12位)共16位作为地址码,而是让每条指令都有一个24位的直接地址。针对下面两种情况,评价一下这个方法的优、缺点:
  (1)数据集中于有限几块,但这些块分布在整个存贮空间;
  (2)数据均匀地分布在整个地址空间中。
  你认为IBM 370的设计者在实际应用中考虑了这两种情况中的哪一种可能性?为什么?
  [解答] 采用基地址寄存器加位移量作地址码,使指令中操作数的地址码只需要16位,不必使用24位直接地址。这样,可以大大减少程序中操作数地址字段所占用的存贮空间量。但是,每次访主存找操作数需要将逻辑地址经地址加法器变换成24位的物理地址,这需要花费一些时间。这对于数据集中于有限几块,而这些块又是分布在整个地址空间来说是有利的。用基址指向某个局部区间在主存中的基点位置,用位移量表示局部区域内相对基点地址的位移。如果用24位地址直接寻址,将会使其高位地址码的变化频率很低,虽然这不需要地址变换,形成物理地址的速度有所加快,但程序中操作数地址字段所花费的存贮空间量较大。这种寻址对于数据均匀地分布在整个地址空间中是有利的。
  IBM 370设计者之所以采用基地址寄存器加位移量的方式,是因为在实际应用中,程序存在着局部性,数据往往集中簇聚于有限的几块中,这些块又可能分布在整个存贮空间里。考虑到地址加法器硬件形成物理地址的速度较高,利用哈夫曼压缩概念,从空间和时间上的得失比较来看,速度下降不太显著,却可使程序所占存贮空间有显著减少。
  题2.10 经统计,某机14条指令的使用频度分别为:0.01,0.15,0.12,0.03,0.02,0.04,0.02,0.04,0.01,0.13,0.15,0.14,0.11,0.03。分别求出用等长二进制编码、Huffman编码、只能用两种码长的扩展操作码编码等3种方式的操作码平均码长。
  [分析] 等长操作码的意思是不管其指令的频度如何,都用同样长度的二进制码位数
  来对指令操作码编码。显然,当指令系统中的指令条数为n时,等长操作码的二进制码位
  数应当是 。
  Huffman编码是用Huffman算法构造出Huffman树来得到的。它的平均码长是用 •l 计算求得的。
  只有两种码长的扩展操作码编码,则需要对指令使用频度进行按大小分群。将高频的指令分在同一群中,对其用短的操作码编码,而将低频的指令分在另一群中,使用长操作码编码。每一群都各自用等长操作码编码。这时,为能唯一解码和立即解码,在短操作码中还要使用某些码来作为扩展成长操作码的扩展标志码。经过综合权衡,使平均码长尽可能短,来定好长、短码的码长组配关系。从而,再用 •l 来求得其平均码长。
  [解答] 14条指令的等长操作码的平均码长是 位,即4位。
  Huffman编码可先用Huffman算法构造出Huffman树。本题的Huffman树如图2.1所示。
  图中,叶子上用圆括号所括起的数字是表示该频度指令所用的二进位编码的码位数, 所以Huffman编码的操作码平均码长为 •l =3.38位。

  采用只有两种码长的扩展操作码,可根据14条指令所给出的使用频度值分成两群。让使用频度较高的6种指令用3位操作码编码表示。例如,用000~101分别表示使用频度为0.15、0.15、0.14、0.13、0.12、0.11的指令的操作码。留下110和111两个3位码作为长码的扩展标志,扩展出2位码。从而用5位码就可以各扩展出4条使用频度较低的指令,这样,共有8条使用频度较低的指令符合题目的要求。由此可求得操作码的平均码长为
  •l =3 位
  题2.11 若某机要求有:三地址指令4条,单地址指令255条,零地址指令16条。设指令字长为12位,每个地址码长为3位。问能否以扩展操作码为其编码?如果其中单地址指令为254条呢?说明其理由。
  [分析] 无论是哈夫曼编码,还是扩展操作码编码,其中的短码都不能与长码的首都有相同的。否则,由于短码成了长码的前缀,而指令中除了操作码外,后面所跟的,或者是操作数,或者是操作数所在的寄存器编号或存贮单元的地址码,它们又都是以二进制码编码的形式出现的,所以短操作码成了长操作码的前缀,就会使指令操作码译码时,无法做到唯一译码和立即解码,这是解答本题的关键之处。
  [解答]根据题意,三地址指令的格式为

  操作码
  地址1 地址2 地址3

  操作码占了3位,用来表示4条三地址指令需用掉8个不同码中的4个码,余下有4个码可用做扩展成长操作码的扩展标志。
  单地址指令的格式为

  操作码 地址
温馨提示:答案为网友推荐,仅供参考