简体   繁体   English

如何使用用户输入“y”重复 mips 程序?

[英]how to repeat a mips program using user input 'y'?

i have this program where the user inputs an integer and the program simply just prints it.我有这个程序,用户输入 integer,程序只是简单地打印它。 another function of this program is that it is supposed to ask if the user wants to repeat the program and input another number.该程序的另一个 function 是它应该询问用户是否要重复该程序并输入另一个数字。

so the user should input 'y' if they want to continue and 'n' if not.因此,如果用户想继续,则应输入“y”,否则应输入“n”。

.data
    repeat: .asciiz     "\n Repeat [y/n]? "
    store: .byte ' '

.text
.globl main
main:                   # Main function 
    
    li $v0, 5
    syscall
    
    move $a0, $v0
    li $v0, 1
    syscall
    
    li $v0, 4
    la $a0, repeat
    syscall
    
    li $v0, 12
    syscall
    
    la $s0, store
    sb $v0, store
    syscall
    
    beq $v0, 'y', main
    beq $v0, 'Y', main

    li $v0, 10
    syscall

using this source code, the program can read and print the integer that i input,使用此源代码,程序可以读取并打印我输入的 integer,

but the problem here is that whenever I input 'y' or 'n' and enter, the program prompts that there's an error.但是这里的问题是,每当我输入'y'或'n'并回车时,程序都会提示有错误。

is the problem on the beq instructions?问题出在beq说明上吗? or is it on the part where it reads the character?还是在它读取字符的部分?

i'm just new to programming MIPS and there are still parts that confuse me.我只是 MIPS 编程的新手,但仍有一些部分让我感到困惑。

can anyone point out where i'm doing it wrong?谁能指出我哪里做错了?

.data
    str1: .asciiz       "\nEnter an integer value: "
    str2: .asciiz       "You entered: "
    repeat: .asciiz     "\nRepeat [y/n]? "
    store: .byte ' '    # This will hold a single byte
.text

.globl main

main:                   # Main function 
    la $a0, str1            # Load address of 'str1' to $a0
    li $v0, 4           # Print 'str1' string
    syscall
    
    li $v0, 5           # Reads the integer input
    syscall
    
    move $s0, $v0           # Moves the value of $v0 to $s0
    
    la $a0, str2            # Load address of 'str2' to $a0
    li $v0, 4           # Prints the 'str2' string
    syscall
    
    move $a0, $s0           # Copy the integer value
    li $v0, 1           # Prints the integer input
    syscall             
    
    la $a0, repeat          # Load address of repeat to $a0
    li $v0, 4           # Print 'repeat' string
    syscall
    
    li $v0, 12          # Reads the char input
    syscall
    
    la $s0, store           # Load address of 'store' to $s0    
    sb $v0, store           # Store byte
        
    beq $v0, 'y', main      # If user input is 'y', then program is branched to the 'main' function

    li $v0, 10
    syscall             # System call to exit program

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM