以mips分支

时间:2015-10-13 18:18:49

标签: if-statement assembly branch 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

我不知道出了什么问题。任何正确方向的帮助将不胜感激。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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: