MIPS .asciiz 第一个和最后一个字符总是相等的

MIPS .asciiz first and last char are always equal

这是我的简单程序,它应该从 .data 中获取字符串,将每个字符转换为大写,最后打印字符串。

.data
    s:  .asciiz     "wassup"

.text
    la  $t0, s          # get adress of text
    add $t1, $zero, $t0     # first adress

text_loop:
    lb  $t2 , 0($t1)        # first char
    beqz    $t2, end_text       # quit loop if string ends
    sub $t2, $t2, 32
    sb  $t2, s
    add $t1, $t1, 1     # next adress
    j   text_loop       # continue loop

end_text:
    
    li  $v0, 4
    la  $a0, s
    syscall

    li  $v0, 10     
    syscall     

输出:

只有第一个字符被改变,它总是被转换成最后一个字符。

我学习汇编已经 2 周了,非常感谢任何帮助。

查看你的代码,你没有存储到你加载的同一个地方。

行:

    sb  $t2, s

问题所在

您始终将修改后的字符存储到字符串的开头。此行应反映负载:

    lb  $t2 , 0($t1)

并成为:

    sb  $t2, 0($t1)