MIPS如何将j指令转换为机器代码?

时间:2016-03-10 01:59:34

标签: mips

我需要将此跳转换为二进制,我无法弄清楚如何获得立即值。我尝试通过取Loop的基地址(假定为40000然后将其除以4(40000/4 = 10000))但我不知道这是否正确(这就是他们在一个我书中的例子。)

    Loop: slt $t0,$s0,$s1
          beq $t0,1,Exit
          sub $s0,$s0,$s1;
          j Loop;
    Exit:

1 个答案:

答案 0 :(得分:1)

j指令的位25..0变为PC的位27..2,位1..0变为00(这是4业务的除法)。这是有效的,因为地址始终是4字节对齐的。

因此,如果Loop位于地址40,000,则指令的底部26位为00​​ 0000 0000 0010 0111 0001 0000(10,000),其他6位为j操作码(0000 10)

当指令执行时,提取值(在您的情况下为10,000)并向左移位2位(乘以4)。然后该值替换PC的底部28位 - 前4位(在您的情况下为0000)保持不变。程序执行的下一条指令将在地址40,000处。