假定计算机M字长为32位,按字节编址,采用32位定长指令字,指令add、slli和1w的格式、编码和功能说明如图(a)所示。

其中,R[x]表示通用寄存器x的内容,M[x]表示地址为x的存储单元内容,shamt为移位位数,imm为补码表示的偏移量。图(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的取https://oldvers.cqvip.com值应是什么?若rsl和rs2寄存器内容分别是87654321H和98765432H,则add指令执行后,ALU输出端F、OF和CF的结果分别是什么?若该add指令处理的是无符号整数,则应根据哪个标志判断是否溢出?(5分)3)执行slli指令时,控制信号Ext的取值可以是0也可以是1,为什么?(2分)4)执行1w指令时,控制信号Ext、ALUctr的取值分别是什么?(2分)
最多有2⁵=32个通用寄存器。M字长为32位,故通用寄存器宽度为32位,因此shamt字段占1og₂32=5位。
控制信号ALUBsrc=0。F=1FDB9753H;OF=1;CF=1;根据CF判断是否溢出。add指令的两个源操作数均来自通用寄存器,因此多路选择器的控制信号ALUBsrc=0。rs1=87654321H,rs2=98765432H,则rs1+rs2=87654321H+98765432H=1FDB9753H,计算
过程中,次高位向最高位的进位为0,最高位产生的进位为1,因此OF=0田1=1。add做的是加法操作,sub=0,因此CF=0田1=1,无符号数根据CF标志位判断是否溢出。
因为slli指令的移位位数只使用IR[31:20]中的低5位,与高位IR[31:25]及扩展出来的位无关,故Ext取值可以是0,也可以是1。
Ext=1;ALUctr=000。
Iw指令的功能是将主存地址为R[rs1]+imm的数据加载到目标寄存器,需要先通过ALU计算
访存有效地址,imm是补码表示的12位有符号数,在和R[rs1]中的32位数相加时需要进行
符号扩展,R[rs1]中的数和imm符号扩展后的数做的是加法。
因为A040 A103H=101000000100 00001 010 00010 0000011B,根据指令格式中IR[6:0]=0000011B,IR[14:12]=010B,可以判定该指令是1w指令。1w指令所读取数据的存储地址为FFFF 9CD4H。
1w指令的高12位=A04H,经过符号扩展后,得到32位机器码为FFFF FA04H,所读取数据的存储地址为FFFF A2DOH+FFFF FA04H=FFFF 9CD4H。