汇编语言学习系列 函数实现
来源:互联网 发布:崩坏学园2淘宝代充 编辑:程序博客网 时间:2024/04/30 11:45
以下代码示范交换a和b两个整数的函数,编译环境Ubuntu14.04(32位)
假如要实现以下C代码
#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;}
- 汇编代码如下:
.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
- 编译
as swap.s -o swap.o
- 链接
ld -lc -I /lib/ld-linux.so.2 swap.o -o swap
- 执行
./swap
0 0
- 汇编语言学习系列 函数实现
- 汇编语言学习系列 递归实现
- 汇编语言学习系列 打印数组实现
- 汇编语言学习系列 for循环实现
- 汇编语言学习系列 冒泡排序实现
- [学习笔记]用汇编语言编写一个函数 实现两个数相加
- mips汇编语言之实现swap函数
- 汇编语言-学习
- 学习汇编语言
- 学习汇编语言!
- 学习汇编语言
- 汇编语言学习
- 汇编语言学习
- 学习:汇编语言
- 汇编语言学习
- 使用汇编语言实现if else 循环 函数调用
- 32位汇编语言学习笔记(13)--函数的调用
- 32位汇编语言学习笔记(14)--递归函数的调用
- c语言危险库函数及解决方案
- poj解题报告——2081
- Android 闹钟 开发过程记录(六)
- Cocos2d-x3.2实现虚拟摇杆多点触摸
- 【javascript】弹出新窗口
- 汇编语言学习系列 函数实现
- Java编程基础:栈&堆
- android中三种animation使用及源码分view
- WINDOW2008R2、WINDOW2012系统出现Comsurrogate错误
- App欢迎界面的制作(UIScrollView实现)
- Cocos2d-x 3.2 Menu菜单的创建
- jquery中ajax提交数组参数
- Cocos2d-x3.3 Physics物理引擎模块解决了刚体穿透问题
- Cocos2d-x3.2 双击事件