汇编 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 打印一个。
我想要的:
示例:
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 打印一个。