MIPS 子例程通过引用传递参数
MIPS subroutine passing parameters by reference
我有这个 MIPS 代码,它使用按值传递的子例程参数进行一些添加
.data # Data zone
dato1: .word 1
dato2: .word 3
dato3: .word 5
dato4: .word 4
res1: .space 4
res2: .space 4
.text # Code Zone
# main Code
main: lw $a0, dato1([=10=])
lw $a1, dato2([=10=])
firstcall: jal suma
sw $v0, res1([=10=])
lw $a0, dato3([=10=])
lw $a1, dato4([=10=])
secondcall: jal suma
sw $v0, res2([=10=])
j fin #End
suma: add $v0, $a0, $a1
jr $ra
fin:
li $v0, 10
syscall
但现在我需要 "translate it" 所以 sobroutine 通过引用使用参数。
有什么想法吗?
好的,已修复。我以为 la
代表 "load array",但它是加载地址。
所以新代码是
.data # Data zone
dato1: .word 1
dato2: .word 3
dato3: .word 5
dato4: .word 4
res1: .space 4
res2: .space 4
.text # Code zone
# Main program
main:
la $a0, dato1
la $a1, dato2
la $a3, res1
firstcall: jal suma
la $a0, dato3
la $a1, dato4
la $a3, res2
secondcall: jal suma
j fin
suma:
lw $a0, 0($a0)
lw $a1, 0($a1)
add $v0, $a0, $a1
sw $v0, 0($a2)
jr $ra
fin:
li $v0, 10
syscall
现在应该可以了。
我有这个 MIPS 代码,它使用按值传递的子例程参数进行一些添加
.data # Data zone
dato1: .word 1
dato2: .word 3
dato3: .word 5
dato4: .word 4
res1: .space 4
res2: .space 4
.text # Code Zone
# main Code
main: lw $a0, dato1([=10=])
lw $a1, dato2([=10=])
firstcall: jal suma
sw $v0, res1([=10=])
lw $a0, dato3([=10=])
lw $a1, dato4([=10=])
secondcall: jal suma
sw $v0, res2([=10=])
j fin #End
suma: add $v0, $a0, $a1
jr $ra
fin:
li $v0, 10
syscall
但现在我需要 "translate it" 所以 sobroutine 通过引用使用参数。
有什么想法吗?
好的,已修复。我以为 la
代表 "load array",但它是加载地址。
所以新代码是
.data # Data zone
dato1: .word 1
dato2: .word 3
dato3: .word 5
dato4: .word 4
res1: .space 4
res2: .space 4
.text # Code zone
# Main program
main:
la $a0, dato1
la $a1, dato2
la $a3, res1
firstcall: jal suma
la $a0, dato3
la $a1, dato4
la $a3, res2
secondcall: jal suma
j fin
suma:
lw $a0, 0($a0)
lw $a1, 0($a1)
add $v0, $a0, $a1
sw $v0, 0($a2)
jr $ra
fin:
li $v0, 10
syscall
现在应该可以了。