MIPS - 将输入字符串与存储在内存中的字符串进行比较

时间:2011-04-18 03:29:02

标签: mips string-comparison

我有一个用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

有谁知道为什么这不起作用,或者更好的方法来实现它? 非常感谢,如果我的格式化已关闭,那么这是我第一次发帖。

1 个答案:

答案 0 :(得分:3)

您缺少换行符(\ n),您的输入法(用于从用户输入数据的系统调用)最后会添加。 您可以预处理输入字符串以删除换行符或将其添加到存储的字符串中。 后者很容易,只需改变

strToCompare: .asciiz "foo"

strToCompare: .asciiz "foo\n"