意外循环终止

Unintended loop termination

我正在为 class 编写一个小写文本字符串的程序。这适用于第一个字符,但当它为第二个字符循环时,beq $10,$0,done 行总是将 $10 变为 0 并终止循环。我不知道为什么。

.text
.globl main
main:
lui , 0x1000

loop:
lbu ,0()
sll [=10=],[=10=],0

beq ,[=10=],done
sll [=10=],[=10=],0

addiu ,,0x20
sw  ,0()
addiu ,,1
ori ,[=10=],1
j loop

sll [=10=],[=10=],0
done: sll [=10=],[=10=],0

.data
string: .asciiz "ABCDEFG"

sw ,0() <-- 这是错误的

sw 应该是 sb。否则,您会将 32 位字 0x000000nn(其中 0xnn 是您的字符)存储在 ()。这意味着 1()..3() 处的字节将全部填充值 0。因此在循环的下一次迭代中,您将加载第一个 0 字节并退出循环。