2011-04-18 58 views
4

我有一個以MIPS編寫的函數式字符串比較方法(用戶輸入中的兩個字符串逐位比較),但我試圖更新它來比較第二個輸入與我已存儲在內存中的一個輸入。 (如果這兩者是平等的,我想在其他地方使用第一個字符串)。MIPS-將輸入字符串與存儲在內存中的字符串進行比較

但是,我遇到了一些問題。這裏是我的代碼:

.data 
str1: .space 20 
str2: .space 20 
msg1:.asciiz "Please enter string (max 20 characters): " 
msg2: .asciiz "\n Please enter method (max 20 chars): " 
msg3:.asciiz "\nSAME" 
msg4:.asciiz "\nNOT SAME" 


.text 
.globl main 

main: 
    li $v0,4  #loads msg1 
    la $a0,msg1 
    syscall 

    li $v0,8 
    la $a0,str1 
    addi $a1,$zero,20 
    syscall   #got string to manipulate 

    li $v0,4  #loads msg2 
    la $a0,msg2 
    syscall 

    li $v0,8 
    la $a0,str2 
    addi $a1,$zero,20 
    syscall   #got string method 

     la $a0,str1    #pass address of str1 
    la $a1,str2   #pass address of str2 
    jal methodComp  #call methodComp 

    beq $v0,$zero,ok #check result 
    li $v0,4 
    la $a0,msg4 
    syscall 
    j exit 
ok: 
    li $v0,4 
    la $a0,msg3 
    syscall 
exit: 
    li $v0,10 
    syscall 

methodComp: 
    add $t0,$zero,$zero 
    add $t1,$zero,$a0 
    add $t2,$zero,$a1 

loop: 
    lb $t3($t1)   #load a byte from each string 
    lb $t4($t2) 
    beqz $t3,checkt2 #str1 end 
    beqz $t4,missmatch 
    slt $t5,$t3,$t4  #compare two bytes 
    bnez $t5,missmatch 
    addi $t1,$t1,1  #t1 points to the next byte of str1 
    addi $t2,$t2,1 
    j loop 

missmatch: 
    addi $v0,$zero,1 
    j endfunction 
checkt2: 
    bnez $t4,missmatch 
    add $v0,$zero,$zero 

endfunction: 
    jr $ra 

從本質上講,我希望做的是在beginnning

strToCompare: .asciiz "foo" 

聲明和改變,我傳遞的str1的ADRESS從

la $a0,str1    #pass address of str1 

la $a0,strToCompare  #pass address of strToCompare 

有沒有人知道爲什麼這不起作用,或者更好的實現方式? 非常感謝,如果我的格式設置爲關閉,這是我第一次發佈。

回答

3

您缺少換行符(\ n),您輸入的方法(用於輸入用戶數據的系統調用)在最後添加。 您可以預處理輸入字符串以刪除該換行符或將其添加到您存儲的字符串中。 後者很容易,只需改變

strToCompare: .asciiz "foo" 

strToCompare: .asciiz "foo\n" 
+0

謝謝你,我知道這是一件比較簡單,只需不可能找出少了什麼! – zomgcopters 2011-04-18 19:35:15

相關問題