这三个问题是我在课堂上无法理解的唯一问题。我的教授太可怕了在解释材料时根本不清楚,这就是我必须来这里的原因。我有一些答案,但我不知道他们是否正确。非常感谢你提前,我非常感谢你花时间阅读。
a)仅使用逻辑移位隔离$ s0中单词的字节1。
b)补充寄存器$ t0的低12位,但保持所有其他位不变。如果可能,请使用立即格式化指令。如果不能使用立即格式化指令,请解释原因并改为使用掩码寄存器。
c)屏蔽R-Format指令的移位量并清除其余位。如果可能,请使用立即格式化指令。如果无法使用立即格式化指令,请解释原因并改为使用掩码寄存器。
循环: slt $ t2,$ t0,$ t0
bne $t2, $zero, loop
j done
完成的:
a)bne的地址是400.给出目标地址。
a)如果指令的地址是800字节而Next是目标地址680字节。指令二进制表示的偏移字段的值是多少?给出十进制和二进制的偏移值。
我的回答:
1a上。 sll $ t0,$ s0,16 srl $ t1,$ t0,24
湾xori(不能弄明白其余的)
℃。 andi $ t0,$ s1,0x07c0
2a上。 424(400 + 4)+(4 * 3)= 416
湾
3A。我认为你必须做800-680但我不确定。我所知道的是,当用二进制写入时,偏移值必须是16位。
答案 0 :(得分:0)
1a是错误的,如果你没有移动相同的数量,那么它是不正确的。向左移24位以清除前24位,然后向右移24位以将低字节返回到其位置。
1b将是xori 0xfff
但是指令中的12位立即自动进行符号扩展,这实际上意味着xori 0xffffffff
不是你想要的。这就是你需要使用掩码寄存器的原因。
1c是正确的
2a loop
显然位于bne
之前,因此地址必须为bne-4=396
。
3a是啊800-680
但是你需要考虑到PC已经更新并且偏移量是用单词编码的事实,所以你需要除以4
给出(800-680)/4-1=29
< / p>