2015-10-13 48 views
0

我是新來的MIPS分支,並試圖從Java等效指令:在MIPS

if (x == y) 
    z = 14; 
else 
    w = 23; 

我想出:

.data 

w: .word 23 
x: .word 1 
y: .word 1 
z: .word 14 

.text 

lw $t1 x 
lw $t2 y 
lw $t3 z 
lw $t4 w 

bne $t1, $t2, L1 
j L2 

L1: jr $t4 
L2: jr $t3 

,但我得到一個錯誤:無效的程序計數器值:0x0000000e

我不知道什麼是錯的。任何幫助在正確的方向將不勝感激。

+0

你認爲'jr'做了什麼? –

回答

0

我完全忘了上傳我想出來的東西。我老師報告的下一課是jr和jal。

.data 

w: .word 23 
x: .word 1 
y: .word 1 
z: .word 14 

.text 

lw $t1 x 
lw $t2 y 


bne $t1, $t2, L1 
li $t5 14 
sw $t5 z 
j out 

L1: li $t4 23 
sw $t4 w 

out: 
0

Jr表示跳轉寄存器,當您在MIPS中有一個功能時,它將被使用。這就像在C和許多其他語言中的返回。在你的情況下,你沒有一個功能,所以你不需要返回一些東西。你的代碼應該是這個樣子:

.data 

    w: .word 23 
    x: .word 1 
    y: .word 1 
    z: .word 14 

    .text 

    lw $t1 x 
    lw $t2 y 
    lw $t3 z 
    lw $t4 w 

    bne $t1, $t2, L1 

    L1: 
    #Do something 
    $v0,10 
    syscall 

在要使用jrjal未來,而最有可能使用stack。加班你要調用一個不同的函數,你希望編譯器有一個「請返回」,所以你每次都要在$ra(返回地址)保存地址。換句話說,如果您只是想在不調用函數的情況下使用分支,則不需要使用jr。