408模拟选择题 · 计算机组成原理 · 第4章 指令系统
4.1 指令系统
4.1.2 指令的基本格式
- 【王道·卷三-Q20】 某计算机采用微程序控制方式,微指令字长为24位,采用水平型编码控制的微指令格式;共有微命令30个,构成4个互斥类,各包含5个、8个、14个和3个微命令;外部条件共3个。则控制存储器的容量应该为( )。
查看答案与解析
答案: A
解析: 互斥类采用字段直接编码时,每个字段除需要表示该类中的各条微命令外,还需要保留一种“本字段不发出微命令”的状态。因此 4 个控制字段所需位数分别为:
操作控制字段共需:
3 个外部条件各设置一个判别位,共占 3 位。于是微地址字段位数为:
8 位微地址最多可寻址:
每条微指令长 24 位,因此控制存储器容量应为:
因此选择 A。B、C 仅按微命令数量确定控制存储器字数,忽略了微地址字段;D 则将微指令字长错误地当作存储字数。
- 【王道·卷六-Q18】 在下列关于定长指令字和变长指令字的说法中,错误的是( )。
查看答案与解析
答案: C
解析: 定长指令字的长度固定,取指时每次读取确定数量的字节,下一条指令地址可直接按固定增量计算,因此取指、译码和流水线控制都较简单,A、D 正确。
对于变长指令字,处理器可以一次读取一个按最大指令长度设计的取指块,再根据译码结果确定当前指令的实际长度,因此 B 所述可作为一种取指实现方式。
C 的问题在于:定长指令的 PC 每次增加固定值,可使用固定增量的专用增量器;变长指令的 PC 增量取决于当前指令的实际长度,必须先识别指令长度,再完成可变增量计算,不能将二者都简单地描述为使用相同意义上的“专门 PC 增量器”进行固定自增。因此错误的是 C。
- 【王道·卷七-Q21】 在下列关于微指令格式的描述中,错误的是( )。
查看答案与解析
答案: D
解析: 直接控制法中,每个微命令通常对应一个控制位,几乎不需要译码,执行速度快,但微指令字较长,控制存储器利用率较低。字段直接编码法将互斥微命令编码在同一字段中,可缩短微指令字,提高控制存储器利用率,因此 A、B 正确。
断定法需要在微指令中设置较完整的下地址字段;增量计数器法通常默认下一条微指令地址为当前地址加 1,仅在需要转移时修改微地址,因此可减少下地址信息所占位数,C 正确。
水平型微指令一次可并行发出较多微命令,并行操作能力强;垂直型微指令更接近机器指令,编码程度高,一条微指令包含的微命令较少。因此 D 将两者特点说反,错误。
- 【王道·卷八-Q17】 有一条双字长直接寻址的子程序调用CALL指令,其第一个字为操作码和寻址特征,第二个字为地址码 。假设 的当前值为 的内容为 ,栈顶内容为 ,存储器按字编址,且进栈操作是先 ,后存入数据,则CALL指令执行后,SP及栈顶的内容分别为( )。
查看答案与解析
答案: D
解析: CALL 指令需要将返回地址压入栈中,然后把目标地址装入 PC。
该指令为双字长,且存储器按字编址。若取指前 ,取完两个字后,PC 指向 CALL 指令之后的下一条指令:
因而压栈的返回地址为 。题目规定进栈时先将 SP 减 1,再存入数据:
所以执行后:
- ;
- 新栈顶内容为 。
因此选择 D。A 未考虑双字长指令使 PC 增加 2;B 的栈增长方向错误;C 将 SP 多减了 1。
- 【王道·卷八-Q19】 某微机的指令格式如下所示:
| 15 | 10 | 9 | 8 | 7 | 0 |
|---|---|---|---|---|---|
| 操作码 | X | D |
其中 为位移量, 为寻址特征位。 :直接寻址; :用变址寄存器 进行变址; :用变址寄存器 进行变址; :相对寻址。 设 ,则指令 的有效地址是( )。
查看答案与解析
答案: B
解析: 将指令 写成二进制:
其中:
- 第 位为寻址特征位 ,表示使用变址寄存器 ;
- 低 8 位位移量 。
变址寻址的有效地址为:
因此选择 B。A 只取了形式地址;C 错误地使用了 PC;D 错误地使用了 。
- 【竟成·模拟一-18】 某32位计算机采用小端方式存储,指令格式为定长32位。add指令的格式及部分编码为:
011001 rs(4位) 00 rd(4位) imm(16位),add指令的功能是:R[rd]←R[rs]+imm。其中,R[x]表示通用寄存器x的内容,imm为补码表示的立即数。通用寄存器r1r15的编号为1HFH。则指令"add r1,r2,-259"((r1)←(r2)+(-259))在内存中存储的机器码是(用十六进制表示)()。
查看答案与解析
答案: B
解析: 指令功能为 ,故:
- 源寄存器 ;
- 目的寄存器 。
的 16 位补码为:
按指令字段拼接:
011001 0010 00 0001 1111111011111101
分成十六进制数得到处理器中的 32 位指令字:
但计算机采用小端方式,低地址存放低有效字节。因此四个字节在内存中依次为:
FD FE 81 64
按内存中的字节排列写成十六进制即 ,选择 B。A 是指令字本身的通常书写顺序,没有按小端字节次序排列;C、D 混淆了源、目的寄存器字段。
4.1.4 扩展操作码指令格式
- 【竟成·模拟四-18】 某计算机按字节编址,指令字长固定且只有两种指令格式:单地址指令和二地址指令。其中单地址指令260条,二地址指令12条,每个地址字段为6位,则指令字长至少应该是()。
查看答案与解析
答案: B
解析: 设二地址指令的基本操作码为 位。二地址指令含两个 6 位地址字段,因此指令字长为:
需要表示 12 条二地址指令,至少满足:
先尝试 ,此时指令字长为 16 位。4 位操作码共有 16 种编码,12 条二地址指令占用 12 种,只剩 4 种可作为扩展操作码前缀。将一个 6 位地址字段扩展为操作码后,最多可表示的单地址指令数为:
但题目需要 260 条,不够。
取 时,指令字长为:
此时剩余基本操作码数量为 ,可扩展出的单地址指令远多于 260 条。因此最小指令字长为 17 位,选择 B。
4.2 寻址方式
4.2.2 常见的数据寻址方式
- 【王道·卷四-Q17】 在通用计算机指令系统的二地址指令中,操作数的物理位置可能安排在( )。 I. 一个主存单元和缓冲存储器 II. 两个数据寄存器 III. 一个主存单元和一个数据寄存器 IV. 一个数据寄存器和一个控制存储器 V. 一个主存单元和一个外存单元
查看答案与解析
答案: B
解析: 机器指令能够直接指定并访问的操作数通常位于程序员可见的通用寄存器或主存中。因此二地址指令常见的操作数组合包括:
- 寄存器—寄存器,即 II;
- 主存—寄存器,即 III;
- 某些指令系统也可能支持主存—主存,但本题组合中未列出。
Cache(缓冲存储器)由硬件自动管理,对机器指令通常透明,不能作为指令显式指定的操作数位置,因此 I 错误。控制存储器用于存放微程序,不用于存放普通机器指令的操作数,IV 错误。外存不能由普通机器指令直接作为操作数访问,必须先通过 I/O 或操作系统调入主存,V 错误。
因此只有 II、III 正确,选择 B。
- 【王道·卷五-Q18】 在下列关于基址寻址和变址寻址的说法中,正确的是( )。 I. 两者都扩大指令的寻址范围 II. 变址寻址适合于编写循环程序 III. 基址寻址适合于多道程序设计 IV. 基址寄存器的内容由操作系统确定,在执行过程中可变 V. 变址寄存器的内容由用户确定,在执行过程中不可变
查看答案与解析
答案: A
解析: 基址寻址和变址寻址的有效地址通常都由寄存器内容与指令中的形式地址相加得到:
借助寄存器提供更多地址位,两者都能扩大指令的寻址范围,因此 I 正确。
变址寻址中,形式地址通常给出数组或表的首地址,变址寄存器保存可不断变化的下标或偏移量,适合循环访问数组元素,II 正确。
基址寻址中,基址寄存器通常由操作系统或装入程序设置,用来实现程序重定位和多道程序在不同主存区域中的装入,III 正确。对一个程序的一次连续执行而言,基址寄存器一般保持不变,并非由用户程序随意修改,因此 IV 错误。
变址寄存器通常由用户程序设置,并在循环执行过程中不断改变,因此 V 错误。
正确的是 I、II、III,选择 A。
- 【王道·卷七-Q17】 设寄存器 中的数值为600,地址为600和700的主存单元中存放的内容分别是700和800,则( )得到的操作数为600。 I. 直接寻址600 II. 寄存器间接寻址R III. 立即寻址600 IV. 寄存器寻址R
查看答案与解析
答案: C
解析: 已知:
分别判断:
- 直接寻址 600:形式地址就是有效地址,操作数为 ,不是 600。
- 寄存器间接寻址 R:有效地址为 ,操作数仍为 ,不是 600。
- 立即寻址 600:指令中的数值 600 本身就是操作数,正确。
- 寄存器寻址 R:操作数为寄存器内容 ,正确。
因此 III、IV 能得到操作数 600,选择 C。
- 【竟成·模拟二-18】 下列对于寻址方式的叙述正确的是()。
查看答案与解析
答案: B
解析: A 错误。寄存器间接寻址时,通用寄存器中保存的是操作数的主存地址,真正的操作数位于主存单元中:
B 正确。CPU 先通过指令寻址确定下一条要执行的指令,取出并译码后,又可能通过数据寻址取得操作数;程序执行过程中两类寻址通常反复、交替出现。
C 错误。堆栈的基本特征是后进先出,而不是先进先出。
D 错误。变址寻址的有效地址由变址寄存器与形式地址相加计算得到:
EA 是地址运算结果,并不是预先存放在某个内存单元中的数据。因此选择 B。
- 【竟成·模拟三-16】 假定采用相对寻址方式的转移指令占两个字节,第一字节是操作码,第二字节是相对偏移量(用补码表示)。取指令时,每次CPU从存储器取出一个字节,并自动完成(PC)+1→PC。假设执行到某转移指令时(取指令前)PC的内容为200CH,该指令的转移目标地址为1FB0H,则该转移指令第二字节的内容应为()。
查看答案与解析
答案: C
解析: 相对寻址的有效转移地址通常按下式计算:
该指令共占两个字节。取指前,。每取出一个字节,PC 自动加 1,因此两个字节均取完后:
于是相对偏移量为:
第二字节只有 8 位,需要求 的 8 位补码:
因此第二字节应为 A2H,选择 C。
4.3 程序的机器级代码表示
4.3.1 常用汇编指令介绍
- 【竟成·模拟四-14】 某机器有一个标志寄存器,其中有进位/借位标志CF、零标志ZF、符号标志SF和溢出标志OF,条件转移指令jl(有符号整数比较小于时转移)的转移条件是()。
查看答案与解析
答案: B
解析: 有符号整数比较通常先执行减法,例如判断 时计算 。若没有溢出,结果为负可由 判断;但发生有符号溢出时,结果符号位会失真,因此还必须结合溢出标志 OF。
对于有符号“小于”条件,正确判据为:
即 SF 与 OF 不相等时,说明被比较数小于另一个数。ZF 不参与严格“小于”的判断;若还要求“等于”,才需结合 ZF。因此选择 B。
- 【竟成·模拟七-18】 假定编译器对C源程序中的变量和MIPS中寄存器进行了以下对应:变量f、g、h、i、j分别对应寄存器
$s0、$s1、$s2、$s3、$s4,一条C语言赋值语句编译后生成如下代码序列。这条C语言赋值语句是()。
and $s0, $s1, $s2
sub $s1, $s3, $s4
sub $s0, $s1, $s0
查看答案与解析
答案: A
解析: 按顺序分析三条指令:
and $s0, $s1, $s2:
sub $s1, $s3, $s4:
sub $s0, $s1, $s0:
第三条指令使用的 已被第二条改写为 ,而其中的 是第一条得到的原始 。因此最终结果为:
这里右侧的 表示执行该代码序列前变量 的原值。因此选择 A。
4.3.4 过程调用的机器级表示
- 【竟成·模拟六-16】 一条双字长直接寻址的CALL指令,其第一个字为操作码和寻址特征,第二个字为地址码4000H。假设PC当前值为2000H,SP(栈顶指针)的内容为0100H,栈顶内容为1234H,存储器按字编址,栈向低地址增长,进栈操作是先修改SP,后存入数据。则CALL指令执行后,SP及栈顶的内容分别为()。
查看答案与解析
答案: D
解析: CALL 指令需要完成两项主要操作:
- 将返回地址压入栈中;
- 将 PC 修改为被调用过程的入口地址 4000H。
本机按字编址,CALL 为双字长指令。若执行前 ,则取完两个字后,下一条顺序指令地址为:
因而压栈的返回地址应为 2002H,而不是目标地址 4000H。
栈向低地址增长,且进栈时先修改 SP、后存入数据,所以:
随后将返回地址 2002H 写入新栈顶。因此执行后 SP 为 00FFH,栈顶内容为 2002H,选择 D。
4.4 CISC和RISC的基本概念
4.4.2 精简指令系统计算机 RISC
- 【王道·卷七-Q19】 在下列几项中,不符合 RISC 指令系统特征的是( )。
查看答案与解析
答案: A
解析: RISC 的核心思想是简化指令系统,使指令便于快速译码和流水执行,其典型特征包括:
- 指令数量较少,指令格式规整;
- 寻址方式少且简单;
- 大多数指令在一个时钟周期内完成;
- 通常采用硬布线控制器,以提高控制信号生成速度;
- 大量使用通用寄存器,并强调编译优化。
微程序控制器通常更适合指令复杂、控制步骤较多的 CISC。A 项所述不符合 RISC 特征,因此选择 A。
4.4.3 CISC和RISC的比较
- 【竟成·模拟五-18】 下列关于CISC和RISC的说法正确的是()。
查看答案与解析
答案: B
解析: B 正确。RISC 强调精简和规整,其指令格式种类、指令数量和寻址方式通常都少于 CISC,更利于快速译码与流水线执行。
A 错误。CISC 也可以使用指令流水线,只是因指令长度和执行周期不够规整,流水线设计通常比 RISC 更复杂。
C 错误。RISC 的指令规则、寄存器数量多,更便于编译器进行优化;CISC 指令功能复杂、长度和执行时间变化较大,不一定更容易生成高效代码。
D 错误。传统 CISC 常采用微程序控制器,以较低硬件复杂度实现大量复杂指令;RISC 才更倾向于硬布线控制。
因此选择 B。