我正在尝试找到一种方法,以正确地获取从用户处获得的字符串作为输入,并将其与特定字符进行比较以查看它们是否相同。
我尝试将用户输入与预设字符串进行比较,但无济于事。您可以在代码中看到我所做的:
.data
userInput: .space 4
pieceMessage: .asciiz "\nSelect a piece (X/O): "
pieceX: .asciiz "x"
.text
main:
jal selectPiece
li $v0, 10
syscall
selectPiece:
#Display prompt
li $v0, 4
la $a0, pieceMessage
syscall
#Enter your desired piece
move $a0,$t2
li $v0, 8
la $a0, userInput
li $a1, 10
syscall
#Compare
la $s2, pieceX
move $t2, $s2
la $s3, userInput
move $t3, $s3
bne $t2,$t3,selectPiece
jr $ra
预期结果是,当用户准确输入“ x”时,他们应该可以继续,但是如果他们输入其他任何内容,它将再次调用selectPiece函数以再次询问他们。但是,即使我输入的确切是“ x”,它仍然不认为它们是相同的。我不太确定我缺少什么部分,因为如果我用另一个userInput替换pieceX,它会给我预期的结果,所以我知道它正确存储了它们,但是如果将userInput与pieceX进行比较,比较似乎不会成功
答案 0 :(得分:1)
您的说明
bne $t2,$t3,selectPiece
比较$t2
和$t3
,它们是字符串userInput
和`pieceX'的地址,并且显然总是不同的。
您想要的是比较这些地址指向的内容。比较之前应该有一些负担。
#Compare
la $s2, pieceX
lb $t2, ($s2) ; mem[$s2] -> $t2
la $s3, userInput
lb $t3, ($s3) ; mem[$s3] -> $t3
bne $t2,$t3,selectPiece