如何从控制台读取int(mips - qtspim)?

时间:2016-04-10 10:08:46

标签: assembly mips

    .data
msg1:.asciiz "Give a number: "
.text
.globl main
main:
##############################
li $v0,4
la $a0,msg1
syscall #print msg
li $v0,5
syscall #read an int
add $a0,$v0,$zero #move to $a0
##############################
jal fib #call fib

add $a0,$v0,$zero
li $v0,1
syscall

li $v0,10
syscall

fib:
#a0=y
#if (y==0) return 0;
#if (y==1) return 1;
#return( fib(y-1)+fib(y-2) );

addi $sp,$sp,-12 #save in stack
sw $ra,0($sp)
sw $s0,4($sp)
sw $s1,8($sp)

add $s0,$a0,$zero

addi $t1,$zero,1
beq $s0,$zero,return0
beq $s0,$t1,return1

addi $a0,$s0,-1

jal fib

add $s1,$zero,$v0     #s1=fib(y-1)

addi $a0,$s0,-2

jal fib               #v0=fib(n-2)

add $v0,$v0,$s1       #v0=fib(n-2)+$s1
exitfib:

lw $ra,0($sp)       #read registers from stack
lw $s0,4($sp)
lw $s1,8($sp)
addi $sp,$sp,12       #bring back stack pointer
jr $ra

return1:
 li $v0,1
 j exitfib
return0 :     li $v0,0
 j exitfib

这是一种标准的Fibonacci算法,需要在执行开始时输入。 当程序到达## ... ##分隔区域时,预计用户将给出实际输入。 有人可以解释为什么在那里制造4和5 in v0的负载? 这个输入读数实际上是如何工作的?

1 个答案:

答案 0 :(得分:0)

与小丑所说的一样,li $ v0 ..只是系统调用'功能'使您能够打印到屏幕,读取输入,退出,暂停等