美文网首页
汇编(一)汇编代码的产生方式

汇编(一)汇编代码的产生方式

作者: Gaolex | 来源:发表于2016-02-08 20:57 被阅读343次

汇编

希望大家喜欢,点赞哦
在编译过程中,编译器会完成大部分工作。其中汇编代码非常接近于机器代码,是理解计算机如何人执行程序的关键一步。
那么怎么产生汇编代码呢???书中讲了以下两种方法:
首先,假设我们写了一个C语言代码文件 code.c ,包含的定义如下:

int accum = 0;
int sum(int x,int y)
{
    int t = x + y;
    accum += t;
    return t;
}

一、在命令行上使用"-S"选项,得到汇编代码:

    gcc -O1 -S code.c

此时会产生一个汇编文件code.s,但是不进一步工作。code.s文件内容如下:

      .file   "code.c"
       .text
       .globl  sum
       .type   sum, @function
   sum:
   .LFB0:
       .cfi_startproc
       leal    (%rdi,%rsi), %eax
       addl    %eax, accum(%rip)
      ret
      .cfi_endproc
  .LFE0:
      .size   sum, .-sum
      .globl  accum
      .bss
      .align 4
      .type   accum, @object
      .size   accum, 4
  accum:
      .zero   4
      .ident  "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4"
      .section    .note.GNU-stack,"",@progbits

具体意思见后文。。。

二、利用目标代码文件和反汇编器(disassember)

首先我们产生目标代码文件code.o

    gcc -O1 -c code.c

这个目标代码文件可用以下命令用反汇编器查看。

    objdump -d code.o

执行后产生以下

code.o:     文件格式 elf64-x86-64


Disassembly of section .text:

0000000000000000 <sum>:
   0:   8d 04 37                lea    (%rdi,%rsi,1),%eax
   3:   01 05 00 00 00 00       add    %eax,0x0(%rip)        # 9 <sum+0x9>
   9:   c3                      retq   

对比发现,反汇编器省略了指令结尾的'l',这些后缀是大小指示符,在大多数情况下可以忽略。

希望大家喜欢,点赞哦

相关文章

  • 汇编(一)汇编代码的产生方式

    汇编 希望大家喜欢,点赞哦在编译过程中,编译器会完成大部分工作。其中汇编代码非常接近于机器代码,是理解计算机如何人...

  • 计算机系统:笔记三

    将C 代码编译为汇编代码。 $ gcc -Og -S code.c # 产生code.s 汇编文件 2.将C代码...

  • 汇编基础笔记一

    汇编指令 汇编代码,高级语言-》汇编代码-》二进制-》计算机执行 高级语言只能转换成一种汇编代码,汇编代码可能转换...

  • 代码的编译过程

    预处理 编译生成汇编代码 源码->汇编 汇编生成目标文件 链接各种库才能产生最终的正确可执行文件 编译的过程 假如...

  • CSAPP阅读笔记-第三章:程序的机器级表示

    章节开头导语部分 GCC C语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序中的每一条指...

  • 6、汇编和可执行文件(需要重新看视频整理)

    汇编≈机器码 编译器将源代码转换成汇编码(机器码) 代码经过编译器编译形成与之对应的汇编代码,而这些汇编代码不是可...

  • 汇编(四)

    1. if语句的汇编代码 一个简单的if语句 main函数汇编 2. while语句的汇编代码 do while的...

  • 嵌入式程序优化(1)——内嵌arm汇编

    1. 内嵌汇编介绍 内嵌汇编是代码优化时的常见手段,它是指在 C代码 中嵌入汇编代码,从而使得代码更加紧凑,避免一...

  • 汇编基础(八) if、循环的汇编识别

    描述 验证if、循环、switch在汇编当中是怎么表示的 if 的汇编 新建的工程 源代码 汇编的代码 ext:0...

  • 内联汇编

    内联汇编是指在 C/C++ 代码中嵌入的汇编代码,与全部是汇编的汇编源文件不同,它们被嵌入到 C/C++ 的大环境...

网友评论

      本文标题:汇编(一)汇编代码的产生方式

      本文链接:https://www.haomeiwen.com/subject/dvmykttx.html