计算机组成原理(第三版)唐朔飞-第七章指令系统-课后习题
目录
- 第七章
- 1. 什么叫机器指令?什么叫指令系统?为什么说指令系统与机器的主要功能以及硬件结构之间存在着密切的关系?
- 2. 什么叫寻址方式?为什么要学习寻址方式?
- 3. 什么是指令字长、机器字长和存储字长?
- 4. 零地址指令的操作数来自哪里?在一地址指令中,另一个操作数的地址通常可采取什么寻址方式获得?各举一例说明。
- 5. 对于二地址而言,操作数的物理地址可安排在什么地方?举例说明。
- 6. 某指令系统字长为16位,地址码取4位,试提出一种方案,使指令系统有8条三地址指令、16条二地址指令、100条一地址指令。
- 7. 设指令字长为16位,采用扩展操作码技术,每个操作码的地址为6位。如果定义了13条二地址指令,试问还可安排多少条一地址指令?
- 8. 某机指令字长16位,每个操作数的地址码为6位,设操作码长度固定,指令分为零地址、一地址和二地址三种格式,若零地址指令有M种,一地址指令有N种,则二地址指令最多有几种?若操作码位数可变,则二地址指令最多允许几种?
- 9. 试比较间接寻址和寄存器间接寻址。
- 10. 试比较基址寻址和变址寻址。
- 11. 画出先变址再间址寻址及先间址再变址的寻址过程示意图。
- 12. 画出“SUB @R1”指令对操作数的寻址及减法过程的流程图。设被减数和结果存于ACC中,@表示间接寻址,R1寄存器的内容为2074H。
- 13. 画出换行“ADD*-5"指令(*为相对寻址特征)的信息流程图。设另一个操作数和结果存于ACC 中,并假设(PC)=4000H 。
- 14. 设相对寻址的转移指令占两个字节,第一个字节是操作码,第二个字节是相对位移量,用补码表示。假设当前转移指令第一字节所在的地址为 2000H,且 CPU 每取出一个字节便自动完成 ( P C ) + 1 → P C ( PC)+1\to PC (PC)+1→PC 的操作。试问当执行 J M P ∗ + 8 ”和“ J M P ∗ − 9 JMP\ *+8 ”和“ JMP\ *-9 JMP ∗+8”和“JMP ∗−9 "指令时,转移指令第二字节的内容各为多少?
- 15. 一相对寻址的转移指令占3个字节,第一字节是操作码,第二、三字节为相对位移量,而且数据在存储器中采用以高字节地址为字地址的存放方式。假设 PC 当前值是 4000H。试问当结果为 0,执行“JZ * +35”和“ JZ * - 17"指令时,该指令的第二、第三字节的机器代码各为多少?
- 16. 某机主存容量为 4 M × 16 4\ M\times 16 4 M×16 位,且存储字长等于指令字长,若该机指令系统可完成108种操作,操作码位数固定,且具有直接、间接、变址、基址、相对、立即等六种寻址方式,试回答以下问题。
- 17. 举例说明哪几种寻址方式在指令的执行阶段不访问存储器,哪几种寻址方式在指令的执行阶段只需访问一次存储器?完成什么样的指令,包括取指令在内共访问存储器4次?
- 18. 某机器共能完成 78 种操作,若指令字长为 16 位,试问一地址格式的指令地址码可取几位?若想使指令寻址范围扩大到 2 16 2^{16} 216 ,可采用什么方法?举出三种不同例子加以说明。
- 19. CPU 内有 32 个 32 位的通用寄存器,设计一种能容纳 64 种操作的指令系统。假设指令字长等于机器字长,试回答以下问题。
- 20. 什么是RISC? 简述它的主要特点。
- 21. 比较 RISC 和 CISC 的异同之处。
- 22. RISC 机中指令简单,有些常用的指令未被选用,它用什么方式来实现这些常用指令的功能.试举例说明。
第七章
1. 什么叫机器指令?什么叫指令系统?为什么说指令系统与机器的主要功能以及硬件结构之间存在着密切的关系?
答:
机器语言是由一条条语句构成的,每一条语句又能准确表达某种语义。人们习惯把每一条机器语言的语句称为机器指令,而将全部机器指令的集合称为机器的指令系统。计算机就是连续执行每一条机器语句而实现全自动工作的。
计算机设计者主要研究如何确定机器的指令系统,如何用硬件电路、芯片、设备来实现机器指令系统的功能。计算机的使用者则是依据机器提供的指令系统,使用汇编语言来编制各种程序。计算机使用者根据机器指令系统所描述的机器功能,能很清楚地了解计算机内部寄存器-存储器的内部结构,以及计算机能直接支持的各种数据类型,所以说指令系统与机器的主要功能以及硬件结构之间存在着密切的关系。
2. 什么叫寻址方式?为什么要学习寻址方式?
答:
寻址方式:是指确定本条指令的数据地址以及下一条将要执行的指令地址的方法,它与硬件结构紧密相关,而且直接影响指令格式和指令功能。寻址方式分为指令寻址和数据寻址两大类。指令寻址比较简单,它分为顺序寻址和跳跃寻址两种:顺序寻址可通过程序计数器 PC 加 1,自动形成下一条指令的地址;跳跃寻址则通过转移类指令实现。数据寻址方式种类较多,在指令字中必须设一字段来指明属于哪一种寻址方式。指令的地址码字段通常都不代表操作数的真实地址,把它称为形式地址,记作 A。操作数的真实地址称为有效地址,记作 EA,它是由寻址方式和形式地址共同来确定的。
学习寻址方式目的:从高级语言角度考虑问题,机器指令的寻址方式对用户无关紧要,但一旦采用汇编语言编程,用户只有了解并掌握机器的寻址方式,才能正确编程,否则程序将无法正常运行。如果程序员参与机器的指令系统设计,则了解寻址方式对确定机器指令格式是不可缺少的。从另一角度来看,倘若透彻了解了机器指令的寻址方式,将会使程序员进一步加深对机器内信息流程及整机工作概念的理解。
3. 什么是指令字长、机器字长和存储字长?
答:
机器字长是指CPU一次能处理数据的位数通常与CPU的寄存器位数有关。指令字长是指机器指令中二进制代码的总位数。存储字长是指存储单元中存放二进制代码的总位数。三者可以相等也可以不等视不同机器而定。
4. 零地址指令的操作数来自哪里?在一地址指令中,另一个操作数的地址通常可采取什么寻址方式获得?各举一例说明。
答:
零地址指令在指令字中无地址码,例如:空操作(NOP)、停机(HLT)这类指令只有操作码,而子程序返回(RET)、中断返回(IRET)这类指令没有地址码,其操作数的地址隐含在堆栈指针SP中。
在一地址指令中,它的地址码字段只有一个,其格式如下:
OP | A 1 A_1 A1 |
---|
它完成 ( A C C ) O P ( A 1 ) → A C C (ACC)OP(A_1)\to ACC (ACC)OP(A1)→ACC的操作,ACC既存放参与运算的操作数,又存放运算的中间结果,这样,完成一条一地址指令只需两次访存。所以在一地址指令中,另一个操作数地址通常可采用ACC隐含寻址方式。
5. 对于二地址而言,操作数的物理地址可安排在什么地方?举例说明。
答:
二地址指令中只含有两个地址字段,其格式如下:
OP | A 1 A_1 A1 | A 2 A_2 A2 |
---|
它可完成
(
A
1
)
O
P
(
A
2
)
→
A
1
(A_1)OP(A_2)\to A_1
(A1)OP(A2)→A1的操作,即
A
1
A_1
A1字段既代表源操作数的地址,又代表存放本次运算结果的地址。有的机器也可以表示
(
A
1
)
O
P
(
A
2
)
→
A
2
(A_1)OP(A_2)\to A_2
(A1)OP(A2)→A2的操作,此时
A
2
A_2
A2除了代表源操作数的地址外,还代表中间结果的存放地址。这两种情况完成一条指令只需3次访存,它的含义是中间结果暂存于累加器ACC中。
所以,对于二地址指令而言,操作数的物理地址可安排在寄存器(寄存器寻址)内,指令中(直接寻址)或内存单元(间接寻址)内。
6. 某指令系统字长为16位,地址码取4位,试提出一种方案,使指令系统有8条三地址指令、16条二地址指令、100条一地址指令。
答:
三地址码格式如下:
OP(4位) | A 1 ( 4 位 ) A_1(4位) A1(4位) | A 2 ( 4 位 ) A_2(4位) A2(4位) | A 3 ( 4 位 ) A_3(4位) A3(4位) |
---|
采用扩展操作码技术进行设计,指令操作码分配方案如下:
0000
,
.
.
.
.
.
.
,
0111
,
}
A
1
,
A
2
,
A
3
;
8
条三地址指令
1
\left. \begin{array}{c} 0000, \\ ......, \\ 0111,\\ \end{array} \right\} A_1,A_2,A_3;8条三地址指令\\ 1
0000,......,0111,⎭
⎬
⎫A1,A2,A3;8条三地址指令1
1000
,
0000
,
.
.
.
.
.
.
,
.
.
.
.
.
.
,
1000
,
1111
,
}
A
2
,
A
3
;
16
条二地址指令
\left. \begin{array}{c} 1000,0000, \\ ......,......, \\ 1000,1111,\\ \end{array} \right\} A_2,A_3;16条二地址指令
1000,0000,......,......,1000,1111,⎭
⎬
⎫A2,A3;16条二地址指令
1001
,
0000
,
0000
,
.
.
.
.
.
.
,
.
.
.
.
.
.
,
.
.
.
.
.
.
,
1001
,
0110
,
0011
,
}
A
3
;
100
条一地址指令
\left. \begin{array}{c} 1001,0000,0000, \\ ......,......,......, \\ 1001,0110,0011,\\ \end{array} \right\} A_3;100条一地址指令
1001,0000,0000,......,......,......,1001,0110,0011,⎭
⎬
⎫A3;100条一地址指令
1001
,
0110
,
0100
,
.
.
.
.
.
.
,
.
.
.
.
.
.
,
.
.
.
.
.
.
,
1001
,
1111
,
1111
,
}
冗余编码,可用来扩充一、零地址指令
\left. \begin{array}{c} 1001,0110,0100, \\ ......,......,......, \\ 1001,1111,1111,\\ \end{array} \right\} 冗余编码,可用来扩充一、零地址指令
1001,0110,0100,......,......,......,1001,1111,1111,⎭
⎬
⎫冗余编码,可用来扩充一、零地址指令
1010
,
.
.
.
.
.
.
,
1111
,
}
冗余编码,可用来扩充三、二、一、零地址指令
\left. \begin{array}{c} 1010, \\ ......, \\ 1111,\\ \end{array} \right\} 冗余编码,可用来扩充三、二、一、零地址指令
1010,......,1111,⎭
⎬
⎫冗余编码,可用来扩充三、二、一、零地址指令
7. 设指令字长为16位,采用扩展操作码技术,每个操作码的地址为6位。如果定义了13条二地址指令,试问还可安排多少条一地址指令?
答:
二地址指令格式如下:
OP(4位) | A 1 ( 6 位 ) A_1(6位) A1(6位) | A 2 ( 6 位 ) A_2(6位) A2(6位) |
---|
设二地址指令格式为该指令系统的基本格式,4位操作码共有16种编码,其中13种用来定义二地址指令,还剩3种可用作扩展标志。如不考虑地址指令,该指令系统最多还能安排:
一地址指令条数
=
3
∗
2
6
=
192
条
一地址指令条数=3*2^6=192条
一地址指令条数=3∗26=192条
8. 某机指令字长16位,每个操作数的地址码为6位,设操作码长度固定,指令分为零地址、一地址和二地址三种格式,若零地址指令有M种,一地址指令有N种,则二地址指令最多有几种?若操作码位数可变,则二地址指令最多允许几种?
答:
(1)采用定长操作码时,二地址指令格式如下:
OP (4位) | A 1 ( 6 位 ) A_1(6位) A1(6位) | A 2 ( 6 位 ) A_2(6位) A2(6位) |
---|
此时,无论指令中有几个地址,指令格式都不变。
设二地址指令有K种,则:
K
=
2
4
−
M
−
N
K=2^4-M-N
K=24−M−N
当M=1(最小值),N=1(最小值)时,二地址指令最多有:
M
m
a
x
=
16
−
1
−
1
=
14
种
M_{max}=16-1-1=14种
Mmax=16−1−1=14种
(2)若采用变长操作码时,二地址指令格式仍为如1)所示,但操作码长度可随地址码的个数而变。此时,
K
=
2
4
−
(
N
/
2
6
+
M
/
2
12
)
;
K=2^4-(N/2^6+M/2^{12});
K=24−(N/26+M/212);
当
(
N
/
2
6
+
M
/
2
12
)
≤
1
时
(
N
/
2
6
+
M
/
2
12
向上取整
)
,
(N/2^6+M/2^{12})\leq1时(N/2^6+M/2^{12}向上取整),
(N/26+M/212)≤1时(N/26+M/212向上取整),K最大,则二地址指令最多有:
K
m
a
x
=
16
−
1
=
15
种(只留一种编码扩展标志用。)
K_{max}=16-1=15种(只留一种编码扩展标志用。)
Kmax=16−1=15种(只留一种编码扩展标志用。)
讨论:
此时,一地址码条数为:
N
=
(
2
4
−
K
)
∗
2
6
−
M
/
2
6
;
(
N
/
2
6
向上取整
)
N=(2^4-K)*2^6-M/2^{6};(N/2^6向上取整)
N=(24−K)∗26−M/26;(N/26向上取整)
零地址码条数为:
M
=
2
16
−
2
12
K
−
2
6
N
;
M=2^{16}-2^{12}K-2^6N;
M=216−212K−26N;
当K最大(K=15),一地址指令最多有:
N
m
a
x
=
64
−
1
=
63
种
N_{max}=64-1=63种
Nmax=64−1=63种
零地址指令最多有:
M
m
a
x
=
64
种
M_{max}=64种
Mmax=64种
9. 试比较间接寻址和寄存器间接寻址。
答:
间接寻址和寄存器间接寻址都可扩大寻址范围,但他们形成有效地址的方式不同。
间接寻址:间接寻址需通过访存(若是多次间址还需多次访存)得到有效地址,同时间接寻址的第二个优点在于它便于编制程序。间接寻址的缺点在于指令的执行阶段需要访存两次(一次间接寻址)或多次(多次间接寻址),致使指令执行时间延长。
寄存器间接寻址:寄存器间接寻址需通过访问寄存器获得有效地址在内存中的地址,再通过访存获得。因有效地址不是存放在存储单元中,而是存放在寄存器中,它比间接寻址少访存一次。故间址指令执行的时间比寄存器间接寻址长。
10. 试比较基址寻址和变址寻址。
答:
1)都可有效地扩大指令寻址范围。
2)基址寻址时,基准地址由基准寄存器给出,地址的改变反映在位移量A的取值上;变址寻址时,基准地址由A给出,地址的改变在变址值的自动修改上,变址值由变址寄存器给出。
3)基址寄存器内容通常由系统程序设定,变址寄存器内容通常由用户设定。
4)基址寻址适用于程序的动态重定位,变址寻址适用于数组或字符串处理,适用场合不同。
11. 画出先变址再间址寻址及先间址再变址的寻址过程示意图。
1)
2)
EA为有效地址
12. 画出“SUB @R1”指令对操作数的寻址及减法过程的流程图。设被减数和结果存于ACC中,@表示间接寻址,R1寄存器的内容为2074H。
13. 画出换行“ADD*-5"指令(*为相对寻址特征)的信息流程图。设另一个操作数和结果存于ACC 中,并假设(PC)=4000H 。
由于本题未指定数据通路结构,因此只能大概地排一下信息流程图,并且流程图中突出寻址过程的实现。
14. 设相对寻址的转移指令占两个字节,第一个字节是操作码,第二个字节是相对位移量,用补码表示。假设当前转移指令第一字节所在的地址为 2000H,且 CPU 每取出一个字节便自动完成 ( P C ) + 1 → P C ( PC)+1\to PC (PC)+1→PC 的操作。试问当执行 J M P ∗ + 8 ”和“ J M P ∗ − 9 JMP\ *+8 ”和“ JMP\ *-9 JMP ∗+8”和“JMP ∗−9 "指令时,转移指令第二字节的内容各为多少?
答:据题意,相对寻址的转移指令格式如下:
当执行JMP指令时,指令第二字节的内容不变,PC的内容变为2002H 。
此时转移指令第二字节内容各为:
A
1
=
+
8
−
2
=
0000
0110
=
06
H
A
2
=
−
9
−
2
=
1111
1001
=
F
5
H
A_1=+8-2=0000 \quad 0110=06H \\ A_2=-9-2=1111 \quad 1001=F5H
A1=+8−2=00000110=06HA2=−9−2=11111001=F5H
15. 一相对寻址的转移指令占3个字节,第一字节是操作码,第二、三字节为相对位移量,而且数据在存储器中采用以高字节地址为字地址的存放方式。假设 PC 当前值是 4000H。试问当结果为 0,执行“JZ * +35”和“ JZ * - 17"指令时,该指令的第二、第三字节的机器代码各为多少?
答:
根据 PC 当前值为 4000H,取出三个字节的转移指令后,PC 值修改为 4003H。对应汇编语言 JMP*+35。该转移指令的相对位移量为 35-3=32 (十进制),因为数据在存储器中以高字节地址为字地址的方式存放,因此该指令的第二字节是 00H,第三字节是 20H。
对应汇编语言指令 JMP*-17 ,该转移指令的相对位移量应为 17-3=-20 (十进制),因为数据在存储器中以高字节地址为字地址的方式存放,因此该指令的第二字节为 FFH,第三字节为 ECH。
16. 某机主存容量为 4 M × 16 4\ M\times 16 4 M×16 位,且存储字长等于指令字长,若该机指令系统可完成108种操作,操作码位数固定,且具有直接、间接、变址、基址、相对、立即等六种寻址方式,试回答以下问题。
(1)画出一地址指令格式并指出各字段的作用。
(2) 该指令直接寻址的最大范围。
(3)一次间接寻址和多次间接寻址的寻址范围。
(4)立即数的范围(十进制表示)。
(5) 相对寻址的位移量(十进制表示)。
(6)上述六种寻址方式的指令中哪一种执行时间最短,哪一种最长,为什么?哪一种便于程序淫动,哪一种最适合处理数组问题?
(7)如何修改指令格式,使指令的寻址范围可扩大到4M?
(8)为使一条转移指令能转移到主存的任一位置,可采取什么措施?简要说明之。
答:
(1)单字长一地址指令格式:
OP为操作码字段,共7位,可反映108种操作;
M为寻址方式字段,共3位,可反映6种寻址操作;
A为地址码字段,共16-7-3=6位。
(2)A为6位,指令直接寻址的最大范围为
2
6
=
64
2^6=64
26=64字。
(3)由于存储字长为16位,故一次间址的寻址范围为
2
16
=
64
K
2^{16}=64K
216=64K字;若多次间址,需用存储字的最高位来区别是否继续间接寻址,故寻址范围为
2
15
=
32
K
2^{15}=32K
215=32K字。
(4)立即数寻址范围:若采用补码表示为1FH~20H;十进制表示为为-32 ~31(有符号数),或0 ~63(无符号数)。
(5)相对寻址的位移量范围采用补码表示时同立即数范围,为-32 ~31。
(6)上述六种寻址方式中,
因立即数由指令直接给出,故立即寻址的指令执行时间最短。
间接寻址在指令的执行阶段需多次访存(一次间接寻址要两次访存,多次间接寻址要多次访存),故执行时间最长。
变址寻址由于变址寄存器的内容由用户给定,而且在程序的执行过程中允许用户修改,而其形式地址始终不变,(变址值可自动修改而不需要修改程序),故变址寻址的指令便于用户编制处理数组问题的程序。
相对寻址操作数位置可随程序存储区的变动而改变,操作数的有效地址只与当前指令地址相差一定的位移量,与直接寻址相比,更有利于程序浮动。
(7)方案一:为使指令寻址范围可扩大到4M,需要有效地址22位,此时可将单字长一地址的格式改为双字长,如下图所示:
图中,指令的第一字保持原来格式不变,形式地址A扩展到第2个字。这样,直接寻址时,EA=A=16+6=22位,正好可访问4M地址空间。由于A的扩展,变址、基址、相对、立即数等寻址方式也扩展到22位。
方案二:如果仍采用单字长指令(16位)格式,为使指令寻址范围可扩大到4M,可通过段寻址方案实现。安排如下:
硬件设段寄存器DS(16位),用来存放段地址。在完成指令寻址方式所规定的寻址操作后,得有效地址EA(6位),再由硬件自动完成段寻址,最后得22位物理地址。即:
物理地址
=
(
D
S
)
×
2
6
+
E
A
物理地址=(DS)\times2^6+EA
物理地址=(DS)×26+EA
注:段寻址方式由硬件隐含实现。在编程指定的寻址过程完成、EA产生之后由硬件自动完成,对用户是透明的。
方案三:在采用单字长指令(16位)格式时,还可通过页面寻址方案使指令寻址范围扩大到4M。安排如下:
硬件设页面寄存器PR(16位),用来存放页面地址。指令寻址方式中增设页面寻址。当需要使指令寻址范围扩大到4M时,编程选择页面寻址方式,则:
E
A
=
(
P
R
)
∣
∣
A
(有效地址
=
页面地址“拼接”
6
位形式地址)
EA=(PR)||A(有效地址=页面地址“拼接”6位形式地址)
EA=(PR)∣∣A(有效地址=页面地址“拼接”6位形式地址),这样得到22位有效地址。
(8)为使一条转移指令能转移到主存的任一位置,寻址范围达到4M,除了采用(7)方案一中的双字长一地址指令的格式外,还可配置22位的基址寄存器或22位的变址寄存器,使
E
A
=
(
B
R
)
+
A
(
B
R
为
22
位的基址寄存器
)
或
E
A
=
(
I
X
)
+
A
(
I
X
为
22
位的基址寄存器
)
EA=(BR)+A(BR为22位的基址寄存器)或EA=(IX)+A(IX为22位的基址寄存器)
EA=(BR)+A(BR为22位的基址寄存器)或EA=(IX)+A(IX为22位的基址寄存器),便可访问4M存储空间。还可以通过16位的基址寄存器左移6位再和形式地址A相加,也可达到同样的效果。
总之,不论采取何种形式,最终得到的实际地址应是22位。
补充:
通过基址寻址与段寻址获得实际地址的区别:
(1)基址寻址的基地址一般比较长(
≥
\geq
≥存储器地址位数),位移量比较短(=形式地址位数),相加后得到的有效地址长度=基地址长度。此时主存不分段。
实际地址
=
有效地址
=
基地址
+
位移量
实际地址=有效地址=基地址+位移量
实际地址=有效地址=基地址+位移量
段寻址是基址寻址的一种变种,当基地址短于存储地址时,基址寻址就变成了段寻址,基地址就叫做段地址,此时主存分段。
实际地址
=
段地址
×
偏移量
+
段内位移量
(
有效地址
)
实际地址=段地址\times偏移量+段内位移量(有效地址)
实际地址=段地址×偏移量+段内位移量(有效地址)
(2)基址寻址一般在机器字长
≥
\geq
≥存储地址长度的机器中,可直接通过寻址计算获得实际地址。
在机器字长
≤
\leq
≤存储地址长度的机器中,由于CPU内部数据通路的限制,编程指定的任何一种寻址计算得到的有效地址长度都等于机器字长,为获得更长的地址字,硬件自动通过段寻址计算出存储器实际地址。此时除ALU之外,硬件还要增设专用的地址加法器。
相关问题:
- 一般:机器字长=存储字长。
- CPU中所有寄存器(包括基址寄存器)的位数=机器字长
- 通常:指令字长不一定等于机器字长。早期的小型机由于字长较短,指令常以机器字长为单位变化(几字长指令,如PDP-11机),目前以字节长为单位变化(几字节指令)的较多。习题中指令字长=机器字长的假设只是为简单起见;
- 当设指令字长=存储字长(=机器字长)时,如用立即寻址,由于立即数由形式地址直接给出,而形式地址的位数肯定不足一个字长,因此立即寻址非常适用于编程给出短常数的场合。
提示:寻址方式的正确选择与编程技巧有关
17. 举例说明哪几种寻址方式在指令的执行阶段不访问存储器,哪几种寻址方式在指令的执行阶段只需访问一次存储器?完成什么样的指令,包括取指令在内共访问存储器4次?
答:举例如下:一地址指令在执行阶段不访存的寻址方式有:寄存器寻址、立即寻址;
一地址指令在执行阶段只访存一次的寻址方式有:寄存器间接寻址、直接寻址、基址寻址、变址寻址、相对寻址、页面寻址。
包括取指在内共访存四次的指令有:二重间址的一地址指令:一重间址的二地址指令,当另一操作数采用直接、基址、变址、相对、页面、寄存器间接寻址时。
18. 某机器共能完成 78 种操作,若指令字长为 16 位,试问一地址格式的指令地址码可取几位?若想使指令寻址范围扩大到 2 16 2^{16} 216 ,可采用什么方法?举出三种不同例子加以说明。
答:因为机器共能完成
2
7
>
78
>
2
6
2^7>78>2^6
27>78>26种操作,所以一地址指令的操作码至少取7位,指令字长为16位,故指令地址码可取16-7=9种,若想使用指令寻址范围扩大到
2
16
2^{16}
216,可采用寄存器间接寻址方式、间接寻址方式或变址寻址。
(1)寄存器间接寻址方式示意图如下:
所以它的最大指令寻址范围可以是
2
9
−
1
×
2
16
=
2
24
>
2
16
2^{9-1}\times2^{16}=2^{24}>2^{16}
29−1×216=224>216,故寄存器间接寻址方案可行。
(2)间接寻址方式示意图如下:
所以它的最大指令寻址范围可以是
2
9
−
1
×
2
16
=
2
24
>
2
16
2^{9-1}\times2^{16}=2^{24}>2^{16}
29−1×216=224>216,故间接寻址方案可行。
(3)变址寻址方式示意图如下:
显然,变址寻址的寻址范围也符合要求。
19. CPU 内有 32 个 32 位的通用寄存器,设计一种能容纳 64 种操作的指令系统。假设指令字长等于机器字长,试回答以下问题。
(1)如果主存可直接或间接寻址,采用寄存器一存储器型指令,能直接寻址的最大存储空间是多少?画出指令格式并说明各字段的含义。
(2)在满足(1)的前提下,如果采用通用寄存器作基址寄存器,则上述寄存器-存储器型指令的指令格式有何特点?画出指令格式并指出这类指令可访问多大的存储空间?
答:
(1)如果使用RS型指令,则指令一定是二地址以上的地址格式,指令格式如下:
直接寻址的最大空间
=
2
20
=
1
M
字
直接寻址的最大空间=2^{20}=1M字
直接寻址的最大空间=220=1M字
(2)如采用基址寻址,则指令格式中应给出基址寄存器号,以指定哪一个通用寄存器用作基址寄存器,指令格式变为:
其中,
B
可省(
B
为基址寻址方式),
B
R
i
为基址寄存器号。基址寻址时:寻址的最大空间
=
2
32
=
4
G
字
B可省(B为基址寻址方式),BR_i为基址寄存器号。基址寻址时:寻址的最大空间=2^{32}=4G字
B可省(B为基址寻址方式),BRi为基址寄存器号。基址寻址时:寻址的最大空间=232=4G字
其寻址范围仅与基址位数有关,与形式地址位数无关。
20. 什么是RISC? 简述它的主要特点。
答:RISC 即精简指令系统计算机(Reduced Instruction Set Computer),与其对应的是 CISC,即复杂指令系统计算机(Complex Instruction Set Computer)。人们从 80-20 规律中得到启示;仅用最常用的 20%的简单指令,重新组合不常用的 80%的指令功能,这便引发出 RISC 技术。所以,RISC 指令系统就是通过简化指令,复杂指令的功能由执行频度高的简单指令组合来实现。
RISC 的主要特点:
(1)选取使用频度较高的一些简单指令以及一些很有用但又不复杂的指令,让复杂指令的功能由频度高的简单指令的组合来实现;
(2)指令长度固定,指令格式种类少,寻址方式种类少;
(3)只有取数/存数 (LOAD\ STORE) 指令访问存储器,其余指令的操作都在寄存器内完成;
(4)CPU 中有多个通用寄存器;
(5)采用流水线技术,大部分指令在一个时钟周期内完成。采用超标量和超流水线技术,可使每条指令的平均执行时间小于一个时钟周期;
(6)控制器采用组合逻辑控制,不用微程序控制。
(7)采用优化的编译程序。
21. 比较 RISC 和 CISC 的异同之处。
答:CISC体系结构的设计策略是使用大量的指令,包括复杂指令,每一项简单或复杂的任务都有一条对应的指令,程序员不需要写一大堆指令去完成一项复杂的任务。复杂的指令被转化为一系列简单操作然后由CPU执行。RISC体系结构的设计策略是使用少量的指令完成最少的简单操作,复杂指令用简单指令子集模拟,在RISC中进行程序设计比在其他设计中更难更费时,因为复杂指令都用简单指令来模拟。
22. RISC 机中指令简单,有些常用的指令未被选用,它用什么方式来实现这些常用指令的功能.试举例说明。
答:
RISC机不仅精简了指令系统,采用超标量和超流水线结构;它们的指令数目只有几十条,却大大增强了并行处理能力。
RISC 机中指令简单,有些常用的指令未被选用,它选取使用频度较高的一些功能简单、能在一个节拍内执行完成的指令来实现这些常用指令的功能,而把较复杂的功能用频度高的简单指令组成一段子程序来实现。
比如RISC II共有39条指令,分为以下4类:
(1)寄存器一寄存器操作:移位、逻辑、算数(整数)运算等12条。
(2)取/存数指令,取存字节、半字、字等16条。
(3)控制转移指令:条件转移、调用/返回等6条。
(4)其他:存取程序状态字PSW和程序计数器等5条。
一些常用指令未被选中,但用这些指令并在硬件系统的辅助下,足以实现其他一些指令的功能。例如:该机约定
R
0
R_0
R0寄存器的内容恒为0,这样加法指令可替代寄存器间的传递指令。即
(
R
1
)
+
(
R
0
)
→
R
4
替代了
R
1
→
R
4
(R_1)+(R_0)\to R_4替代了R_1\to R_4
(R1)+(R0)→R4替代了R1→R4
加法指令还可以替代清楚寄存器指令,即
(
R
1
)
+
(
R
0
)
→
R
4
替代了
0
→
R
4
(R_1)+(R_0)\to R_4替代了0\to R_4
(R1)+(R0)→R4替代了0→R4
减法指令可替代取负数指令,即
(
R
0
)
−
(
R
1
)
→
R
4
替代了
R
4
寄存器内容取负
(R_0)-(R_1)\to R_4替代了R_4寄存器内容取负
(R0)−(R1)→R4替代了R4寄存器内容取负
更多推荐
所有评论(0)