MIPS和字节说明

时间:2016-05-20 11:39:29

标签: assembly byte mips

这三个问题是我在课堂上无法理解的唯一问题。我的教授太可怕了在解释材料时根本不清楚,这就是我必须来这里的原因。我有一些答案,但我不知道他们是否正确。非常感谢你提前,我非常感谢你花时间阅读。

  1. 发出汇编说明以便:
  2. a)仅使用逻辑移位隔离$ s0中单词的字节1。

    b)补充寄存器$ t0的低12位,但保持所有其他位不变。如果可能,请使用立即格式化指令。如果不能使用立即格式化指令,请解释原因并改为使用掩码寄存器。

    c)屏蔽R-Format指令的移位量并清除其余位。如果可能,请使用立即格式化指令。如果无法使用立即格式化指令,请解释原因并改为使用掩码寄存器。

    1. 此代码适用于问题2a
    2. 循环: slt $ t2,$ t0,$ t0

         bne $t2, $zero, loop
      
         j done
      

      完成的:

      a)bne的地址是400.给出目标地址。

      1. 给定汇编指令beq $ t1,$ t2,Next
      2. 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位。

1 个答案:

答案 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>