第1题
假定计算机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)执行add 指令时,控制信号ALUBsrc 的取值应是什么?若rs1和rs2 寄存器内容分别是8765 4321H 和 9876 5432H,则add 指令执行后,ALU 输出端F、OF 和CF 的结果分别是什么?若该add 指令处理的是无符号整数,则应根据哪个标志判断是否溢出?
(3)执行slli 指令时,控制信号Ext 的取值可以是 0 也可以是 1,为什么?
(4)执行lw 指令时,控制信号Ext、ALUctr 的取值分别是什么?
(5)若一条指令的机器码是A040A103H,则该指令一定是lw 指令,为什么?若执行该指令时,R[01H]=FFFF A2D0H,则所读取数据的存储地址是什么?
参考答案
1)log₂32=5
2)F = 1FDB 9753H:
OF=1。
CF=1。
CF 是标志判断是否溢出。
3)slli 代表左移指令,s11i 指令的高 12 位(即 IR[31:20])的最高位为 0,因此无论进行零扩展还是符号扩展,都是在高位补 0,效果等价,因此 Ext 可以是 0 也可以是 1。
4)Ext=1,ALUctr=O00。
5)A040 A103H = 1010 0000 0100 0000 1010 0001 0000 0011B,6~0 位 = 0000011,中间的 14~12 位 = 010,最高的 12 位为 A04H。其他两个指令 add 和 slli 的高 12 位都是 000H,所以该指令一定是 lw 指令。
FFFFFA04 + FFFFA2D0 = lFFFF9CD4H。