第四章指令系统¶
| 题号 | 年份-题号 | 正确答案 | 题号 | 年份-题号 | 正确答案 | 题号 | 年份-题号 | 正确答案 |
|---|---|---|---|---|---|---|---|---|
| 1 | 2017-16 | A | 7 | 2016-17 | C | 13 | 2012-15 | D |
| 2 | 2022-19 | D | 8 | 2017-15 | D | 14 | 2016-14 | A |
| 3 | 2009-16 | C | 9 | 2018-18 | B | 15 | 2018-15 | A |
| 4 | 2011-16 | A | 10 | 2019-15 | D | 16 | 2020-14 | D |
| 5 | 2013-17 | D | 11 | 2020-16 | A | 17 | 2009-17 | A |
| 6 | 2014-17 | A | 12 | 2023-17 | A | 18 | 2022-20 | A |
(一)指令系统的基本概念¶
(二)指令格式¶
- 【2017-16】某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令29条,二地址指令107条,每个地址字段为6位,则指令字长至少应该是( )。
A. 24位
B. 26位
C. 28位
D. 32位
解析
答案:A
三地址指令条数满足,因此推断操作码字段 OP 至少为 5 位,指令格式可能如下:

所以指令字长至少有位,又因为计算机按字节编址,所以取成 24 位即 3 字节,本题选 A。
- 【2022-19】设计某指令系统时,假设采用16位定长指令字格式,操作码使用扩展编码方式,地址码为6位,包含零地址、一地址和二地址3种格式的指令。若二地址指令有12条,一地址指令有254条,则零地址指令的条数最多为( )。
A. 0
B. 2
C. 64
D. 128
解析
答案:D
指令格式如下:


