《计算机组成原理》第3章习题答案
第3章习题解答
1.指令长度和机器字长有什么关系?半字长指令、单字长指令、双字长指令分别表示什么意思?
解:指令长度与机器字长没有固定的关系,指令长度可以等于机器字长,也可以大于或小于机器字长。通常,把指令长度等于机器字长的指令称为单字长指令;指令长度等于半个机器字长的指令称为半字长指令;指令长度等于两个机器字长的指令称为双字长指令。
2.零地址指令的操作数来自哪里?一地址指令中,另一个操作数的地址通常可采用什么寻址方式获得?各举一例说明。
解:双操作数的零地址指令的操作数来自堆栈的栈顶和次栈顶。双操作数的一地址指令的另一个操作数通常可采用隐含寻址方式获得,即将另一操作数预先存放在累加器中。例如,前述零地址和一地址的加法指令。
3.某机为定长指令字结构,指令长度16位;每个操作数的地址码长6位,指令分为无操作数、单操作数和双操作数三类。若双操作数指令已有K种,无操作数指令已有L种,问单操作数指令最多可能有多少种?上述三类指令各自允许的最大指令条数是多少?
解:X= (24一K)×26一[L/26]
双操作数指令的最大指令数:24一1。
单操作数指令的最大指令数:15×26一l(假设双操作数指令仅1条,为无操作数指令留出1个扩展窗口)。
无操作数指令的最大指令数:216一212一26。其中212为表示某条二地址指令占用的编码数,26为表示某条单地址指令占用的编码数。此时双操作数和单操作数指令各仅有1条。
4.设某机为定长指令字结构,指令长度12位,每个地址码占3位,试提出一种分配方案,使该指令系统包含:4条三地址指令,8条二地址指令,180条单地址指令。
解:4条三地址指令
000 XXX YYY ZZZ
.
.
011 XXX YYY ZZZ
8条二地址指令
100 000 XXX YYY
.
.
100 111 XXX YYY
180条单地址指令
101 000 000 XXX
.
.
111 110 011 XXX
5.指令格式同上题,能否构成:
三地址指令4条,单地址指令255条,零地址指令64条?为什么?
解:三地址指令4条
000 XXX YYY ZZZ
.
.
011 XXX YYY ZZZ
单地址指令255条
100 000 000 XXX
.
.
111 111 110 YYY
只能再扩展出零地址指令8条,所以不能构成这样的指令系统。
6.指令中地址码的位数与直接访问的主存容量和最小寻址单位有什么关系?
解:主存容量越大,所需的地址码位数就越长。对于相同容量来说,最小寻址单位越小,地址码的位数就越长。
7.试比较间接寻址和寄存器间址。
解:间接寻址方式的有效地址在主存中,操作数也在主存中;寄存器间址方式的有效地
址在寄存器中,操作数在主存中。所以间接寻址比较慢。
8.试比较基址寻址和变址寻址。
解:基址寻址和变址寻址在形成有效地址时所用的算法是相同的,但是它们两者实际上
是有区别的。一般来说,变址寻址中变址寄存器提供修改量(可变的),而指令中提供基准值(固定的);基址寻址中基址寄存器提供基准值(固定的),而指令中提供位移量(可变的)。这
两种寻址方式应用的场合也不同,变址寻址是面向用户的,用于访问字符串、向量和数组等
成批数据;而基址寻址面向系统,主要用于逻辑地址和物理地址的变换,用以解决程序在主
存中的再定位和扩大寻址空间等问题。在某些大型机中,基址寄存器只能由特权指令来管理,用户指令无权操作和修改。
9.某机字长为16位,主存容量为64K字,采用单字长单地址指令,共有50条指令。
若有直接寻址、间接寻址:变址寻址、相对寻址四种寻址方式,试设计其指令格式。
解:操作码6位,寻址方式2位,地址码8位。
10.某机字长为16位,主存容量为64K字,指令格式为单字长单地址,共有64条指令。试说明:
(1)若只采用直接寻址方式,指令能访问多少主存单元?
(2)为扩充指令的寻址范围,可采用直接/间接寻址方式,若只增加一位直接/间接标志,指令可寻址范围为多少?指令直接寻址的范围为多少?
(3)采用页面寻址方式,若只增加一位z/c(零页/现行页)标志,指令寻址范围为多少?指令直接寻址范围为多少?
(4)采用(2)、(3)两种方式结合,指令的寻址范围为多少?指令直接寻址范围为多少?
解:因为计算机中共有64条指令,所以操作码占6位,其余部分为地址码或标志位。
(1)若只采用直接寻址方式,地址码部分为10位,指令能访问的主存单元数为210=1K 字。
(2)若采用直接/间接寻址方式,将增加了一位直接/间接标志,地址码部分为9位,
指令直接寻址的范围为29=0.5K字,指令可寻址范围为整个主存空间216=64K字。
(3)若采用页面寻址方式,将增加一位z/c(零页/现行页)标志,所以指令直接寻址
范围仍为29=0.5K字,指令寻址范围仍为216=64K字。
(4)此时将需要@和z/c两个标志位,所以指令直接寻址范围为28=0.25K字,指令寻
址范围仍为216=64K字。
11.设某机字长32位,CPU有32个32位的通用寄存器,设计一个能容纳的单字长指令
系统。
(1)如果是存储器间接寻址方式的寄存器一存储器型指令,能直接寻址的空间是多少?
(2)如果采用通用寄存器作为基址寄存器,能直接寻址的最大主存空间又是多少?
解:因为计算机中共有64条指令,所以操作码占6位;32个通用寄存器,寄存器编号占5位;其余部分为地址码或标志位。
(1)如果是存储器间接寻址方式的寄存器一存储器型指令,操作码6位,寄存器编号5位,间址标志1位,地址码20位,直接寻址的最大主存空间是220字。
(2)如果采用通用寄存器作为基址寄存器,EA=(Rb)+A,能直接寻址的最大主存空间是232字。
12.已知某小型机字长为16位,其双操作数指令的格式如下:
其中:OP为操作码,R为通用寄存器地址。试说明下列各种情况下能访问的最大主存区域有多少机器字?
(1)A为立即数。
(2)A为直接主存单元地址。
(3)A为间接地址(非多重间址)
(4)A为变址寻址的形式地址,假定变址寄存器为R1(字长为16位)。
解: (1)1个机器字。
(2)256个机器字。
(3)65536个机器字。
(4)65536个机器字。
13.计算下列4条指令的有效地址(指令长度为16位)。
(1)000000Q
(2)l00000Q
(3)170710Q
(4)012305Q
假定:上述4条指令均用八进制书写,指令的最左边是一位间址指示位@(@=O,直接寻址;@=1,间接寻址),且具有多重间访功能;指令的最右边两位为形式地址;主存容量215单元,下表为有关主存单元的内容(八进制)。
解:
(1)000000Q
因为指令的最高位为0,故为直接寻址,EA=A=00000Q。
(2)100000Q
因为指令的最高位为1,故指令为间接寻址。
(00000)=100002,最高位仍为1,继续间接寻址,(00002)=054304,其最高位为0,表示已经找到有效地址,EA=54304Q。
(3)170710Q
因为指令的最高位为1,故指令为间接寻址。(00010)=100005,最高位仍为1,继续间接寻址。(00005)=100001,最高位仍为1,继续间接寻址。(00001)=046710,其最高位为0,表示已找到有效地址,EA=46710Q。
(4)012305Q
因为指令的最高位为0,故为直接寻址,EA=A=00005Q。
14.假定某机的指令格式如下:
其中:
Bitll=1:间接寻址;
Bit8=1:变址寄存器I1寻址;
Bit7=1:变址寄存器I2寻址;
Bit6(零页/现行页寻址):Z/C=0,表示O页面;Z/C=1,表示现行页面,即指令所在页面。
若主存容量为212个存储单元,分为26个页面,每个页面有26个字。
设有关寄存器的内容为 (PC)=0340Q (11)=11llQ (12)=0256Q
试计算下列指令的有效地址。
(1)1046Q
(2)2433Q
(3)32150
(4)1111Q
解:
(1)1046Q=001 000 100 110
因为4个标志位均为0,故为直接寻址,EA=A=0046Q。
(2)2433Q一010 100 011 011
因为Bit8(I1)=1,故为变址寄存器1寻址,EA=(I1)+A=1111+33=1144Q。
(3)3215Q=011 010 001 101
因为Bit7(I2)=1,故为变址寄存器2寻址,EA=(I2)+A=0256+15=0273Q。
(4)111lQ一001 001 001 001
因为Bit6(z/C)=1,故为当前页寻址,EA=(PC)H∥A=03∥11=0311Q。
15.假定指令格式如下:,
其中:D/I为直接/间接寻址标志,D/I=0表示直接寻址,D/I=1表示间接寻址。其
余标志位同题14说明。
若主存容量为216个存储单元,分为28个页面,每个页面有28个字。设有关寄存器的内容为
(I1)=002543Q (I2)=063215Q (PC)=004350Q
试计算下列指令的有效地址。
(1)152301Q
(2)074013Q
(3)161123Q
(4)140011Q
解:
(1) 152301Q =1 101 010 011 000 001
因为Bit10(I2)=1,故为变址寄存器2寻址,EA=(I2)+A=063215+301=063516Q。
(2) 074013Q=0 111 100 000 001 011
因为Bit11(I1)=1,故为变址寄存器1寻址,EA=(I1)+A=002543+013=002556Q。
(3) 161123Q=1 110 001 001 010 011
因为Bit9(z/C)=1,故为当前页寻址,EA=(PC)∥A=994123Q。
(4)140011Q=1 100 000 000 001 001
因为4个标志位均为O,故为直接寻址,EA=A=000011Q。
16.举例说明哪几种寻址方式除去取指令以外不访问存储器?哪几种寻址方式除去取指令外只需访问一次存储器??完成什么样的指令,包括取指令在内共访问4次存储器?
解:
除去取指令外不访问存储器:立即寻址,寄存器寻址。
除去取指令外只需访问一次存储器:直接寻址,寄存器间接寻址,变址寻址,基址寻址,相对寻址,页面寻址。
二级间接寻址包括取指令在内共访问4次存储器。
17.设相对寻址的转移指令占两个字节,第一个字节是操作码,第二个字节是相对位移量,用补码表示,假设当前转移指令第一字节所在的地址为2000H,且CPU每取一个字节便自动完成(PC)+1一PC的操作。试问当执行JMP*+8和JMP*一9指令(*为相对寻址特征)时,转移指令第二字节的内容各为多少?转移的目的地址各是什么?
解:转移指令第二字节的内容分别为:00001000(+8),11110111(一9)转移的目的地址分别为:200AH,1FF9H。
18.什么叫主程序和子程序?调用子程序时还可采用哪几种方法保存返回地址?画图说明调用子程序的过程。
解:主程序就是指通常的程序,而子程序是一组可以公用的指令序列,只要知道子程序的入口地址就能调用它。
保存返回地址的方法有多种:
(1)用子程序的第一个字单元存放返回地址。转子指令把返回地址存放在子程序的第一个字单元中,子程序从第二个字单元开始执行。返回时将第一个字单元地址作为间接地址,采用间址方式返回主程序。
(2)用寄存器存放返回地址。转子指令先把返回地址放到某一个寄存器中,再由子程序将寄存器中的内容转移到另一个安全的地方。
(3)用堆栈保存返回地址。
调用子程序的过程如下图所示,此时返回地址保存在堆栈中。
19.在某些计算机中,调用子程序的方法是这样实现的:转子指令将返回地址存入子程序的第一个字单元,然后从第二个字单元开始执行子程序,请回答下列问题:
(1)为这种方法设计一条从子程序转到主程序的返回指令。
(2)在这种情况下,怎么在主、子程序间进行参数的传递?
(3)上述方法是否可用于子程序的嵌套?
(4)上述方法是否可用于子程序的递归(即某个子程序自己调用自己)?
(5)如果改用堆栈方法,是否可实现(4)所提出的问题?
解:(1)返回指令通常为零地址指令。返回地址保存在堆栈中,执行返回指令时自动从堆栈中弹出。而目前返回地址是保存在子程序的第一个单元中,故此时返回指令不能再是零地址指令了,而应当是一地址指令。如:
间接寻址可找到返回地址,然后无条件转移到返回的位置。
(2)在这种情况下,可利用寄存器或主存单元进行主、子程序间的参数传递。
(3)可以用于子程序的嵌套(多重转子)。因为每个返回地址都放在调用的子程序的第一个单元中。
(4)不可以用于子程序的递归,因为当某个子程序自己调用自己时,子程序第一个单元的内容将被破坏。
(5)如果改用堆栈方法,可以实现子程序的递归,因堆栈具有后进先出的功能。