2014-06-18 130 views
0

所以我創建了這個程序來計算字符串中小寫字母的數量。我遇到的問題是,當我到達字符串的末尾並且達到nl字符時,行beq $t0, $t1, end未被執行;它只是無限期地繼續下去。我不確定我做錯了什麼。計數小寫字母數

.data 
msg1: .word 0:24 
.text 
.globl main 
main: 
    addu $s0, $0, $ra 
    li $v0, 8 
    la $a0, msg1 
    la $a1, 100 
    syscall 
loop: 
    lb $t0, 4($a0) 
    li $t1, 0x0a 
    beq $t0, $t1, end 
continue: 
    li $t1, 'a' 
    blt $t0, $t1, count 
    li $t1, 'z' 
    bgt $t0, $t1, count  
count: 
    addi $t4, $t4, 1 
    j loop 
end: 
    li $v0, 1 
    addu $a0, $t2, $0  
    syscall 
    jr $ra 

回答

1

你比較4($a0)0x0a在循環的每個迭代,但你永遠在循環改變$a0,這樣你就不會通過你的字符串推進,從不看\n在字符串的結尾。

你的代碼中還有一些其他的錯誤。

使用此在您的循環的開始:

loop: 
    lb $t0, 0($a0) 
    addiu $a0, $a0, 1 
    ... 
+0

如何更改$ A0來比較下一個字符?我很難理解MIPS – spearman008

+0

看到我上面的編輯。 – markgz