您的位置:首页 > 其它

一个简单的汇编例子

2011-10-18 14:30 323 查看
简单的汇编例子:

.section .data
data_items:
.long 10,2,4,1,7,3,0

.section .text
.globl _start
_start:
movl $0,%edi
movl data_items(,%edi,4),%eax
movl %eax,%ebx

start_loop:
cmpl $0,%eax  //cmpl相当于比较函数
je exit_loop  //如果eax==0,那么跳转到exit_loop   je中‘e'的意思为’equal‘

incl %edi    //edi递加1
movl data_items(,%edi,4),%eax  //相当于eax=data_items+edi*4,定义eax的地址,也就是data_items数组的第edi个元素
cmpl %ebx,%eax
jle start_loop  //le的意思为"less than or equal“,也就是上面的比较小于或者等于的时候跳转

movl %eax,%ebx
jmp start_loop  //jmp直接跳转

exit_loop:
movl $1,%eax
int $0x80  //产生中断,由用户模式切换到内核模式


在你Linux中:

  使用as sort.s -o max.o 编译

  使用ld sort.o -o max 链接

  使用readelf -a max.o 读取目标文件的ELF Header和Section Header Table

  使用hexdump -C max.o将目标文件的字节全部打印出来。

  使用objdump -d max.o将机器指令反汇编

如何将C语言编译成为汇编文件?

gcc -S temp.c

gcc -c temp.s

gcc temp.o

这里有个图可以清晰的总结:



编译汇编的两种方式:

1、as sourceCode.s -o objfile.o//编译成为目标文件

  ld objfile.o -o execode //连接成可执行文件

2、gcc -o execode sourceCode.s
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: