计算机组成原理 指令系统习题
后来才发现老师布置作业的大部分是408 题目(doge)
题解可以根据题目下面的知识点反推
(1)
假设变址寄存器R 的内容为 1000H,指令中的形式地址为 2000 H;地址 1000H 中的内容为2000H,地址 2000H 中的内容为 3000H,地址 3000 H 中的内容为 4000H, 则变址寻址方式下访问到的操作数是(D )。
- 1000H
- 2000H
- 3000H
- 4000H
EA=(R)+A=1000H+2000H=3000H,操作数S=(3000H)=4000H
变址寻址 (Indexed Addressing)
形式地址和有效地址
操作码和地址码
操作数类型
(2)
某计算机采用 16 位定长指令字格式,操作码位数和寻址方式位数固定,指 令系统有 48 条指令,支持直接、间接、立即、相对 4 种寻址方式,单地址指令 中直接寻址方式可寻址范围是: A
A、0~255 B、0~1023 C、-128~127 D、-512~511
这里是16位定长指令,48条指令,需要6位bit编码,由于支持直接,间接,立即,相对四种寻址方式,所以Mod字段需要2位bit编码,一共16位指令,所以可寻址范围为8 位编码的范围(0~255)。
指令的类型
补充(和上面题目没关系):
指令的操作码扩展
- 4 位操作码,15条三地址指令
- 8位操作码,15条二地址指令
- 12位操作码,15条一地址指令
- 16位操作码,16条零地址指令
寻址方式
直接寻址 Direct Addressing
(3)
下列寻址方式中,最适合按下标顺序访问一维数组元素的是(D )。
A、相对寻址 B、寄存器寻址 C、直接寻址 D、变址寻址
第 (1) 题提到过数组访问一般使用变址寻址
在变址操作时,将计算机指令中的地址与变址寄存器中的地址相加,得到有效地址,指令提供数组首地址,由变址寄存器来定位数据中的各元素。所以它最适合按下标顺序访问一维数组元素。
相对寻址 Relative Addressing
寄存器寻址
下面是寻址方式的简单总结
- 立即寻址:指令地址字段是操作数本身
- 直接寻址:地址字段直接指出操作数内存地址
- 间接寻址:地址字段是操作数的形式地址
- 寄存器寻址:操作数在寄存器中,地址字段是操作数在通用寄存器编号
- 相对寻址:程序计数器内容加上指令形式地址是操作数有效地址
- 基址和变址寻址:基址寄存器内容加上指令形式地址
- 堆栈寻址:操作数存放在堆栈中
(4)
下列关于RISC的叙述中,错误的是 A
A.RISC普遍采用微程序控制器
B.RISC大多数指令在一个时钟周期内完成
C.RISC的内部通用寄存器数量相对CISC多
D.RISC的指令数、寻址方式和指令格式种类相对CISC少
RISC采用硬布线方式,CISC采用微程序控制器
CISC 的特点
RISC 的特点
- 指令格式规整,寻址方式少
- 采用硬布线控制和指令流水线
- 配置的通用寄存器数目多
- 运算类指令的操作数不访存
RISC 比 CISC 好在哪 ?
RISC 的发展
补充 :
- CISC (Complex Instruction Set Computer 复杂指令集计算机)
早期的 CPU 架构都是这种,用最少的计算机指令来完成任务,以 Intel 公司 X86 为核心的 PC 系列正是基于 CISC 体系结构
特点:
- 对编译器的开发十分有利
- 对 CPU 的工艺要求非常高
- 增加 CPU 结构的复杂性
- 不等长指令集,必须对不等长指令集进行分割,在执行单一指令时需要执行较多的处理工作
- 目前占有量较大
乘法运算翻译成一条指令就可以完成
2. RISC (Reduced Instruction Set Computer 精简指令集计算机)
Apple 公司的 Macintosh 则是基于 RISC 体系结构
特点:
- 对编译器有更高要求
- 降低 CPU 的复杂性
- 在工艺相同的情况下生产出性能更强大的 CPU
- 等长精简指令集,执行速度快且性能稳定
- 适合用于并行处理
- 大多数指令可在一个计算机周期内完成
- RISC中多采用硬布线控制逻辑
- RISC的内部通用寄存器数量相对CISC多
- RISC的指令数、寻址方式和指令格式种类相对CISC少
(5)
某指令格式如下所示。
其中M为寻址方式,I为变址寄存器编号,D为形式地址。
若采用先变址后间址的寻址方式,则操作数的有效地址是 C
A.I+D
B.(I)+D
C.((I)+D)
D.((I))+D
先取出寄存器中的内容,然后进行偏移变址,然后取存储器中的内容,所以选C
间接寻址 Indirect Addressing
(6)
某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令 29 条,二地址指令 107 条,每个 地址字段为 6 位,则指令字长至少应该是
- 24 位
- 26 位
- 28 位
- 32 位
这题的考点和第 (2) 题一样
三地址指令 (OP 码至少5 bit ,可以表示 32 条指令,但只需要表示3=29 条指令,所以有剩余 3 中情况)
二地址指令 (OP 码的高5 位中还有3中情况,和低6位组合(原先的A1),就有 192 中指令,大于107)
于是指令字长实际只需要 11+6+6 =23 位,但是计算机按字节编址,所以是8 的整数倍,于是至少为24 位。
(7)
某机器字长16位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节PC自动加1。若某转移指令所在主存地址为2000H,相对位移量字段的内容为06H,则该转移指令成功转移后的目标地址是 C
A.2006H B.2007H C.2008H D.2009H
目标地址由两部分组成:操作码字段+相对位移量字段。
相对寻址的内容见题 (3)
源地址的操作码地址(一个字节)+偏移量字段(一个字节)。最后加上PC自加规律,两个字节加2。
具体过程可以参考下面这张图 :
注意 : PC 指向的是下一条指令的地址,那么这里的“若某转移指令所在主存地址为2000H”代表PC 还没有执行
主存地址为2000H的转移指令,代表即将执行的指令。
(8)
变址寻址方式中,操作数的有效地址是(C)。
A. 基址寄存器内容加上形式地址
B. 程序计数器内容加上形式地址
C. 变址寄存器内容加上形式地址
D. 寄存器内容加上形式地址
变址寻址方式中,操作数的有效地址是变址寄存器内容加上形式地址。
把变址寄存器的内容与指令地址码部分给出的地址(通常是位移量)之和作为操作数的地址来获得所需要的操作数就称为变址寻址。
(9)
零地址指令采用 (C)
A 间接寻址
B 立即寻址
C 堆栈寻址
D 变址寻址
自加自减最适合堆栈寻址的方式
堆栈寻址 Stack Addressing
堆栈的结构
对堆栈的访问和操作
堆栈指令
ARM 的堆栈寻址
立即数寻址 Immediate Addressing
(10)
某计算机采用大端方式,按字节编址。某指令中操作数的机器数为 1234 FF00H,该操作数采用基址寻址方式,形式地址(用补码表示)为 FF12H,基址寄存器的内容为 F000 0000H, 则该操作数的 LSB(最低有效字节)所在的地址是(D)
A F000 FF12H
B F000 FF15H
C EFFF FF12H
D EFFF FF15H
操作数 为 12 34 FF 00
操作数的地址通过基址寻址得到:
F000 0000H + FFFF FF12 H -> EFFF FF12 H (存在溢出)
大端模式 : 高地址存放的是低字节的数据
小端模式 : 高地址存放的是高字节的数据
基址寻址 Based Addressing
(11)
按字节编址的计算机中,某 double 型数组 A 的首地址为 2000H,使用变址寻址和循环结构访问数组 A,保存数组下标的变址寄存器初值为 0,每次循环取一个数组元素,其偏移地址为变址值乘以 sizeof(double),取完后变址寄存器内容自动加 1。若某次循环所取元素的地址 为 2100H,则进入该次循环时变址寄存器的内容是 B
A. 25
B .32
C .64
D .100
double 一个数据 是 8 个字节,所以 所求变址寄存器的内容为 16*16/8=32
2100H - 2000H = 2^8
double 为64bit= 8Byte =2^3Byte
2^8/2^3 = 2^5 = 32Byte
(12)
指令寻址和数据寻址的不同点在于(B)
A.是访问存储器,后者是访问寄存器
B.前者是确定程序执行的顺序,后者是取操作数地址
C.前者是短指令,后者是长指令
D.前者是确定程序转移地址,后者取操作数
指令寻址 :
程序可以实现转移的根本原因是 : 转移指令执行时,修改了程序计数器PC 的值
数据寻址 :
长格式指令和短格式指令
(13)
冯 · 诺依曼计算机中指令和数据均以二进制形式存放在存储器中, CPU 区分它们的依据是(C) 。
A .指令操作码的译码结果
B .指令和数据的寻址方式
C. 指令周期的不同阶段
D. 指令和数据所在的存储单元
虽然指令和数据都是以二进制形式存放在存储器中,但CPU可以根据指令周期的不同阶段来区分是指令还是数据,通常在取指阶段取出的是指令,在执行阶段取出的是数据。需要清楚的是,CPU只有在确定取出的是指令之后,才会将其操作码送去译码,因此,不可能依据译码的结果来区分指令和数据。
ISA 指令集架构的分类:
ISA Instruction set architecture
(14)
偏移寻址通过将某个寄存器内容与一个形式地址相加而生成有效地址。下列寻址方式中,不属于偏移寻址方式的是(A)。
A. 间接寻址
B. 基址寻址
C. 相对寻址
D. 变址寻址
- 间接寻址通过操作数地址的地址进行精确寻址,不属于偏移寻址。
- 基址寻址是把基址寄存器(BR)中的地址作为基准,加上偏移量进行寻址的,属于偏移寻址。
- 相对寻址是把指令地址寄存器(PC)中的地址,加上相对于当前指令地址的偏移量进行寻址的,属于偏移寻址。
- 变址寻址是把用户设定的地址作为基准,将变址寄存器(IX)中的地址作为偏移量进行寻址的,属于偏移寻址。
(15)
堆栈指针SP 的内容为 ? A
A. 栈顶单元地址
B. 栈顶单元内容
C. 栈底单元地址
D. 栈底单元内容
(16)
寄存器简介寻址方式中,操作数在(A)中?
A . 主存
B . 寄存器
C . 程序寄存器
D . 堆栈
寄存器间接寻址:
(17)
某计算机有16个通用寄存器,采用32位定长指令字,操作码字段(含寻址方式位)为8位,Store指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则Store指令中偏移量的取值范围是 A
A.-32768~+32767
B.-32767~+32768
C. -65536~+65535
D. -65535~+65536
- 题目中指令为 32 位,操作码为 8 位。
- 源操作数采用寄存器直接寻址,因此可以用 4 位来标记使用哪一个寄存器。 (4 位bit 可以编号 16 个寄存器)
- 目的操作数使用基址寻址,由于可以使用任何一个通用寄存器,因此需要 4 位来标记(基址寻址需要指定某一个寄存器)
- 所以偏移量总数 32 - 8 - 4 - 4 = 16 位
偏移址用补码表示,16位补码的表示范围为-32768~+32767,所以选A
设补码字长n位,则n位补码的取值范围是 -2^{n-1}到2^{n-1}-1
(18)
某机16位字长指令格式如下:
其中:D是形式地址,采用补码表示(包括一位符号位);
M是寻址方式
- M=0 立即寻址
- M=1 直接寻址(这时D为地址,是无符号数)
- M=2 间接寻址
- M=3 变址寻址(变址寄存器RI,16位)
- M=4 基址寻址(基址寄存器Rb,16位)
- M=5 相对寻址
- 该指令格式最多可以定义多少种不同的操作? 32
2. 立即寻址操作数范围是 ? -128 - 127
由于操作码占5位,因此可以进行32种不同的操作,由于形式地址占8位,采用补码表示,因此立即数的操作数范围从-128到127
更多408选择题,可看: