Mips 日航没有做任何事
我的目标是交换swap:函数中的值 但是它什么也没做 我将a0和a1的值设置为任意值,它不会覆盖它们的值。 我不允许使用t0,我必须使用堆栈 不过,为什么它对a0和a1没有任何作用,我必须在v0中返回一些东西吗Mips 日航没有做任何事,mips,Mips,我的目标是交换swap:函数中的值 但是它什么也没做 我将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
.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
您正在交换指针,而不是指针指向的值。当您打印这些值时,您直接从n1
和n2
读取它们,而不是通过您交换的指针
要解决此问题,您可以:
- 在调用
之前,加载swap
和n1
的值(而不是它们的地址)。然后打印n2
和$a0
,而不是从$a1
和n1
重新加载值n2
- 取消对swap中指针的引用,以便实际交换值
- 在执行
syscall之前取消对指针的引用,而不是直接从print\u int
和n1
读取要打印的值n2