汇编语言学习系列 函数实现
2015-03-01 14:00
288 查看
以下代码示范交换a和b两个整数的函数,编译环境Ubuntu14.04(32位)
假如要实现以下C代码
![](http://common.cnblogs.com/images/copycode.gif)
![](http://common.cnblogs.com/images/copycode.gif)
汇编代码如下:
![](http://common.cnblogs.com/images/copycode.gif)
![](http://common.cnblogs.com/images/copycode.gif)
编译
as swap.s -o swap.o
链接
ld -lc -I /lib/ld-linux.so.2 swap.o -o swap
执行
./swap
假如要实现以下C代码
![](http://common.cnblogs.com/images/copycode.gif)
#include <stdio.h> void swap(int *xp, int *yp) { int x = *xp; int y = *yp; *xp = y; *yp = x; } int main() { int a = 534, b = 1057; swap(&a, &b); printf("%d\n", a); printf("%d\n", b); return 0; }
![](http://common.cnblogs.com/images/copycode.gif)
汇编代码如下:
![](http://common.cnblogs.com/images/copycode.gif)
.section .data a: .int 534 b: .int 1057 format: .asciz "%d\n" .section .text .global _start _start: pushl %ebp movl %esp, %ebp subl $24, %esp #给栈分配内存24字节保存局部变量 movl $a, %eax movl %eax, 4(%esp) movl $b, %eax movl %eax, (%esp) call swap #调用swap函数 pushl a #打印a pushl $format call printf pushl b #打印b pushl $format call printf movl $0, (%esp) call exit swap: pushl %ebp #保存调用前栈帧地址 movl %esp, %ebp pushl %ebx #根据习惯,保存寄存器ebx movl 8(%ebp), %edx #get xp movl 12(%ebp), %ecx #get yp movl (%edx), %ebx #get x movl (%ecx), %eax #get y movl %eax, (%edx) movl %ebx, (%ecx) popl %ebx popl %ebp ret
![](http://common.cnblogs.com/images/copycode.gif)
编译
as swap.s -o swap.o
链接
ld -lc -I /lib/ld-linux.so.2 swap.o -o swap
执行
./swap
相关文章推荐
- 汇编语言学习系列 冒泡排序实现
- 汇编语言学习系列 for循环实现
- 汇编语言学习系列 递归实现
- 每天学习一算法系列(24)(实现字符串左旋转的函数)
- 32位汇编语言学习笔记(21)--用NASM实现Hello World小程序
- [C++再学习系列] 派生类函数的重实现规则(override-覆盖)
- TQ2440 学习笔记—— 13、GPIO 接口【实验:用汇编语言实现】
- 汇编语言学习——通过两个开关实现一个数码管的数字显示
- 通过对PHP语言的学习,应该知道它是基于函数的一款HTML脚本语言。庞大的函数库支持着PHP语言功能的实现。下面我们为大家介绍有关PHP函数isset()与empty()的相关用法。
- 32位汇编语言学习笔记(42)--测试时间相关函数
- [C++再学习系列] 派生类函数的重实现规则(override-覆盖)
- 32位汇编语言学习笔记(13)--函数的调用
- Linux-C基础知识学习:C语言作业-将5个学生成绩保存在一个数组中,单独实现一个计算平均成绩的average函数, 在main函数中获取该函数返回的平均值,并打印。
- memcopy()函数c语言实现和汇编实现比较
- 32位汇编语言学习笔记(41)--fgets等函数的使用
- 用汇编实现类似于C语言中的printf函数--学习笔记
- [C++再学习系列] 派生类函数的重实现规则(override-覆盖)
- 数据结构和算法学习系列之快速排序的Partition函数一种实现方法
- mips汇编语言之实现swap函数
- [转]浅析C++中虚函数的调用及对象的内部布局(利用汇编深刻理解C++虚函数底层实现机制)