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
本质上,我希望做的是在开始时声明
strToCompare: .asciiz \"foo\"
并更改我从那里传递
str1
地址的位置
la $a0,str1             #pass address of str1 
la $a0,strToCompare       #pass address of strToCompare
有谁知道为什么这行不通,或者更好的方法来实现呢? 谢谢,很抱歉,如果我的格式已关闭,这是我第一次发布。     
已邀请:
您缺少输入法(用于从用户输入数据的系统调用)末尾添加的换行符(\\ n)。 您可以预处理输入字符串以删除该换行符,也可以将其添加到存储的字符串中。 后者很容易,只需更改
strToCompare: .asciiz \"foo\"
strToCompare: .asciiz \"foo\\n\"
    

要回复问题请先登录注册