[英]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
將來您想使用jr
或jal
而最有可能使用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.