2014-10-17 139 views
0

我在寫一個使用MIP的程序,該程序從用戶處獲取輸入字符串並輸出連續相同字符的最長子字符串。我的問題似乎是在程序輸出目標字符串之前似乎達到了「結束」。任何幫助表示讚賞!計算連續字符子字符串的長度MIPS

main: 
    la $a0,input_msg  # Prompting input from user 
    li $v0,4 
    syscall 

    li $v0, 8    # Reading string and storing in memory 
    la $a0, input_string 
    li $a1, 100 
    syscall 


    li $t0, 0 
    la $t1, input_string   # address of the first element 
    lb $a0, ($t1)    # input_string[0] (the first character) 

    move $s0, $a0   # current_char=read_char(); 
    move $s1, $a0   # previous_char = input_string[0]; 
    move $s2, $a0   # final_char=input_string[0]; 

    li $s3, 1   # current_num_chars=1; 
    li $s4, 1   # final_num_chars=1; 


    la $t5, new_line 

loop: 

    addi $t0, $t0, 1  # for(k=1; k<i-1; k++) { 
    add $t1, $t1, $t0  
    lb $t3, ($t1) 
    beq $s5, $t3, print_final 
    move $s0, $t3   # current_char=input_string[k]; 

    bne $s0, $s1, else   # if(current_char == previous_char) 
    addi $s3, $s3, 1  # current_num_chars++; 

    bge $s3, $s4, increase_final # if(current_num_chars >= final_num_chars) {  

    move $s1, $s0 
    j loop    # else do nothing 

increase_final: 

    move $s2, $s0   # final_char=current_char; 
    move $s4, $s3   # final_num_chars=current_num_chars; 

    move $s1, $s0 
    j loop    # } 


else: 
    move $s1, $s0 
    j loop    # else { 
        # current_num_chars=1; 
        # } 
        # } 

print_final: 

    la $a0, output_msg 
    li $v0, 4 
    syscall 

    li $t2, 0 

print_chars:  

    li $t2, 0   # for(k=0; k<final_num_chars; k++) { 
    beq $t2, $s3, end 

    move $a0, $s2   # print_char(final_char); 
    li $v0, 11 
    syscall 

    j print_chars   # } 

end: 

    li $v0, 4   # print_string("\n"); 
    la $a0, new_line 
    syscall 

    li $v0, 10   # exit() 
    syscall 

回答

1

print_chars環比較$t2(你正好被設置爲0),以$s3,以決定是否要跳到終點。因此,它會始終進行相同的比較,並且您的循環會在第一次遇到時退出,或者永遠不會結束。

此外,評論建議您應該與$s4比較,而不是$s3

+0

啊當然!我甚至沒有注意到!謝謝!不幸的是,現在它運行了,但是對於ln58引發了一個錯誤,對於(k = 1; k 2014-10-17 19:43:22

+0

原始代碼被更改並且應該被讀作 'la $ s5,new_line'而不是'la $ s4,new_line' 並且'bge $ t0,$ t8,end'被替換爲'beq $ s3,$ s5, print_c hars' – 2014-10-17 19:45:19

+0

除非您可以編輯帶有新代碼和問題的問題,否則請關閉此問題併發布新問題。 – 2014-10-17 20:01:44