当前位置: 首页 > article >正文

Linux 斐波那契数列 递归汇编实现

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

编译运行如下:


http://www.kler.cn/news/367162.html

相关文章:

  • Pr 视频效果:波形变形
  • FCN深度学习语义分割开山之作——学习笔记
  • 回调函数的应用实践 (1)
  • Telegram机器人的手机部署
  • 最新版本jdbcutils集成log4j做详细sql日志、自动释放连接...等
  • Python实现微博舆情分析的设计与实现
  • python爬虫:HTTP、Cookie和会话管理详解
  • WPF+MVVM案例实战(六)- 自定义分页控件实现
  • 华为网络管理配置实例
  • [Ansible实践笔记]自动化运维工具Ansible(一):初探ansibleansible的点对点模式
  • TensorFlow面试整理-TensorFlow 基础概念
  • JavaScript part2
  • jenkins 作业添加用户权限
  • 练习LabVIEW第十八题
  • 在xml 中 不等式 做转义处理的问题
  • Nginx16-Lua扩展案例
  • Django从请求到响应
  • 阿里云镜像源无法访问?使用 DaoCloud 镜像源加速 Docker 下载(Linux 和 Windows 配置指南)
  • ESP32-S3学习笔记:常用的ESP-IDF命令总结
  • Junit + Mockito保姆级集成测试实践
  • 尚硅谷-react教程-求和案例-@redux-devtools/extension 开发者工具使用-笔记
  • 2分钟搞定 HarmonyOs Next创建模拟器
  • 4.1.2 网页设计技术
  • 【Vue3】基于 Vue3 + ECharts 实现北京市区域地图可视化
  • python网络爬虫基础:URL的组成与结构
  • HTTP错误代码解决详解