首页 > 代码库 > 汇编语言学习系列 函数实现
汇编语言学习系列 函数实现
以下代码示范交换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
汇编语言学习系列 函数实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。