簡體   English   中英

分支分支

[英]Branching in mips

我是mips的新手,正嘗試從Java做等效的指令:

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

我不知道怎么了。 任何在正確方向上的幫助將不勝感激。

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。

我完全忘了上傳我的想法。 我的老師講的下一課是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: 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM