🏷️ 知识点:指令格式
下列关于指令集体系结构和指令系统的说法中,错误的是()。
A. 指令集体系结构位于计算机软/硬件的交界面上 B. 指令集体系结构是指低级语言程序员所看到的概念结构和功能特性 C. 任何程序运行前都要先转换为机器语言程序 D. 指令系统和机器语言是无关的
[tag_link]
正确答案:D
下列有关指令集体系结构 ( ISA) 的叙述中,错误的是()。
A. ISA 规定了执行每条指令时所包含的控制信号 B. ISA 规定了指令获取操作数的方式,即寻址方式 C. ISA 规定了所有指令的集合,包括指令格式和操作类型 D. ISA 规定了程序可访问的寄存器个数、存储空间大小、编址方式和大端/小端方式
[tag_link]
正确答案:A
运算型指令的寻址与转移型指令的寻址的不同点在于()。
A. 前者取操作数,后者决定程序转移地址 B. 后者取操作数,前者决定程序转移地址 C. 前者是短指令,后者是长指令 D. 前者是长指令,后者是短指令
[tag_link]
正确答案:A
程序控制类指令的功能是()。
A. 进行算术运算和逻辑运算 B. 进行主存与CPU 之间的数据传送 C. 进行CPU 和I/O 设备之间的数据传送 D. 改变程序执行的顺序
[tag_link]
正确答案:
下列指令中不属于程序控制类指令的是()。 C . 中断隐指令 D. 循环指令
A. 无条件转移指令 B. 条件转移指令
[tag_link]
正确答案:C
以下叙述错误的是()。
A. 为了便于取指令,指令的长度通常为存储字长的整数倍 B. 单地址指令是固定长度的指令 C. 单字长指令可加快取指令的速度 D. 单地址指令可能有一个操作数,也可能有两个操作数
[tag_link]
正确答案:B
某指令系统有200条指令,对操作码采用固定长度二进制编码,最少需要用()位。 A.4 B.8 C.16 D.32
[tag_link]
正确答案:B
在指令格式中,采用扩展操作码设计方案的目的是()。
A. 减少指令字长度 B. 增加指令字长度 C. 保持指令字长度不变而增加指令的数量 D. 保持指令字长度不变而增加寻址空间
[tag_link]
正确答案:C
一个计算机系统采用32位单字长指令,地址码为12位,若定义了250条二地址指令, 则还可以有()条单地址指令。
A. 2 ¹² B. 2¹³ C.2¹ ⁴ D.3×2 ¹³
[tag_link]
正确答案:D
假设系统采用16位定长指令字格式,操作码使用扩展编码方式,地址码为4位,三地 址、二地址、 一地址指令各有15、8、127条,则零地址指令最多有()条。
A. 15 B.16 C.3 1 D.32
[tag_link]
正确答案:B
某指令系统的指令字长为16位,地址码长度为6位。若已定义二地址指令15条、 一地 址指令48条,则零地址指令最多可定义()条。
A. 255 B.256 C.1023 D.1024
[tag_link]
正确答案:D
某机器的指令字长为12位,采用扩展操作码技术,支持零地址、 一地址和二地址3种 指令格式,地址码长度均为4位。若一地址和二地址指令均取最大可能条数,则该机器 最多可定义的指令总数为()。
A. 16 B. 46 C.48 D.4366
[tag_link]
正确答案:B
一个处理器中共有32个寄存器,使用16位立即数,其指令系统结构中共有142条指令。 在某个给定的程序中,20%的指令带有一个输入寄存器和一个输出寄存器;30%的指令带 有两个输入寄存器和一个输出寄存器;25%的指令带有一个输入寄存器、一个输出寄存器、 一个立即数寄存器;其余25%的指令带有一个立即数输入寄存器和一个输出寄存器。 1)对于以上4种指令类型中的任意一种指令类型来说,共需要多少位?假定指令系统 结构要求所有指令长度必须是8的整数倍。 2)与使用定长指令集编码相比,当采用变长指令集编码时,该程序能够少占用多少存 储器空间?
[tag_link]
D
假设指令字长为16位,操作数的地址码为6位,指令有零地址、一地址、二地址3种格式。
- 设操作码固定,若零地址指令有M 种,一地址指令有N 种,则二地址指令最多有几种? 2)采用扩展操作码技术,二地址指令最多有几种? 3)采用扩展操作码技术,若二地址指令有P 条,零地址指令有Q 条,则一地址指令最 多有几种?
[tag_link]
A
在一个36位长的指令系统中,设计一个扩展操作码,使之能表示下列指令: 1)7条具有两个15位地址和一个3位地址的指令。 2)500条具有一个15位地址和一个3位地址的指令。 3)50条无地址指令。
[tag_link]
A
某计算机采用16 位定长指令字格式,操作码位数和寻址方式位数固定,指令系统有48条指令,支 持直接、间接、立即、相对4种寻址方式,单地址指令中直接寻址方式可寻址范围是()。
A.0~255; B.0~1023; C.-128~127; D.-512~511;
[tag_link]
正确答案:A
参考 指令格式 ,48 条指令需要 6 位操作码字段 ( 2 5 < 48 < 2 6 ), 4 种寻址方式需要 2 位寻址特征位 ( 4 = 2 2 ), 还剩 16 - 6 - 2 = 8 位作为地址码,故直接寻址范围为 0 ~ 255。注意,主存地址不能为负。🚫 常见误区说明: 在 相对寻址 中,可能会有 有符号偏移 ,比如 -128 ~ 127 或 -512 ~ 511 ,那是针对偏移字段的符号解释;直接寻址不需要符号位 ,它就是一个 无符号绝对地址 。
某运算类型指令中有一个地址码为通用寄存器编号,对应通用寄存器中存放的是操作数或操作数地址,CPU 区分两者的依据是( )。
A. 操作数的寻址方式 B. 操作数的编码方式 C. 通用寄存器编号 D. 通用寄存器的内容
[tag_link]
正确答案:A
某微机的指令格式如下所示:
A. 22H B. 1144H C. 1256H D. 0059H
[tag_link]
正确答案:B
指令格式中,操作码占据位 15 至 10,寻址特征位 X 占据位 9 至 8,位移量 D 占据位 7 至 0。 指令 2222H 的二进制表示为 0010 0010 0010 0010。 分解后,位 9 至 8 为 10,对应 X=10; 位 7 至 0 为 00100010,即 D=22H。 根据寻址特征,X=10 表示使用变址寄存器 X2 进行变址寻址,有效地址计算公式为 (X2) + D。 已知 (X2)=1122H,D=22H 为 8 位正数,扩展为 16 位后仍为 0022H,因此有效地址为 1122H + 0022H = 1144H。 选项 B 符合计算结果。
在微程序控制器中,微程序的入口地址是由( )形成的。
A. 机器指令的地址码字段 B. 微指令的微地址字段 C. 机器指令的操作码字段 D. 微指令的操作码字段
[tag_link]
正确答案:C
在微程序控制器中,微程序用于产生控制信号以执行机器指令。 当控制器开始执行一条新的机器指令时,需要确定该指令对应的微程序序列的起始地址,即入口地址。 这个入口地址的形成通常基于机器指令的操作码字段。
机器指令的操作码字段指明了指令的类型(如加法、跳转等),控制器通过操作码查询一个映射表(如微地址生成器或控制存储器地址转换逻辑),从而得到对应的微程序入口地址。 这个过程是微程序控制器中指令解码的关键步骤。
选项A不正确,因为机器指令的地址码字段主要用于指定操作数地址(如内存地址或寄存器编号),与微程序入口地址无关。 选项B不正确,微指令的微地址字段用于在微程序内部指定下一条微指令的地址(例如实现微程序分支),而不是形成整个微程序的初始入口。 选项D也不正确,微指令的操作码字段用于控制具体的微操作,不参与生成微程序入口地址。 因此,正确答案是C。
某机采用微程序控制方式,微指令字长 24 位,采用水平型编码控制的微指令格式,断定方式。共有微命令 30 个,构成 4 个互斥类,各包含 5 个、8 个、14 个和 3 个微命令,外部条件共 3 个。则控制存储器的容量应该为( )。
A. 256×24bit B. 30×24bit C. 31×24bit D. 24×24bit
[tag_link]
正确答案:A
微指令字长为 24 位,控制字段采用水平型编码。 微命令分为 4 个互斥类,每类所需的位数需包含“无操作”状态,计算如下:
- 第一类有 5 个微命令,需 位; >
- 第二类有 8 个微命令,需 位; >
- 第三类有 14 个微命令,需 位; >
- 第四类有 3 个微命令,需 位。 >
控制字段共需 位。 >
顺序字段占 位,用于断定方式下的地址生成。 > 外部条件共有 3 个,条件选择字段需 3 位(可编码 8 种转移条件,满足 3 个外部条件及其他功能),下地址字段占 位。 > 下地址字段 8 位可寻址 个微指令单元,因此控制存储器容量为 位。 >
(12 分)已知 32 位寄存器中存放的变量 x 的机器码为 C000004H,请问:
(1)当 x 是无符号整数时:
(2)当 x 是带符号整数(补码)时:
(3)当 x 是 float 型浮点数时:
[tag_link]
**【解析】** (1) `x` 是无符号整数,所有的二进制位均为数值位,`C000 0004H` 的真值为 。 `x/2` 是由逻辑右移一位得到的,即 ,其真值为 ,存放在 `R1` 中的机器码是 `6000 0002H`。 `2x` 是由 `x` 逻辑左移一位得到的,真值发生溢出,存放在 `R1` 中的机器码是 `8000 0008H`。
(2) 机器码 `C000 0004H = 1100 0000 0000 0000 0000 0000 0000 0100B`,表示这是一个负数,数值位取反末位加 1,得到的二进制原码为 `1011 1111 1111 1111 1111 1111 1111 1100`,即二进制真值为 `-0011 1111 1111 1111 1111 1111 1111 1100`,对应的十进制真值为 。 `x/2` 是由 `x` 算术右移一位得到的,其真值为 ,存放在 `R1` 中的机器码是 `E000 0002H`。 `2x` 是由 `x` 算术左移一位得到的,其真值为 ,存放在 `R1` 中的机器码是 `8000 0008H`。
(3) 在 IEEE754 单精度浮点数中,最高位为数符位;其后是 8 位阶码,以 2 为底,用移码表示,阶码的偏置值为 127;其后 23 位是尾数数值位,隐藏数值的最高位 “1”。 转换为二进制 `1 100 0000 0 000 0000 0000 0000 0000 0100`,可知,`x` 为负数,阶码为 1,尾数为 ,故真值为 。 `x/2` 的真值是 ,存放在 `R1` 中的机器码为 `1 011 1111 1 000 0000 0000 0000 0000 0100`,即 `BF80 0004H`。 `2x` 的真值是 ,存放在 `R1` 中的机器码为 `1 100 0000 1 000 0000 0000 0000 0000 0100`,即 `C080 0004H`。
假定计算机 M 字长为 16 位,按字节编址,连接 CPU 和主存的系统总线中地址线为 20 位、数据线为 8 位,采用 16 位定长指令字,指令格式及其说明如下:
其中,op1~op3 为操作码,rs、rt 和 rd 为通用寄存器编号,R[r] 表示寄存器 r 的内容,imm 为立即数,target 为转移目标的形式地址。请回答下列问题。
(1) ALU 的宽度是多少位?可寻址主存空间大小为多少字节?指令寄存器、主存地址寄存器(MAR)和主存数据寄存器(MDR)分别应有多少位?
(2) R 型格式最多可定义多少种操作?I 型和 J 型格式总共最多可定义多少种操作?通用寄存器最多有多少个?
(3) 假定 op1 为 0010 和 0011 时,分别表示带符号整数减法和带符号整数乘法指令,则指令 01B2H 的功能是什么(参考上述指令功能说明的格式进行描述)?若 1、2、3 号通用寄存器当前内容分别为 B052H、0008H、0020H,则分别执行指令 01B2H 和 01B3H 后,3 号通用寄存器内容各是什么?各自结果是否溢出?
(4) 若采用 I 型格式的访存指令中 imm(偏移量)为带符号整数,则地址计算时应对 imm 进行零扩展还是符号扩展?
(5) 无条件转移指令可以采用上述哪种指令格式?
[tag_link]
1)ALU 的宽度为 16 位,ALU 的宽度即 ALU 运算对象的宽度,通常与字长相同。地址线为 20 位,按字节编址,可寻址主存空间大小为 2²⁰ 字节(或 1MB)。指令寄存器有 16 位,和单条指令长度相同。MAR 有 20 位,和地址线位数相同。MDR 有 8 位,和数据线宽度相同。
2)R 型格式的操作码有 4 位,最多有 2⁴(或 16)种操作。I 型和 J 型格式的操作码有 6 位,因为它们的操作码部分重叠,所以共享这 6 位的操作码空间,且前 6 位全 0 的编码已被 R 型格式占用,因此 I 和 J 型格式最多有 2⁶-1=63 种操作。从 R 型和 I 型格式的寄存器编号部分可知,只用 2 位对寄存器编码,因此通用寄存器最多有 4 个。
3)指令 01B2H=0000000110110010B 为一条 R 型指令,操作码 0010 表示带符号整数减法指令,其功能为 R[3]←R[1]-R[2]。执行指令 01B2H 后,R[3]=B052H-0008H=B04AH,结果未溢出。指令 01B3H=0000000110110011B,操作码 0011 表示带符号整数乘法指令,执行指令 01B3H 后,R[3]=R[1]×R[2]=B052H×0008H=8290H,结果溢出。
4)在进行指令的跳转时,可能向前跳转,也可能向后跳转,偏移量是一个带符号整数,因此在地址计算时,应对 imm 进行符号扩展。
5)无条件转移指令可以采用 J 型格式,将 tagt 部分写入 PC 的低 10 位,完成跳转。
假定计算机 M 字长为 32 位。按字节编址,采用 32 位定长指令字,指令 add slli 和 lw 的格式、编码和功能说明如题 43(a) 图所示。
其中 R[x] 表示通用寄存器 x 的内容,M[x] 表示地址为 x 的存储单元内容,shamt 为移位位数,imm 为补码表示的偏移量。题 43(b) 图给出了计算机 M 的部分数据通路及其控制信号(用箭头虚线表示),其中,A 和 B 分别表示从通用寄存器 rs1 和 rs2 中读出的内容,IR[31:20] 表示指令寄存器中的高 12 位。控制信号 Ext 为 0、1 时扩展器分别实现零扩展,符写扩展 ALUctr 为 000、001、010 时 ALU 分别实现加、减、逻辑左移运算。
请回答下列问题
(1) 计算机 M 最多有多少个通用寄存器?为什么 shamt 字段占 5 位?(2 分)
(2) 执行 add 指令时,控制信号 ALUBsrc 的取值应该是什么?若 rs1 和 rs2 寄存器内容分别是 8765 4321H 和 9876 5432H,则 add 指令执行后,ALU 输出端 F、OF 和 CF 的结果分别是什么?若设 add 指令处理的是无符号整数,则应根据哪个标志判断是否溢出(3 分)
(3) 执行 slli 指令时,控制信号 Ext 的取值可以是 0 也可以是 1,为什么?(2 分)
(4) 执行 lw 指令时,控制信号 Ext、ALUctr 的取值分别是什么?(2 分)
(5) 若一条指令的机器码是 A040 A103H,则该指令一定是 lw 指令,为什么?(2 分)
(6) 若执行该指令时,R[01H]=FFFF A2D0H,则所读取数据的存储地址是多少?(2 分)
[tag_link]
1)从 43 题 (a) 图可以看到,Y 寄存器 rs1 和 rs2 用 5 位表示,所以计算机 M 最多的是 2⁵=32 个寄存器。根据指令 R[rd] ← [rs1] << shamt 可知,shamt 表示左移。shamt:计算机的机器字长是 32 位,所以 shamt 表示左移的最大范围不能超过 32,所以只需要5bit 就可以表示对应的范围:log2 32=5。
2)ALUBsrc = 0,它的作用是支持 lw 指令和 imm 的偏移(R[rd] ← M[R[rs1]+imm])F 的计算如下:
8765 4321
+ 9876 5432
------------
11FDB 9753
由于计算机的机器字长是 32 位,所以最高位的 1 舍掉,F = 1FDB 9753H:OF 是溢出位,我们计算的结果发现确实发生了溢出和进位,所以 OF=1。CF 是进位位,计算时发现了最高位有进位,所以 CF=1。溢出的判断方法是,最高位进位(异或)次高位,计算过程发现最高位进位,次高位没有进位,所以 CF 是标志判断是否溢出。
3)slli 代表左移指令,slli 指令的高 12 位(即 IR[31:20])的最高位为 0,因此无论进行零扩展还是符号扩展,都是在高位补 0,效果等价,因此 Ext 可以是 0 也可以是 1。
4)R[rd] ← M[R[rs1]+imm] 这条指令的意思是,rs1 里的内容加上立即数,等于真正要访问的内存地址。计算偏移地址,偏移地址可正可负,应该使用补码表示。所以是符号扩展,Ext=1,然后表示加法,所以根据 (b) 图可知 ALUctr=000。
5)A040 A103H = 1010 0000 0100 0000 1010 0001 0000 0011B,60 位 = 0000011,中间的 1412 位 = 010,最高的 12 位为 A04H。其他两个指令 add 和 slli 的高 12 位都是 000H,所以该指令一定是 lw 指令。
6)A040 A103H = 1010 0000 0100 0000 1010 0001 0000 0011B,60 位 = 000 0011,中间的 1412 位 = 010,最高的 12 位为 A04。imm 是 31~25,也就是 A404 组(注意是符号扩展)扩展完 1111 1111 1111 1111 1111 1010 0000 0100,十六进制是 FFFF FA04。rs1 里的内容加上立即数,等于真正要访问的内存地址,R[O1H]=FFFF A2DOH,所以 FFFFFA04 + FFFFA2D0 = FFFF9CD4H。
某计算机采用 16 位定长指令字格式,其 CPU 中有一个标志寄存器,其中包含进位/借位标志 CF、零标志 ZF 和符号标志 NF。假定为该机设计了条件转移指令,其格式如下:
其中,00000 为操作码 OP;C、Z 和 N 分别为 CF、ZF 和 NF 的对应检测位,某检测位为 1 时表示需检测对应标志,需检测的标志位中只要有一个为 1 就转移,否则就不转移,例如,若 C=1,Z=0,N=1,则需检测 CF 和 NF 的值,当 CF=1 或 NF=1 时发生转移;OFFSET 是相对偏移量,用补码表示。转移执行时,转移目标地址为 (PC)+2+2×OFFSET;顺序执行时,下条指令地址为 (PC)+2。请回答下列问题。
(1) 该计算机存储器按字节编址,还是按字编址?该条件转移指令向后(反向)最多可跳转最多少条指令?
(2) 某条件转移指令的地址为 200CH,指令内容如下图所示,若该执行时 CF=0,ZF=0,NF=1,则该指令执行后 PC 的值是多少?若该指令执行时 CF=1,ZF=0,NF=0,则该指令执行后 PC 的值又是多少?请给出计算过程。
(3) 实现“无符号数比较小于等于时转移”功能的指令中,C、Z 和 N 应各是什么?
(4) 以下是该指令对应的数据通路示意图,要求给出中部件①~③的名称或功能说明。

