我需要将此跳转换为二进制,我无法弄清楚如何获得立即值。我尝试通过取Loop的基地址(假定为40000然后将其除以4(40000/4 = 10000))但我不知道这是否正确(这就是他们在一个我书中的例子。)
Loop: slt $t0,$s0,$s1
beq $t0,1,Exit
sub $s0,$s0,$s1;
j Loop;
Exit:
答案 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处。