假定计算机 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 位,完成跳转。