意外循环终止
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 字节并退出循环。
我正在为 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 字节并退出循环。