MIPS-将输入字符串与存储在内存中的字符串进行比较
我有一个用MIPS编写的功能字符串比较方法(用户输入的两个字符串的逐位比较),但我正在尝试更新它,以便将第二个输入与存储在内存中的输入进行比较。(如果这两个相等,我想在其他地方使用第一个字符串) 然而,我遇到了一些问题。这是我的密码:MIPS-将输入字符串与存储在内存中的字符串进行比较,mips,string-comparison,Mips,String Comparison,我有一个用MIPS编写的功能字符串比较方法(用户输入的两个字符串的逐位比较),但我正在尝试更新它,以便将第二个输入与存储在内存中的输入进行比较。(如果这两个相等,我想在其他地方使用第一个字符串) 然而,我遇到了一些问题。这是我的密码: .data str1: .space 20 str2: .space 20 msg1:.asciiz "Please enter string (max 20 characters): " msg2: .asciiz "\n Please ente
.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
到
有人知道为什么这样做行不通,或者有更好的方法来实现这一点吗?
非常感谢,如果我的格式设置被关闭,很抱歉,这是我第一次发布 您缺少输入方法(用于从用户输入数据的系统调用)在末尾添加的换行符(\n)。 您可以预处理输入字符串以删除该换行符,也可以将其添加到存储的字符串中。 后者很容易,只要改变就行了
strToCompare: .asciiz "foo"
到
谢谢你,我知道这是件相对简单的事情,只是不知道遗漏了什么!
strToCompare: .asciiz "foo"
strToCompare: .asciiz "foo\n"