意外的循环终止

时间:2015-04-02 18:03:45

标签: assembly mips spim

我正在编写一个用于降低文本字符串的类的程序。这适用于第一个字符,但当它循环返回第二个beq $ 10,$ 0时,完成的行总是将$ 10变为0并终止循环。我不明白为什么。

.text
.globl main
main:
lui $9, 0x1000

loop:
lbu $10,0($9)
sll $0,$0,0

beq $10,$0,done
sll $0,$0,0

addiu $10,$10,0x20
sw  $10,0($9)
addiu $9,$9,1
ori $10,$0,1
j loop

sll $0,$0,0
done: sll $0,$0,0

.data
string: .asciiz "ABCDEFG"

1 个答案:

答案 0 :(得分:1)

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

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