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

Linux 累加计算递归算法汇编实现

1+...+n可以使用公式计算,同时也是递归实现的很好例子,其c实现代码为

int f(int i)
{i && (i+f(i-1));return i;
}

其终止条件为0,此时i && (i+f(i-1))表达式不成立,不计算i+f(i-1)直接返回0,调用栈开始回溯,至于为什么使用0作为终止条件,纯粹是保持代码简洁,参照这个思路,汇编代码如下

#include <stdio.h>asm(".global f\n\t""f:\n\t""pushq %rbp\n\t""mov %rsp, %rbp\n\t""sub $8, %rsp\n\t""movl %edi, -0x4(%rbp)\n\t""cmpl $1, %edi\n\t""je out\n\t""mov -4(%rbp), %eax\n\t""sub $1, %eax\n\t""mov %eax, %edi\n\t""call f\n\t""add %eax, -4(%rbp)\n\t""out:\n\t""movl -4(%rbp), %eax\n\t""leaveq\n\t""retq");int main()
{printf("%d\n", f(100));return 0;
}

使用gcc直接编译


http://www.mrgr.cn/news/54451.html

相关文章:

  • 机器学习方向在算法优化上有哪些创新点?
  • 进程的学习
  • 如何检查前端项目和 Node 项目中未被使用的依赖包
  • 使用 Docker-compose 部署达梦 DM 数据库
  • 前端面经
  • 嵌软面试一百问(持续更新中)
  • 【Linux】Linux进程地址空间
  • java集合进阶篇-《泛型》
  • Spring aop讲解+动态代理思想+事务注解原理
  • Unity3D VisionPro 环境扫描 空间理解 网格扫描 AR Mesh
  • YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
  • VASCO:增减材混合制造的体积和表面共分解
  • String类的基本用法
  • Vue学习
  • MongoDB安装配置及配置和启动服务
  • <Project-11 Calculator> 计算器 0.2 工时计算器 WorkHours Calculator HTTP + JS
  • aws(学习笔记第七课) 私有子网使用NAT服务器
  • C++数据结构-红黑树全面解读(进阶篇)
  • 【洛谷】P6319
  • 【华为HCIP实战课程十五】OSPF的环路避免及虚链路,网络工程师
  • 图像捕捉---Base On NCC
  • neo4j 中日期时间 时间戳处理
  • 正确使用内部类
  • 是什么决定了我们毕业后的能力增长?
  • 【Python-AI篇】人工智能python基础-计算机组成原理
  • armbian 青龙面板