2014-06-18 1 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

당신은 루프의 각 반복에 0x0a4($a0) 비교,하지만 당신은 루프에 $a0을 변경하지 않을, 그래서 당신은 당신의 캐릭터를 통해 진행되지 않고 문자열의 끝에서 \n보고되지 않습니다.

코드에 몇 가지 다른 버그가 있습니다. 루프의 시작

사용이 :

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

가 어떻게 $ (A0)을 변경하는 방법은 다음 문자로 비교? MIPS – spearman008

+0

을 이해하기가 힘듭니다. 위의 편집을 참조하십시오. – markgz