如何确定用户输入是否等于指定的字符MIPS

时间:2019-04-06 21:34:35

标签: assembly mips

我正在尝试从用户获取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

2 个答案:

答案 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)" 也可能会起作用