(1) 第一问。ALU的宽度为16...
(1) 第一问。ALU的宽度为16位。ALU的宽度是指它能够处理的位数。一般等于字长,因为计算机M字长为16位,所以ALU的宽度为16位。
第二问。可寻址主存空间大小为 2^20 字节(或1MB)。地址线20位,可表示地址数为 2^20 ,计算机按字节编址,所以主存空间大小为 2^20×1B=2^20B=1MB 。
第三问。指令寄存器、主存地址寄存器(MAR)和主存数据寄存器(MDR)各有16位、20位和8位。指令寄存器用于存储指令,指令字长16位。主存地址寄存器(MAR)位数等于地址线位数,地址线为20位,所以MAR有16位。主存数据寄存器(MDR)位数等于数据线位数,数据线为8位,所以MDR有8位。
(2) 第一问。R型格式最多有16种操作。R型格式操作码op1占4位,最多有 2^4=16 种操作。
第二问。I型和J型格式总共最多有63种操作。I型格式操作码op2和J型格式操作码op3都占高6位,但其中00000操作码已经被R型占用,所以I型和J型格式总共最多有 2^6−1=63 63种操作。
第三问。通月寄存器最多有4个。rs、rt和rd为通用寄存器编号,都占2位,所以通月寄存器最多有 2^2=4 个。
(3) 指令01B2H = 0000 0001 1011 0010B,高6位为000000,为R型格式指令,所以 ,表示R[rd] ← R[rs] op1 R[rt],op1=0010表示带符号整数减法指令,rs为1号寄存器,内容为B052H,rt为2号寄存器,内容为0008H,rd为3号寄存器,内容为0020H,即其功能为 R[3]←R[1]-R[2]。执行指令01B2H后,R[3]=B052H-0008H=B04AH,被减数B052H和减数0008H均视为无符号数,显然B052H够减0008H,该减法没有发生借位,结果不溢出。
指令01B3H = 0000 0001 1010 1011B,为R型格式指令,所以 ,表示R[rd] ← R[rs] op1 R[rt],op1=0011表示带符号整数乘法指令,rs为1号寄存器,内容为B052H,rt为2号寄存器,内容为0008H,rd为3号寄存器,内容为0020H,即其功能为 R[3]←R[1]×R[2]。执行指令01B3H后,R[3]=B052H×0008H。关于该乘法的计算,有如下两种方法:
方法一:十进制乘法
将二进制乘法转化为十进制乘法计算,R[3]=B052H×0008H=-20398×8=-163184,16位有符号整型的表示范围为-32768~32767,-163184超出其表示范围,结果溢出。
方法二:补码一位乘法(Booth乘法)
带符号整数乘使用的是补码一位乘法(Booth乘法)。Booth乘法对乘数从低位开始判断,根据两个数据位的情况决定进行加法、减法还是仅仅移位操作。判断的两个数据位为当前位及其右边的位(初始时需要增加一个辅助位0),移位操作是向右移动。其中Booth算法在操作时,需要遵循一个操作表:
具体步骤如下:
- 被乘数X与乘数Y均以补码的形式参加乘法运算,运算结果是积的补码。
- 部分积和被乘数X采用双符号位,乘数Y采用单符号位。
- 初始部分积为0。运算前,在乘数Y的补码末位添加一位附加位 Yn+1 ,初始值为0。
- 根据 YnYn+1 的值,按照上表进行累加右移操作,右移时遵循补码的移位规则。
- 累加n+1次,右移n次,最后一次不右移。
模拟上述过程得到R[3] = B052H×0008H = 1111 1111 1111 1101 1000 0010 1001 0000B,因为寄存器只能存储16位有符号整型,所以低15位为数值位,高17位为符号位和符号扩展位,高17位非全1,结果溢出。
方法三:用算术左移运算模拟乘法运算
R[3]=B052H×0008H中乘数0008H= 2^3 ,经过编译器优化后,乘法运算可以转化为算术左移运算,这里在单符号位基础上扩展16位符号扩展位,用<<表示左移运算,则 R[3] = B052H×0008H = B052H<<3 = 1011 0000 0101 0010B<<3 = 1111 1111 1111 1111 1011 0000 0101 0010B<<3 = 1111 1111 1111 1101 1000 0010 1001 0000B,因为寄存器只能存储16位有符号整型,所以低15位为数值位,高17位为双符号位和符号扩展位,高17位非全1,结果溢出。
(4) 因为imm(偏移量)为带符号整数,所以应对 imm 进行符号扩展。
(5) 无条件转移指令可以采用J型格式。因为J型格式功能为target→PC的低10位,无条件转移指令需要更新PC内容,把target送到PC的低10位后,PC内容为目标指令地址。
登录后提交答案
暂无评论,来抢沙发