以 mip 为单位的分支
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
和许多其他语言中的 return。在您的情况下,您没有功能,因此您不需要 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
,而最有可能使用 stack
。加班你正在调用一个不同的函数,你希望编译器有一个 "please to return",所以你每次都在 $ra
(return 地址)中保存地址。换句话说,如果您只想使用分支而不调用函数,则不需要使用 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:
我是 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。在您的情况下,您没有功能,因此您不需要 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
,而最有可能使用 stack
。加班你正在调用一个不同的函数,你希望编译器有一个 "please to return",所以你每次都在 $ra
(return 地址)中保存地址。换句话说,如果您只想使用分支而不调用函数,则不需要使用 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: