我怎样才能阻止我的 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.' 我做错了什么?

您从不给 dh 初始值,因此没有为它们保留 space,因此它们具有相同的地址。

您可以通过查看您在 MARS assemble 之后使用的地址来了解这一点。在 QtSPIM 中,这甚至不会 assemble 因为它需要您指定一个初始值。

要解决此问题,请将这两个变量声明更改为

d:  .word 0  
h:  .word 0