汇编语言学习系列 递归实现
来源:互联网 发布:淘宝卖沉香是不是真的 编辑:程序博客网 时间:2024/06/12 00:59
假如汇编语言要实现如下C语言的功能,编译环境Ubuntu14.04(32位)。
#include<stdio.h>int refact(int n){ if(n == 1) return 1; else return n * refact(n - 1);}int main(){ int a = 4; printf("%d\n", refact(a)); return 0;}
无论对于递归实现还是循环实现,汇编都是将转换为跳转语句实现。可以把上面的代码转换为
refact: if((n-1) <= 0) goto done; body-statement done:
- 汇编代码refact.s
.section .data a: .int 4 format: .asciz "%d\n".section .text.global _start_start: pushl %ebp movl %esp, %ebp subl $8, %esp #allocate storage space movl a, %edx #get a movl %edx, (%esp) #save value of a on stack call refact pushl %eax pushl $format call printf movl $0, (%esp) call exit refact: pushl %ebp movl %esp, %ebp pushl %ebx subl $4, %esp #allocate storage space movl 8(%ebp), %ebx #get n cmpl $1, %ebx jle done #test (n-1) >= 0 leal -1(%ebx), %eax #(n-1) movl %eax, (%esp) #save (n-1) on the stack call refact imul %ebx, %eax #use %eax to save result done: addl $4, %esp #release space popl %ebx popl %ebp ret
- 编译
as refact.s -o refact.o
- 链接
ld -lc -I /lib/ld-linux.so.2 refact.o -o refact
- 执行
./refact
0 0
- 汇编语言学习系列 递归实现
- 汇编语言学习系列 函数实现
- 汇编语言学习系列 打印数组实现
- 汇编语言学习系列 for循环实现
- 汇编语言学习系列 冒泡排序实现
- 汇编语言 递归子程序实现阶乘
- LC2K汇编语言递归实现组合数
- 汇编语言实现递归阶乘算法代码分析(8)
- 32位汇编语言学习笔记(14)--递归函数的调用
- 汇编语言-学习
- 学习汇编语言
- 学习汇编语言!
- 学习汇编语言
- 汇编语言学习
- 汇编语言学习
- 学习:汇编语言
- 汇编语言学习
- 每天学习一算法系列(35)(递归和非递归俩种方法实现二叉树的前序遍历)
- s3
- 汇编语言学习系列 for循环实现
- Cocos2d-x 3.0final 终结者系列教程19脚本编程-Lua语法基础
- cocos2d-x中的导演类
- 怎么将PDF文本转变成为PPT格式
- 汇编语言学习系列 递归实现
- 汇编语言学习系列 冒泡排序实现
- 努比亚nubia Z7 Mini刷recovery教程(中文版)
- Java 初始化字段方式和顺序
- 修改pacman字体颜色
- Codeforces Round #294 (Div. 2) D
- cocos2d-x中的场景
- QT使用sizeHint()遇到的问题
- 黑马程序员——集合框架总结