gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:50:02 26 4
gpt4 key购买 nike

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

关于MIPS - 将输入字符串与存储在内存中的字符串进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5698217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com