假如汇编语言要实现如下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:
.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 -orefact
./refact
分享到:
相关推荐
本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术...
本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术...
本书的第二部分适合已基本掌握8086/8088汇编语言的程序员,可作为学习保护方式编程技术的教材或参考书,也可作为其他人员了解高档微处理器和保护方式编程技术的参考书,还可作为程序员透彻地了解Windows程序设计技术...
本书以X86系列微机为背景,从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言编程的行种基础知识和编程技巧,内容涉及到数据表示、存储器管理、各种数据类型、过程、与汇编语言相关的体系结构、控制结构、...
递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第...
递归遍历矩阵 1个目标文件,简单! 多人聊天室 3个目标文件 第一步:运行ServerData.java 启动服务器,然后服务器处于等待状态 第二步:运行LoginData.java 启动(客户端)登陆界面 输入用户名 ip为本机localhost 第...