我有一个用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
有谁知道为什么这不起作用,或者更好的方法来实现它? 非常感谢,如果我的格式化已关闭,那么这是我第一次发帖。
答案 0 :(得分:3)
您缺少换行符(\ n),您的输入法(用于从用户输入数据的系统调用)最后会添加。 您可以预处理输入字符串以删除换行符或将其添加到存储的字符串中。 后者很容易,只需改变
strToCompare: .asciiz "foo"
到
strToCompare: .asciiz "foo\n"