1)因为指令长度为 16 位,且下条指令地址为 (PC)+2,故编址单位是字节。偏移量 OFFSET 为 8 位补码,范围为 -128~127,故相对于当前条件转移指令,向后最多可跳转 127 条指令。【评分说明】若正确给出 OFFSET 的取值范围,则酌情给分。
2)指令中 C=0,Z=1,N=1,故应根据 ZF 和 NT 的值来判断是否转移。当 CF=0,ZF=0,NF=1 时,需转移。己知指令中偏移量为 11100011B=E3H,符号扩展后为 FFE3H,左移一位(乘 2)后为 FFC6H,故 PC 的值(即转移目标地址)为 200CH+2+FFC6H=1FD4H。当 CF=1,ZF=0,NF=0 时不转移。PC 的值为 200CH+2=200EH。
3)指令中的 C、Z 和 N 应分别设置为 C=Z=1,N=0,进行数之间的大小比较通常是对两个数进行减法,而因为是无符号数比较小于等于时转移,即两个数相减结果为 0 或者负数都应该转移,若是 0,则 ZF 标志应当为 1,所以是负数,则借位标志应该为 1,而无符号数并不涉及符号标志 NF。
4)部件①用于存放当前指令,不难得出为指令寄存器;多路选择器根据符号标志 C/Z/N 来决定下一条指令的地址是 PC+2 还是 PC+2+2×OFFSET,故多路选择器左边线上的结果应该是 PC+2+2×OFFSET。根据运算的先后顺序以及与 PC+2 的连接,部件②用于左移一位实现乘 2,为移位寄存器。部件③用于 PC+2 和 2×OFFSET 相加,为加法器。部件②:移位寄存器(用于左移一位);部件③:加法器(地址相加)。【评分说明】合理给出部件名称或功能说明均给分。
[tag_link]
题 43 中描述的计算机,其部分指令执行过程的控制信号如题 44 图 a 所示。
该机指令格式如题 44 图 b 所示,支持寄存器直接和寄存器间接两种寻址方式,寻址方式位分别为 0 和 1,通用寄存器 R0~R3 的编号分别为 0、1、2 和 3。
请回答下列问题。
(1) 该机的指令系统最多可定义多少条指令?
(2) 假定 inc、shl 和 sub 指令的操作码分别为 01H、02H 和 03H,则以下指令对应的机器代码各是什么?
inc R1; // (R1)+1→R1
shl R2, R1; // (R1)<<1→R2
sub R3, (R1), R2; // ((R1))–(R2)→R3
(3) 假设寄存器 X 的输入和输出控制信号分别为 Xin 和 Xout,其值为 1 表示有效,为 0 表示无效(例如,PCout=1 表示 PC 内容送总线);存储器控制信号为 MEMop,用于控制存储器的读 (read) 和写 (write) 操作。写出题 44 图 a 中标号①~⑧处的控制信号或控制信号的取值。
(4) 指令 sub R1,R3,(R2) 和 inc R1 的执行阶段至少各需要多少个时钟周期?
1)指令操作码有 7 位,因此最多可定义27=128条指令。
2)各条指令的机器代码分别如下:①“incR1”的机器码为 0000001001000000,即 0240H。②“shlR2,R1”的机器码为 0000010010001000,即 0488H。③“subR3,(R1),R2”的机器码为 0000011011101010,即 06EAH。
3)各标号处的控制信号或控制信号取值如下:①0;②mov;③mova;④left;⑤read;⑥sub;⑦mov;⑧Srout【评分说明】答对两个给分。
4)指令 subR1, R3, (R2) 的执行阶段至少包含 4 个时钟周期;指令 incR1 的执行阶段至少包含 2 个时钟周期。