• 一个简单的汇编例子


    简单的汇编例子:

    .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

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

    编译汇编的两种方式:

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

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

    2、gcc -o execode sourceCode.s



  • 相关阅读:
    ASP.NET 4.0的ClientIDMode属性
    关于sql链接超时的问题
    Image.Url 无法使用 Server.MapPath(使用后无论如何也不显示)
    C# 中字符串转换成日期
    Linux RAID 磁盘管理
    脚本编写
    挂载一个NFS共享
    配置NFS服务
    配置多用户SMB挂载
    通过 SMB 共享目录
  • 原文地址:https://www.cnblogs.com/bugY/p/2216455.html
Copyright © 2020-2023  润新知