🏷️ 知识点:指令操作码

共 4 道相关题目

模拟卷 年第 19 题 组成原理 选择题

在微程序控制器中,微程序的入口地址是由( )形成的。

A. 机器指令的地址码字段 B. 微指令的微地址字段 C. 机器指令的操作码字段 D. 微指令的操作码字段

指令格式 指令操作码

[tag_link]

正确答案:C

在微程序控制器中,微程序用于产生控制信号以执行机器指令。 当控制器开始执行一条新的机器指令时,需要确定该指令对应的微程序序列的起始地址,即入口地址。 这个入口地址的形成通常基于机器指令的操作码字段。

机器指令的操作码字段指明了指令的类型(如加法、跳转等),控制器通过操作码查询一个映射表(如微地址生成器或控制存储器地址转换逻辑),从而得到对应的微程序入口地址。 这个过程是微程序控制器中指令解码的关键步骤。

选项A不正确,因为机器指令的地址码字段主要用于指定操作数地址(如内存地址或寄存器编号),与微程序入口地址无关。 选项B不正确,微指令的微地址字段用于在微程序内部指定下一条微指令的地址(例如实现微程序分支),而不是形成整个微程序的初始入口。 选项D也不正确,微指令的操作码字段用于控制具体的微操作,不参与生成微程序入口地址。 因此,正确答案是C。


2021 年第 43 题 组成原理 综合题

假定计算机 M 字长为 16 位,按字节编址,连接 CPU 和主存的系统总线中地址线为 20 位、数据线为 8 位,采用 16 位定长指令字,指令格式及其说明如下:

2018_Q7_3

其中,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 位,完成跳转。


2014 年第 44 题 组成原理 综合题

(13分)某程序中有如下循环代码段P:“for (int i=0;i<N;i++)su m +=A[i];”。假设编译时变量sum 和i 分别分配在寄存器R1 和R2 中。常量N 在寄存器R6 中,数组A 的首地址在寄存器R3 中。程序段P 起始地址为08048100H, 对应的汇编代码和机器代码如下表所示。

编号地址机器代码汇编代码注释
108048100H00022080Hloop:sll R4,R2,2(R2)《2→R4
208048104H00083020Hadd R4,R4,R3(R4)+(R3)→R4
308048108H8C850000Hload R5,0(R4)((R4)+0)→R5
40804810CH00250820Hadd R1,R1,R5(R1)+(R5)→R1
508048110H20420001Hadd R2,R2,1(R2)+1→R2
608048114H1446 FFFAHbne R2,R6,loopif (R2)≠(R6) goto loop

执行上述代码的计算机 M 采用32位定长指令字,其中分支指令 bne 采用如下格式:

31     2625    2120    1615     0
OPRsRdOFFSET

OP为操作码,Rs 和Rd 为寄存器编号,OFFSET为偏移量,用补码表示。请回答下列问题,并说明理由。

(1)M 的存储器编址单位是什么?

(2)已知sll 指令实现左移功能,数组A 中每个元素占多少位?

(3)表中bne 指令的OFFSET 字段的值是多少?已知bne 指令采用相对寻址方式,当前PC内容为bne 指 令地址,通过分析题44表中指令地址和bne 指令内容,推断出bne指令的转移目标地址计算公式。

(4)若M 采用如下“按序发射、按序完成”的5级指令流水线:IF ( 取指)、ID ( 译码及取数)、EXE ( 执 行 ) 、MEM ( 访存)、 WB ( 写回寄存器),且硬件不采取任何转发措施,分支指令的执行均引起3个时 钟周期阻塞,则P 中那些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒 险?为什么指令1的执行不会因为与指令5的数据相关而发生阻塞?

[tag_link]

(1) 存储器编址单位为字节。因为每条指令占 4B,指令地址差为 4 个地址单位,故一个地址单位代表 1B。

(2) 数组 A 中每个元素占 32 位(4B)。sll 指令左移 2 位相当于乘 4,用于计算数组元素地址偏移,说明每个元素占 4B = 32 位。

(3) bne 指令的机器代码为 1446 FFFAH,后 2B 为 OFFSET 字段,值为 FFFAH(补码),即 -6。bne 指令地址为 08048114H,根据指令格式,转移目标地址计算公式为:(PC) + 4 + OFFSET × 4。执行 bne 时 PC 已自动加 4 变为 08048118H,-6 × 4 = -24,08048118H - 18H = 08048100H(loop 地址)。

(4) 由于数据相关而发生阻塞的指令为第 2、3、4、6 条。第 6 条指令会发生控制冒险。指令 1(sll)与指令 5(add R2,R2,1)之间没有数据相关,因为指令 1 写 R4,指令 5 写 R2,寄存器不同,不会发生阻塞。


2017 年第 44 题 组成原理 综合题

在按字节编址的计算机 M 上,题 43 中 f1 的部分源程序(阴影部分)与对应的机器级代码(包括指令的虚拟地址)如下图所示。

int f1(unsigned n)
1   00401020 55         push ebp
...      ...        ...
    for (unsigned i = 0; i <= n-1; i++) {
...      ...        ...
20  0040105E 39 4D F4   cmp dword ptr [ebp-0Ch],ecx
...      ...        ...
        power *= 2;
...      ...        ...
23  00401066 D1 E2      shl edx,1
...      ...        ...
    return sum;
...      ...        ...
35  0040107F C3         ret

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令。

请回答下列问题。

(1) 计算机 M 是 RISC 还是 CISC?为什么?

(2) f1 的机器指令代码共占多少字节?要求给出计算过程。

(3) 第 20 条指令 cmp 通过 i 减 n-1 实现对 i 和 n-1 的比较。执行 f1(0) 过程中,当 i=0 时,cmp 指令执行后,进/借位标志 CF 的内容是什么?要求给出计算过程。

(4) 第 23 条指令 shl 通过左移操作实现了 power2 运算,在 f2 中能否也用 shl 指令实现 power2?为什么?

复杂和精简指令集 标志寄存器 指令操作码

[tag_link]

(1)M 为 CISC。(1 分)M 的指令长短不一,不符合 RISC 指令系统特点。(1 分)

(2)f1 的机器代码为 96B。(1 分)因为 f1 的第一条指令 “push ebp” 所在的虚拟地址为 0040 1020H,最后一条指令 “ret” 所在的虚拟地址为 0040 107FH,所以,f1 的机器指令代码长度为:0040 107FH - 0040 1020H + 1 = 60H = 96B1 分)

(3)CF = 1。(1 分)cmp 指令实现 in-1 的比较功能,进行的是减法运算。在执行 f1(0) 过程中,n=0,当 i=0 时,i=0000 0000H,并且 n-1=FFFF FFFFH。因此,当执行第 20 条指令时,在补码加/减运算器中执行的是 “0 - FFFF FFFFH” 的操作,即:0000 0000H + 0000 0000H + 1 = 0000 0001H。此时,进位输出 C=0,减法运算时的借位标志 CF = C ⊕ 1 = 1。(2 分)

(4)f2 中不能用 shl 指令实现 power * 2。(1 分)因为 shl 指令用来将一个整数的所有有效位作为一个整体左移;而 f2 中的变量 power 是 float 型,其机器数中不包含最高有效位,但包含了阶码部分,将其作为一个整体左移时并不能实现 “乘 2” 的功能。因此在 f2 中不能用 shl 指令实现 power * 2。(2 分)浮点数运算比整型运算要复杂,耗时也较长。