斐波那契数列(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;
}

编译运行如下:

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部