【问题标题】:Branching in mips在 mips 中分支
【发布时间】:2015-10-13 18:18:49
【问题描述】:

我是 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 是做什么的?

标签: if-statement assembly branch mips


【解决方案1】:

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。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-06-20
      • 2013-11-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2013-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多