我正在尝试让用户输入“Y”以重新启动程序(分支回主程序)或“N”(分支到结束程序)。我正在使用syscall操作码12
读取一个字符endCheck:
la $a0, newLine # Print the newLine
li $v0, 4
syscall
la $a0, endPrompt # print the Start over message
li $v0, 4
syscall
li $v0, 12 # take in char input
syscall
move $t0, $v0
lb $t1, ($t0) # Load the char byte into t1
beq $t1, 89, main # Go back to start if they entered 'Y'
bne $t1, 78, endCheck # Ask the user again because input was not 'N' or 'Y'
li $v0, 10
syscall
我在lb线上收到错误。即使我在数据段上分配了1个字节的空间并将输入作为1个字符的字符串读取,我得到一个无限循环(当它正确编译时它总是分支回到endCheck)我做错了什么?
答案 0 :(得分:1)
当您使用syscall 12
时,字符本身将在$v0
中返回。它没有为您提供读取角色的地址。您可以完全省略lb
。
因此,当您使用$t1
时,您正在使用$t0
进行比较。
答案 1 :(得分:1)
这可能对看到此旧帖子的任何人有用; syscall 12使用spim进入此无限循环,但使用qtspim可以正常运行。 spim自2010年以来就没有开发过,但是我已经在使用它了,因为它具有emacs集成。