我怎样才能阻止我的 MIPS .data 部分的 char 变量被覆盖?
How can I stop my MIPS .data section's char variables from being overwritten?
在我的 MIPS 程序的 .data 部分,我定义了两个 char 变量,d 和 h。
.data
d: .word
h: .word
在我的 .text 部分,我尝试将 d 的值设置为 'i' 并将 h 的值设置为 'k'。
.text
#setting d = to 'i'
la $s0, d
li $s1, 'i'
sb $s1, 0($s0)
#setting h = to 'x'
la $s0, h
li $s1, 'x'
sb $s1, 0($s0)
但是,当我打印出d的值和h的值之后,它们都是'x'。
#printing d
lb $a0, d
li $v0, 11
syscall
#printing h
lb $a0, h
li $v0, 11
syscall
我好像覆盖了 'i.' 我做错了什么?
您从不给 d
和 h
初始值,因此没有为它们保留 space,因此它们具有相同的地址。
您可以通过查看您在 MARS assemble 之后使用的地址来了解这一点。在 QtSPIM 中,这甚至不会 assemble 因为它需要您指定一个初始值。
要解决此问题,请将这两个变量声明更改为
d: .word 0
h: .word 0
在我的 MIPS 程序的 .data 部分,我定义了两个 char 变量,d 和 h。
.data
d: .word
h: .word
在我的 .text 部分,我尝试将 d 的值设置为 'i' 并将 h 的值设置为 'k'。
.text
#setting d = to 'i'
la $s0, d
li $s1, 'i'
sb $s1, 0($s0)
#setting h = to 'x'
la $s0, h
li $s1, 'x'
sb $s1, 0($s0)
但是,当我打印出d的值和h的值之后,它们都是'x'。
#printing d
lb $a0, d
li $v0, 11
syscall
#printing h
lb $a0, h
li $v0, 11
syscall
我好像覆盖了 'i.' 我做错了什么?
您从不给 d
和 h
初始值,因此没有为它们保留 space,因此它们具有相同的地址。
您可以通过查看您在 MARS assemble 之后使用的地址来了解这一点。在 QtSPIM 中,这甚至不会 assemble 因为它需要您指定一个初始值。
要解决此问题,请将这两个变量声明更改为
d: .word 0
h: .word 0