如何将用户输入与预设字符进行比较以查看它们是否相同?

时间:2019-02-19 05:04:10

标签: assembly mips

我正在尝试找到一种方法,以正确地获取从用户处获得的字符串作为输入,并将其与特定字符进行比较以查看它们是否相同。

我尝试将用户输入与预设字符串进行比较,但无济于事。您可以在代码中看到我所做的:

.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进行比较,比较似乎不会成功

1 个答案:

答案 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