2016-04-10 16 views
-1
.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 

これは、実行の開始時に入力を要求する標準のフィボナッチアルゴリズムです。 実際の入力は、プログラムが## ... ##で区切られた領域に到達したときにユーザーから与えられると予想されます。 誰かがv0で4と5の負荷がそこに作られた理由を説明できますか? この入力は実際にどのように読み取られますか?道化師は李$ v0と言ったことと同じコンソールからintを読み込む方法(mips-qtspim)?

+1

'syscall'命令は、動作を起動します'$ v0'の値を見て、どのサービスが要求されているのかを判断するシステムです。ドキュメントを参照してください。 – Jester

答えて

0

...単に一時停止し、終了するには、入力を読み取るために、画面に印刷することができます「機能を」システムコールされているなど

関連する問題