77 lines
1.0 KiB
ArmAsm
77 lines
1.0 KiB
ArmAsm
.file "fibonacci.c"
|
|
.option nopic
|
|
.text
|
|
.align 2
|
|
.globl fib
|
|
.type fib, @function
|
|
fib:
|
|
addi sp,sp,-32
|
|
sw ra,28(sp)
|
|
sw s0,24(sp)
|
|
sw s1,20(sp)
|
|
addi s0,sp,32
|
|
sw a0,-20(s0)
|
|
lw a4,-20(s0)
|
|
li a5,1
|
|
bgt a4,a5,.L2
|
|
lw a5,-20(s0)
|
|
j .L3
|
|
.L2:
|
|
lw a5,-20(s0)
|
|
addi a5,a5,-1
|
|
mv a0,a5
|
|
call fib
|
|
mv s1,a0
|
|
lw a5,-20(s0)
|
|
addi a5,a5,-2
|
|
mv a0,a5
|
|
call fib
|
|
mv a5,a0
|
|
add a5,s1,a5
|
|
.L3:
|
|
mv a0,a5
|
|
lw ra,28(sp)
|
|
lw s0,24(sp)
|
|
lw s1,20(sp)
|
|
addi sp,sp,32
|
|
jr ra
|
|
.size fib, .-fib
|
|
.align 2
|
|
.globl return_function
|
|
.type return_function, @function
|
|
return_function:
|
|
addi sp,sp,-32
|
|
sw s0,28(sp)
|
|
addi s0,sp,32
|
|
sw a0,-20(s0)
|
|
lw a5,-20(s0)
|
|
mv a0,a5
|
|
lw s0,28(sp)
|
|
addi sp,sp,32
|
|
jr ra
|
|
.size return_function, .-return_function
|
|
.align 2
|
|
.globl main
|
|
.type main, @function
|
|
main:
|
|
addi sp,sp,-32
|
|
sw ra,28(sp)
|
|
sw s0,24(sp)
|
|
addi s0,sp,32
|
|
li a5,18
|
|
sw a5,-20(s0)
|
|
lw a0,-20(s0)
|
|
call fib
|
|
mv a5,a0
|
|
mv a0,a5
|
|
call return_function
|
|
sw a0,-24(s0)
|
|
lw a5,-24(s0)
|
|
mv a0,a5
|
|
lw ra,28(sp)
|
|
lw s0,24(sp)
|
|
addi sp,sp,32
|
|
jr ra
|
|
.size main, .-main
|
|
.ident "GCC: (GNU) 7.2.0"
|