2016-03-10 308 views
1

我需要將此跳轉爲二進制,我無法弄清楚如何獲得即時值。我試圖通過假設循環的基地址爲40000,然後將其除以4(40000/4 = 10000),但我不知道這是否正確(這正是他們是如何做到的例如在我的書中)。MIPS如何將j指令轉換爲機器碼?

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

回答

1

j指令成爲位PC和比特1..0成爲00的27..2的25..0(這是由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處。