汇编 MIPS。如何改变vector两个位置的内容?

Assembly MIPS. How change the content of two positions of vector?

我想要的:
示例:
v[0] = 5
v[1] = 10
之后...
v[0] = 10
v[1] = 5

显然一切正常,但是当我们打印内容时,只有 $s0 的内容打印出正确的值。
如果您尝试打印保护程序 $s2 的内容,则会出现一个错误: "Runtime exception at 0x00400018: address out of range 0x00000000"。有人能帮我吗? 非常感谢

.data
vector : .word 5,10

.text

la $s0, vector
la $s1, vector
add $s1, $s1, 4



# $s0 is v[0]
# $s1 is v[1]
# $s2 is the saver

lw $s2, 0($s1)
sw $s0, 0($s1)
sw $s2, 0($s0)

li $v0, 1
lw $a0, 0($s0)
syscall

li $v0, 1
lw $a0, 0($s1)
syscall

首先,您的交换不正确。您对 sw $s0, 0($s1) 所做的是存储其中一个元素的地址,而不是存储该元素的值。所以你需要做这样的事情:

lw $s2, 0($s0)
lw $s3, 0($s1)
sw $s2, 0($s1)
sw $s3, 0($s0)

其次,您没有正确终止程序。在你的代码结束时,你应该执行 exit 系统调用:

li $v0, 10    # syscall_exit
syscall

如果你想在数字之间使用 space 或换行符,你必须使用系统调用 4 或 11 打印一个。