所以最多还可定义条零地址指令,本题选 D。
(三)寻址方式¶
- 【2009-16】某机器字长16位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节PC自动加1。若某转移指令所在主存地址为2000H,相对位移量字段的内容为06H,则该转移指令成功转移后的目标地址是( )。
A. 2006H
B. 2007H
C. 2008H
D. 2009H
解析
答案:C
- 题目中“每取一个字节PC自动加1”,该转移指令由两个字节组成。
- 当取出并执行这条指令时,PC已经取完了这2个字节。指令所在初始地址为 2000H,取2个字节后,PC的值为
(此时PC指向下一条指令的地址)。
- 相对寻址的目标地址计算公式为:目标地址 = (PC) + 相对位移量。
- 目标地址 = 2002H + 06H = 2008H。
- 【2011-16】偏移寻址将某个寄存器内容与一个形式地址相加而生成有效地址。下列寻址方式中,不属于偏移寻址方式的是( )。
A.间接寻址
B.基址寻址
C.相对寻址
D.变址寻址
解析
答案:A. 间接寻址
偏移寻址是指将某个寄存器的内容(作为基准)与指令字中的形式地址(作为偏移量)相加来形成有效地址的寻址方式。包括:
- 基址寻址:(基址寄存器) + 形式地址
- 变址寻址:(变址寄存器) + 形式地址
- 相对寻址:(PC) + 形式地址
而间接寻址是指令字中给出的是操作数有效地址所在的存储单元的地址,即去内存里找地址,不涉及加法偏移,因此不属于偏移寻址。
- 【2013-17】假设变址寄存器R的内容为1000H,指令中的形式地址为2000H;地址1000H中的内容为2000H,地址2000H中的内容为3000H,地址,3000H的内容为4000H,则变址寻址方式下访问到的操作数是()。
A. 1000H
B. 2000H
C. 3000H
D. 4000H
解析
答案:D
- 变址寻址的有效地址计算公式:
。
- 已知变址寄存器 R 的内容为 1000H,形式地址 A 为 2000H,所以有效地址
。
- 题目要求的是“访问到的操作数”,即内存地址为 3000H 里的内容。根据题意,“地址3000H的内容为4000H”。
- 因此访问到的操作数是 4000H。
- 【2014-17】某计算机有16个通用寄存器,采用32位定长指令字,操作码字段(含寻址方式位)为8位,Store指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任一通用寄存器,且偏移量用补码表示,则Store指令中偏移量的取值范围是( )。
A. -32768~+32767
B. -32767+~32768
C. -65536~+65535
D. -155535~+65536
解析
答案:A
- 指令字长共 32 位。
- 操作码占 8 位。
- 源操作数(寄存器直接寻址):指出是哪个通用寄存器。共有16个通用寄存器,因此需要
位。
- 目的操作数(基址寻址):需要指出一个基址寄存器(也是从16个通用寄存器中选),占用 4 位。
- 剩下的位数为偏移量:
位。
- 题目说明偏移量用补码表示。16位补码的表示范围是
到
,即 -32768 ~ +32767。
- 【2016-17】某指令格式如下所示。\(\begin{array}{|c|c|c|c|}\hline\text{OP}&\text{M}&\text{I}&\text{D}\\\hline\end{array}\),其中M为寻址方式,I为变址寄存器编号,D为形式地址。若采用先变址后间址的寻址方式,则操作数的有效地址是( )。
A. I+D
B. (I)+D
C. ((I)+D)
D. ((I))+D
解析
答案:C
- 括号
()在计算机体系结构中表示“取内容”(访存或取寄存器内容)。 - 先变址:变址寄存器 I 的内容加上形式地址 D,得到一个中间地址,即
(I) + D。 - 后间址:以上一步算出的中间地址作为指针,去内存中取真正的有效地址。即取
(I) + D这个地址单元里的内容,表示为((I) + D)。
- 【2017-15】下列寻址方式中,最适合按下标顺序访问一维数组元素的是( )。
A. 相对寻址
B. 寄存器寻址
C. 直接寻址
D. 变址寻址
解析
答案:D
变址寻址(Index Addressing)的特点是将指令中的形式地址作为基准地址(如数组的首地址),将变址寄存器的内容作为修改量(如数组的下标)。在循环执行时,形式地址不变,只需按规律改变变址寄存器(下标)的内容,便能十分方便地依次访问数组中的元素。这是变址寻址最典型、最重要的应用场景。
- 【2018-18】按字节编址的计算机中,某double型数组A的首地址为2000H,使用变址寻址和循环结构访问数组A,保存数组下标的变址寄存器初值为0,每次循环取一个数组元素,其偏移地址为变址值乘以sizeof(double),取完后变址寄存器内容自动加1。若某次循环所取元素的地址为2100H,则进入该次循环时变址寄存器的内容是( )。
A. 25
B. 32
C. 64
D. 100
解析
答案:B
- 数组A为 double 型,每个元素占
sizeof(double) = 8个字节。 - 变址寻址的有效地址公式在此处为:
。
- 已知本次循环访问的元素地址
,首地址 = 2000H。
- 偏移量 =
。100H 转为十进制是
。
- 变址寄存器的值(即下标) = 偏移字节数 / 单个元素字节数 =
。
- 【2019-15】某计算机采用大端方式,按字节编址。某指令中操作数的机器数为1234 FF00H,该操作数采用基址寻址方式,形式地址(用补码表示)为FF12H,基址寄存器的内容为F000 0000H,则该操作数的LSB(最低有效字节)所在的地址是( )。
A. F000 FF12H
B. F000 FF15H
C. EFFF FF12H
D. EFFF FF15H
解析
答案:D
这是一个易错题,结合了地址计算和大端模式。
- 求有效地址:基址寻址
。形式地址 FF12H 是补码,作为负数在与32位的基址寄存器相加时,需要符号扩展为 32 位,即 FFFF FF12H。
计算。相加后丢弃最高位的进位,得到
。这是该32位操作数(占用4个字节)的首地址。
- 大小端存放机制:操作数机器数为 12 34 FF 00H。
- 大端方式:最高有效字节(MSB,即 12H)存放在最低地址。
- 地址分布如下:
- EFFF FF12H 存放:12H (MSB)
- EFFF FF13H 存放:34H
- EFFF FF14H 存放:FFH
- EFFF FF15H 存放:00H (LSB,最低有效字节)
- 题目求的是 LSB(00H)所在的地址,即 EFFF FF15H。
- 【2020-16】某计算机采用16位定长指令字格式,操作码位数和寻址方式位数固定,指令系统有48条指令,支持直接、间接、立即、相对4种寻址方式。单地址指令中,直接寻址方式的可寻址范围是( )。
A. 0~255
B. 0~1023
C. -128~127
D. -512~511
解析
答案:A
- 指令字长 16 位,操作码和寻址方式位数固定。
- 指令系统有 48 条指令,因此操作码固定占用
位。
- 有 4 种寻址方式,因此寻址方式字段占用
位。
- 在单地址指令中,留给形式地址的位数为:
位。
- 直接寻址方式中,形式地址直接作为主存物理地址使用(无符号数表示物理地址单元),8位地址码可寻址的范围是
到
,即 0~255。
- 【2023-17】某运算类型指令中有一个地址码为通用寄存器编号,对应通用寄存器中存放的是操作数或操作数地址,CPU 区分两者的依据是( )。
A. 操作数的寻址方式
B. 操作数的编码方式
C. 通用寄存器的编号
D. 通用寄存器的内容
解析
答案:A
在通用指令格式中,地址码字段指向了一个通用寄存器。这个寄存器里面装的到底是操作数本身(寄存器寻址)还是操作数所在的内存地址(寄存器间接寻址),完全由指令格式中的寻址方式字段(M位)来指明。CPU在译码阶段会读取寻址方式字段的值,以此决定后续的数据通路是如何走的。
(四)数据的对齐和大/小端存放方式¶
- 【2012-15】某计算机存储器按字节编址,采用小端方式存放数据。假定编译器规定int型和short型长度分别为32位和16位,并且数据按边界对齐存储。某C语言程序段如下:
若record变量的首地址为0xC008,则地址0xC008中内容及record.c的地址分别为( )。
A. 0x00、0xC00D
B. 0x00、0xC00E
C. 0x11、0xC00D
D. 0x11、0xC00E
解析
答案:D
解析:
record的首地址为0xC008,int型占4个字节,short型占2个字节,char型占1个字节。
record.a=273,换算为十六进制为:
273 = 0x00000111
采用小端方式存储,低字节存放在低地址,因此:
0xC008:0x11
0xC009:0x01
0xC00A:0x00
0xC00B:0x00
成员b紧接在a之后,地址为0xC00C,占用1个字节。
成员c为short型,要求按2字节边界对齐。b结束后,0xC00D不能作为2字节对齐地址,因此需要填充1个字节,c从0xC00E开始存放。
所以0xC008中的内容为0x11,record.c的地址为0xC00E,选D。
- 【2016-14】某计算机字长为32位,按字节编址,采用小端 (Little Endian) 方式存放数据,假定有一个double型变量,其机器数表示为1122 3344 5566 7788H存放在0000 8040H开始的连续存储单元中,则存储单0000 8046H中存放的是( )。
A. 22H
B. 33H
C. 66H
D. 77H
解析
答案:A
解析:
double型变量占8个字节,机器数为:
0x1122334455667788
采用小端方式,最低有效字节放在最低地址:
0x00008040:88H
0x00008041:77H
0x00008042:66H
0x00008043:55H
0x00008044:44H
0x00008045:33H
0x00008046:22H
0x00008047:11H
因此,存储单元0x00008046H中存放的是22H,选A。
- 【2018-15】某32位计算机按字节编址,采用小端(Little Endian)方式。若语令“int i=0”对应指令的机器代码为“C7 45 FC 00 00 00 00”,则语句“int i=-64”对应指令的机器代码是( )。
A. C7 45 FC C0 FF FF FF
B. C7 45 FC 0C FF FF FF
C. C7 45 FC FF FF FF C0
D. C7 45 FC FF FF FF 0C
解析
答案:A
解析:
指令:
C7 45 FC 00 00 00 00
最后4个字节表示int型立即数0。
-64的32位补码为:
-64 = 0xFFFFFFC0
采用小端方式存储时,立即数的4个字节排列为:
C0 FF FF FF
因此对应机器代码为:
C7 45 FC C0 FF FF FF
选A。
- 【2020-14】在按字节编址采用小端方式的32位计算机中,按边界对齐方式为以下C语言结构型变量a分配存储空间。
若a的首地址为2020FE00H,a的成员变量x2的机器数为12340000H,则其中34H所在的存储单元的地址是( )。
A. 2020FE03H
B. 2020FE04H
C. 2020FE05H
D. 2020FE06H
解析
答案:D
short型占2字节,int型占4字节,int型成员要求按4字节边界对齐。
a的首地址为0x2020FE00:
x1占用:
0x2020FE00~0x2020FE01
接下来0x2020FE02和0x2020FE03用于填充,使x2从4字节边界地址0x2020FE04开始。
x2占用:
0x2020FE04~0x2020FE07
x2的机器数为0x12340000,采用小端方式存储:
0x2020FE04:00H
0x2020FE05:00H
0x2020FE06:34H
0x2020FE07:12H
所以34H所在的存储单元地址为0x2020FE06H,选D。
(五)CISC和RISC的基本概念¶
- 【2009-17】下列关于RISC的叙述中,错误的是( )。
A. RISC普遍采用微程序控制器
B. RISC大多数指令在一个时钟周期内完成
C. RISC的内部通用寄存器数量相对CISC多
D. RISC的指令数、寻址方式和指令格式种类相对CISC少
解析
答案:A
RISC,即精简指令集计算机,通常具有以下特点:
- 指令条数较少。
- 指令格式和寻址方式较少。
- 指令长度通常比较固定。
- 大多数指令可以在一个时钟周期内完成。
- 通用寄存器数量较多。
- 通常采用硬布线控制器,以提高控制速度。
微程序控制器是CISC中较常见的控制方式,因此“RISC普遍采用微程序控制器”的说法错误。
选A。
(六)高级语言程序与机器级代码之间的对应¶
Tip
- 编译器,汇编器和链路器的基本概念
- 选择结构语句的机器级表示
- 循环结构语句的机器级表示
- 过程(函数)调用对应的机器级表示
- 【2022-20】将高级语言源程序转换为可执行目标文件的主要过程是( )。
A. 预处理→编译→汇编→链接
B. 预处理→汇编→编译→链接
C. 预处理→编译→链接→汇编
D. 预处理→汇编→链接→编译
解析
答案:A
将高级语言源程序转换为可执行目标文件,通常经过以下过程:
- 预处理:处理宏定义、文件包含和条件编译等。
- 编译:将高级语言源程序翻译成汇编语言程序或中间代码。
- 汇编:将汇编语言程序转换为目标文件。
- 链接:将目标文件和库文件合并,生成可执行文件。
因此正确顺序为:
预处理→编译→汇编→链接
选A