Как сравнить пользовательский ввод с предустановленным символом, чтобы увидеть, совпадают ли они? - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь найти способ правильно взять строку, которую я получаю от пользователя, в качестве ввода и сравнить ее с определенным символом, чтобы увидеть, совпадают ли они.

I 'Я пытался сравнить мой пользовательский ввод с моей предустановленной строкой, но безрезультатно.Вы можете увидеть, что я сделал в своем коде:

.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 снова, чтобы спросить их снова.Тем не менее, даже когда я ввожу именно «х», он все равно не думает, что они одинаковы.Я не совсем уверен, какие части мне не хватает, потому что, если я заменю pieceX на другой userInput, он даст мне ожидаемый результат, поэтому я знаю, что он правильно хранит их, но сравнение никогда не будет успешным, если я сравню userInput с pieceX.

1 Ответ

0 голосов
/ 19 февраля 2019

ваша инструкция

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
...