带有加载字节的MIPS无限循环/错误

时间:2012-11-09 04:49:50

标签: assembly mips

我正在尝试让用户输入“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)我做错了什么?

2 个答案:

答案 0 :(得分:1)

当您使用syscall 12时,字符本身将在$v0中返回。它没有为您提供读取角色的地址。您可以完全省略lb

因此,当您使用$t1时,您正在使用$t0进行比较。

答案 1 :(得分:1)

这可能对看到此旧帖子的任何人有用; syscall 12使用spim进入此无限循环,但使用qtspim可以正常运行。 spim自2010年以来就没有开发过,但是我已经在使用它了,因为它具有emacs集成。