我正在尝试从用户获取MIPS中字符串形式的输入。
我想让它做两件事来获取输入,错误检查字符串是否不等于我想要的。
本质上,我的想法是要获取输入,然后检查输入是否等于A-P中的任何字母。如果不等于这些,如果不等于我想让它循环直到用户输入等于这些的值
我尝试考虑使用的东西是beq或Branch(如果相等)。我无法弄清楚如何像传统上那样使用它来比较字符串和整数。
下面是我要实现的代码,这显然是不对的。但是我想给你们一个机会看看我在做什么,这样您就可以给我一些指导,以解决这个问题。
getGridInput
li $v0, 8 #This read input for string
la $a0, getGridPrompt
syscall
#if input is not equal to a-p, then jal getGridInput
beq $a0, "a", getCellInput
beq $a0, "b", getCellInput
beq $a0, "c", getCellInput
beq $a0, "d", getCellInput
beq $a0, "e", getCellInput
beq $a0, "f", getCellInput
beq $a0, "g", getCellInput
beq $a0, "h", getCellInput
beq $a0, "i", getCellInput
beq $a0, "j", getCellInput
beq $a0, "k", getCellInput
beq $a0, "l", getCellInput
beq $a0, "m", getCellInput
beq $a0, "n", getCellInput
beq $a0, "o", getCellInput
beq $a0, "p", getCellInput
jal gelGridInput
答案 0 :(得分:1)
这是Ask to confirm (y/n)
的一种简单方法:
.data
welcome: .asciiz "Hello World!\n"
begin: .asciiz "\nEnter a character: "
question: .asciiz "\nWould you like to continue (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 CONTINUE
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
lb $t1, yes
lb $t0, 0($t0)
bne $t0, $t1, Exit
########IF YES, PRINT MESSAGE
########### END IF YES
Exit:
li $v0, 4
la $a0, exiting
syscall
li $v0, 10
syscall
jr $ra # return to caller
答案 1 :(得分:-1)
好了,大功告成,代码功能总体不错,除了几行
你应该改变
“li $t1 是的”
到
“la $t1 是”
作为指令:lb 将字节从内存加载到寄存器的低八位。您需要扩展到,因此这将加载两者的第一个字节。 你也可以使用格式 "lb $t0, 0($t0)" 也可能会起作用