我正在尝试编写从用户获取的求和整数的MIPS代码,直到用户输入字符“*”。
输出将像“1 4 3 *总计:8”
当用户输入“-1”而不是“*”时,我编写了代码终止循环条件。我尝试写'*'语法而不是-1但它没有给出总和。当用户输入“*”字符时,如何退出循环?这是我的第一个问题,这是我的工作代码“-1”。
# $s0=Sum, $s1=Checkvalue
.data # Data memory area
prompt: .asciiz "Total: "
.text # Code area
main:
move $s0, $zero # Sum is made "0"
li $s1, -1 # Checkvalue is made "-1"
loop: bne $s0, $s0, exit # Infinite loop is described
li $v0, 5 # Read integer into $v0
syscall # Make the syscall read_int
move $t0, $v0 # Move the integer read into $t0
beq $t0, $s1, exit # If the read value is equal "-1", exit
add $s0, $t0, $s0 # Add the read integer to sum
j loop # Return loop
exit:
li $v0, 4 # Syscall to print string
la $a0, prompt
syscall
move $a0, $s0 # Syscall to print string
li $v0, 1
syscall
li $v0, 10 # Syscall to exit
syscall
# Reference: www.es.ele.tue.nl/~heco/courses/ProcDesign/SPIM.ppt
我的第二个问题是我使用了“syscall”,我的用法是否适合stdin和stdout,系统函数?
非常感谢你。
答案 0 :(得分:2)
您正在阅读-1
之类的整数,很明显*
不是整数。要退出循环,您必须弄清楚如何读取字符和整数。如果您的数字只有一位数,您可以将所有输入读作字符并根据需要转换为整数。否则,您必须读入字符串并转换为整数。
关于第二个问题,使用syscall进行标准输入和输出系统功能是正确的。