我的目标是交换swap:function
中的值 然而,它没有做任何事情。我将a0和a1的值设置为任意值,并且不会覆盖它们的值。 我不允许使用t0,我必须使用堆栈。
仍然,为什么不对a0和a1做任何事情,我是否必须在v0中返回一些内容?
.text
main:
la $a0,n1
la $a1,n2
jal swap
li $v0,1 # print n1 and n2; should be 27 and 14
lw $a0,n1
syscall
li $v0,11
li $a0,' '
syscall
li $v0,1
lw $a0,n2
syscall
li $v0,11
li $a0,'\n'
syscall
li $v0,10 # exit
syscall
swap:
addi $sp, $sp, -4
sw $a0, 0($sp)
addi $a0, $a1, 0
lw $a1, 0($sp)
addi $sp, $sp, 4
jr $ra
L1:
.data
n1: .word 14
n2: .word 27
答案 0 :(得分:1)
您正在交换指针,而不是他们将指向的值。当您打印这些值时,您可以直接从n1
和n2
而不是通过您交换的指针读取这些值。
要解决此问题,您可以:
n1
之前加载n2
和swap
的值(而不是其地址)。然后打印$a0
和$a1
,而不是重新加载n1
和n2
中的值。print_int
系统调用之前取消引用指针,而不是直接从n1
和n2
读取值。第一种解决方案是最简单的。