.text .globl __start __start: # execution starts here li $a0,9 jal fib # call fib move $a0,$v0 # print result li $v0, 1 syscall la $a0,endl li $v0,4 syscall li $v0,10 syscall # au revoir... #------------------------------------------------ # fib - recursive implementation of the # Fibonacci function. # a0 - holds parameter n # s0 - holds fib(n-1) # v0 - returns result #------------------------------------------------ fib: sub $sp,$sp,12 # save registers on stack sw $a0,0($sp) sw $s0,4($sp) sw $ra,8($sp) bgt $a0,1,notOne move $v0,$a0 # fib(0)=0, fib(1)=1 b fret # if n<=1 notOne: sub $a0,$a0,1 # param = n-1 jal fib # compute fib(n-1) move $s0,$v0 # save fib(n-1) sub $a0,$a0,1 # set param to n-2 jal fib # and make recursive call add $v0,$v0,$s0 # add fib(n-2) fret: lw $a0,0($sp) # restore registers lw $s0,4($sp) lw $ra,8($sp) add $sp,$sp,12 jr $ra .data endl: .asciiz "\n"
머 대충 이런코드인데.
spim 독학하다 어느 사이트에서 구한건데 피보나치수열이드라고여
근데 이거 실행하면 10 10 10 10 10 일케나옴..
글구 bgt명령어는 머져..
bgt --> branch greater than
bgt $a0,1,notOne --> 즉, a0 레지스터의 값이 1보다 크다면 notOne 레이블로 분기하라는 말
spim은 mips 어셈블리의 결과를 실행해볼 수 있는 시뮬레이터일 뿐이고, mips 문법을 잘 모른다면 그것부터 먼저 공부하는게 맞지 않나 싶은데..
최근대박yang빵 정보공유! 월천club 쉽다! ㅌ nete77