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

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.kler.cn/news/358472.html

相关文章:

  • js简单基础笔记
  • Pytorch Note
  • Java 多线程(四)—— 线程安全 与 volatile 与 单例模式
  • js模板式生成大疆上云kml文件(含详细注释,已封装成函数)
  • 爬虫学习——25.JS逆向(1)
  • 关于Qt中QMenu控件踩坑实录
  • Codeforces Round 980 (Div. 2) D 题解
  • element ui plus 版本 日期时间选择器的差异
  • UE5 gameplay学习1 蓝图修改材质和参数
  • 408数据结构-折半查找,分块查找 自学知识点整理
  • 101、QT摄像头录制视频问题
  • 有限状态机和抽象类多态
  • 再论保距变换概念让5000年都无人能识的N外标准自然数一下子浮出水面推翻百年集论
  • WebGL编程指南 - 颜色与纹理
  • 【AWS AMI跨境备份】跨境使用 S3 备份和还原 AMI 镜像
  • 最新版!《末日地带2》十四项修改器 增加健康/增加信心/设置游戏速度
  • Scala中的reduce
  • PROFINET开发EtherNet/IP开发Vline板卡在称重设备行业的应用
  • Python SQL 注入攻击及其防护措施:编写安全的数据库查询
  • 数据结构之链表——单向链表