0

我试图让用户输入“Y”来重新启动程序(分支回到主程序)或“N”(分支到结束程序)。我正在使用系统调用操作码 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)我做错了什么?

4

2 回答 2

1

使用syscall 12时,字符本身返回$v0. 它不会为您提供读取字符的地址。你可以完全省略lb

因此,$t1当您应该使用$t0.

于 2012-11-09T06:56:21.667 回答
1

这可能对任何看到这个旧帖子的人有用;系统调用 12 使用 spim 进入这个无限循环,但使用 qtspim 可以正常运行。spim 自 2010 年以来一直没有开发,但我正在使用它,因为它具有 emacs 集成。

于 2019-12-02T18:29:40.620 回答