If statement mips中的分支

If statement mips中的分支,if-statement,assembly,branch,mips,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 我不知

我是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
和许多其他语言中的return。在您的情况下,您没有函数,因此不需要返回某些内容。您的代码应该如下所示:

   .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

将来,您希望使用
jr
jal
,而最有可能使用
堆栈
。当您调用另一个函数时,您希望编译器有一个“请返回”,因此每次都将地址保存在
$ra
(返回地址)中。换句话说,如果您只想使用分支而不调用函数,则不需要使用jr。

jr
表示跳转寄存器,它用于在
MIPS
中有函数时使用。这就像是
C
和许多其他语言中的return。在您的情况下,您没有函数,因此不需要返回某些内容。您的代码应该如下所示:

   .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

将来,您希望使用
jr
jal
,而最有可能使用
堆栈
。当您调用另一个函数时,您希望编译器有一个“请返回”,因此每次都将地址保存在
$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: 

我完全忘了上传我想到的东西。下一节课我的老师讲的是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: 

你认为jr是做什么的?你认为jr是做什么的?