2024-43
假定计算机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 指令处理的是无符号整数,则应根据哪个标志判断是否溢出?(5 分)
(3) 执行 slli 指令时,控制信号 Ext 的取值可以是 0 也可以是 1,为什么?(2分)
(4) 执行 lw 指令时,控制信号 Ext、ALUctr 的取值分别是什么?(2分)
(5) 若一条指令的机器码是 A040 A103H,则该指令一定是 lw 指令,为什么?若执行该指令时,R[01H]=FFFF A2D0H,则所读取数据的存储地址是什么?(2分)
(1)最多有32个通用寄存器。因为指令中rs1、rs2字段各占5位,可表示2⁵=32个不同寄存器编号。shamt字段占5位,是因为字长为32位,移位位数范围为0~31,需要5位二进制表示。
(2)ALUBsrc取值应为0(选择寄存器B作为ALU第二操作数)。
F = 87654321H + 98765432H = 1FDB9753H。
OF = 1(有符号溢出),CF = 1(无符号进位)。
若处理无符号整数,应根据CF判断是否溢出。
(3)因为slli指令的移位位数只使用IR[31:20]字段中的低5位(shamt),扩展器扩展的高位结果不会被使用,所以Ext取值可以是0或1。
(4)Ext取值应为1(符号扩展偏移量),ALUctr取值应为000(ALU执行加法,计算有效地址)。
(5)机器码A040A103H对应的二进制指令格式中,操作码IR[6:0]=0000011B(对应lw),功能码IR[14:12]=010B,符合题43图(a)中lw指令的编码规则,因此一定是lw指令。
存储地址 = R[01H] + 符号扩展(103H) = FFFFA2D0H + 103H = FFFF9CD4H。