斐波那契数列(Fibonacci sequence)是一个著名的数列,其定义如下:
- 第一个数是 0,第二个数是 1,从第三个数开始,每个数都是前两个数之和。
具体的数列为:
- F(0) = 0
- F(1) = 1
- F(2) = 0 + 1 = 1
- F(3) = 1 + 1 = 2
- F(4) = 1 + 2 = 3
- F(5) = 2 + 3 = 5
- F(6) = 3 + 5 = 8
- F(7) = 5 + 8 = 13
汇编实现如下:
#include <stdio.h>
asm(".global fib\n\t"
"fib:\n\t"
"pushq %rbp\n\t"
"mov %rsp, %rbp\n\t"
"sub $8, %rsp\n\t"
"mov %edi, -4(%rbp)\n\t"
"mov $1, %eax\n\t"
"mov %eax, -8(%rbp)\n\t"
"cmpl $1, -4(%rbp)\n\t"
"je out\n\t"
"cmpl $2, -4(%rbp)\n\t"
"je out\n\t"
"mov -4(%rbp), %edi\n\t"
"sub $1, %edi\n\t"
"call fib\n\t"
"mov %eax, -8(%rbp)\n\t"
"mov -4(%rbp), %edi\n\t"
"sub $2, %edi\n\t"
"call fib\n\t"
"add %eax, -8(%rbp)\n\t"
"out:\n\t"
"mov -8(%rbp), %eax\n\t"
"leaveq\n\t"
"retq\n\t"
);
int main(int argc, char **argv)
{
printf("%d\n", fib(6));
return 0;
}
编译运行如下:
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » Linux 斐波那契数列 递归汇编实现
发表评论 取消回复