Я пытаюсь придумать базовый алгоритм «если да, то сделайте это, если нет, то выйдите» в mips (с использованием симулятора spim). Однако bne всегда разветвляется, независимо от того, дано ли да или нет (в данном случае y или n). Я новичок в mips, поэтому я, вероятно, упускаю что-то большое ... или маленькое, чего я не знаю. Вот что у меня есть:
.data
welcome: .asciiz "Hello World!\n"
begin: .asciiz "\nEnter a mathematical operator: "
question: .asciiz "\nWould you like to solve a problem (y/n)? "
back: .asciiz "You wrote "
buffer: .space 2
yes: .asciiz "y"
exiting: .asciiz "exiting"
.text
.globl main
main:
li $v0, 4 # syscall 4 (print_str)
la $a0, welcome # argument: string
syscall # print the string
Loop:
# ASK IF WANT TO SOLVE A QUESTION
li $v0, 4 # syscall 4 (print_str)
la $a0, question # argument: string
syscall
# GET INPUT FROM USER
li $v0, 8 # get input
la $a0, buffer # load byte space into address
li $a1, 2 # allot the byte space for string
move $t0,$a0 # save string to t0
syscall
#EDIT
lb $t1, yes #previously la $t1, yes
lb $t0, 0($t0) #new
#END EDIT
bne $t0, $t1, Exit
########IF YES, PRINT MESSAGE
########this code is only for testing and doesn't really mean anything
########so you can ignore it
li $v0, 4 # syscall 4 (print_str)
la $a0, begin # argument: string
syscall
li $v0, 8 #get input
la $a0, buffer #load byte space into address
li $a1, 20 # allot the byte space for string
move $t0,$a0 #save string to t0
syscall
la $a0,back #load and print "you wrote" string
li $v0,4
syscall
la $a0, buffer #reload byte space to primary address
move $a0,$t0 # primary address = t0 address (load pointer)
li $v0,4 # print string
syscall
j Loop
########### END IF YES
Exit:
li $v0, 4
la $a0, exiting
syscall
li $v0, 10
syscall
jr $ra # return to caller
Итак, проблема в том, что $ t0 и $ t1 никогда не равны, независимо от того, что вводит пользователь. Что мне нужно сделать, чтобы правильно сравнить два значения?