`
haoningabc
  • 浏览: 1477818 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

深入理解计算机系统第三章笔记 gcc

    博客分类:
  • c
gcc 
阅读更多
随便写个最简单程序
然后gcc -S
看汇编
在gcc -C 变成.o文件
使用
objdump -d
反汇编

 2010  vim code.c
 2011  ls
 2012  gcc -O1 -S code.c 
 2013  ls
 2014  cat code.s 
 2015  gcc  -S code.c 
 2016  cat code.s 
 2017  gcc -O1 -S code.c 
 2018  cat code.s 
 2019  gcc -O1 -c code.c
 2020  ls
 2021  cat code.o 
 2023  objdump -d code.o 

root@ubuntu:~/algorithm# cat code.c 
#include <stdio.h>
int accum=0;
int sum(int x,int y){
    int t=x +y;
    accum+=t;
    return t;
}

root@ubuntu:~/algorithm# cat code.s
        .file   "code.c"
        .text
        .globl  sum
        .type   sum, @function
sum:
.LFB22:
        .cfi_startproc
        movl    8(%esp), %eax
        addl    4(%esp), %eax
        addl    %eax, accum
        ret
        .cfi_endproc
.LFE22:
        .size   sum, .-sum
        .globl  accum
        .bss
        .align 4
        .type   accum, @object
        .size   accum, 4
accum:
        .zero   4
        .ident  "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
        .section        .note.GNU-stack,"",@progbits
root@ubuntu:~/algorithm# 

root@ubuntu:~/algorithm# objdump -d code.o 

code.o:     file format elf32-i386


Disassembly of section .text:

00000000 <sum>:
   0:   8b 44 24 08             mov    0x8(%esp),%eax
   4:   03 44 24 04             add    0x4(%esp),%eax
   8:   01 05 00 00 00 00       add    %eax,0x0
   e:   c3                      ret    
root@ubuntu:~/algorithm# 

----------------------------
root@ubuntu:~/algorithm# gcc -O1 -o prog code.o main.c
root@ubuntu:~/algorithm# cat main.c 
int main(){
    return sum(1,3);
}
root@ubuntu:~/algorithm# 

gcc -O1 -S -masm=intel simple.c
root@ubuntu:~/algorithm# cat simple.s 
        .file   "simple.c"
        .intel_syntax noprefix
        .text
        .globl  simple
        .type   simple, @function
simple:
.LFB22:
        .cfi_startproc
        mov     edx, DWORD PTR [esp+4]
        mov     ecx, DWORD PTR [edx]
        mov     eax, ecx
        add     eax, DWORD PTR [esp+8]
        add     ecx, eax
        mov     DWORD PTR [edx], ecx
        ret
        .cfi_endproc
.LFE22:
        .size   simple, .-simple
        .ident  "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
        .section        .note.GNU-stack,"",@progbits
root@ubuntu:~/algorithm# 

gcc -O1 -S  simple.c
root@ubuntu:~/algorithm# cat simple1.s 
        .file   "simple.c"
        .text
        .globl  simple
        .type   simple, @function
simple:
.LFB22:
        .cfi_startproc
        movl    4(%esp), %edx
        movl    (%edx), %ecx
        movl    %ecx, %eax
        addl    8(%esp), %eax
        addl    %eax, %ecx
        movl    %ecx, (%edx)
        ret
        .cfi_endproc
.LFE22:
        .size   simple, .-simple
        .ident  "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
        .section        .note.GNU-stack,"",@progbits
root@ubuntu:~/algorithm#

两种汇编的比较
ATT与Intel
分享到:
评论

相关推荐

    深入理解计算机系统笔记

    在《深入理解计算机系统》第三版以及袁春风教授的计算机基础教材中,我们能够了解到许多关于计算机系统的基础概念及其工作原理。这两本教材都侧重于帮助读者从底层逻辑开始逐步构建对现代计算机系统的全面认识。 ##...

    计算机系统基础之缓冲区溢出攻击实验

    《计算机系统基础之缓冲区溢出攻击实验》是一份详细介绍了如何进行缓冲区溢出攻击的教学实验报告。 #### 实验目的 - **加深理解**:加深学生对IA-32架构下的函数调用机制和栈帧结构的理解。 - **攻击实践**:通过...

    嵌入式系统学习笔记(非常有帮助)

    ### 嵌入式系统学习笔记关键知识点解析 #### 一、嵌入式系统的软件环境:uClinux与GNU/Linux **知识点概述**: - **uClinux**:是一种为无MMU(Memory Management Unit,内存管理单元)的处理器设计的嵌入式Linux...

    《嵌入式Linux C语言应用程序设计》读书笔记

    第三章,书中详细讲解了GDB调试工具的使用。GDB是Linux下的调试神器,可以通过`gdb`命令启动,对程序进行单步调试、设置断点、查看变量值、监视变量变化等功能。`l`用于列出代码,`b`设置断点,`r`运行程序,`p`查看...

    嵌入式Linux入门笔记

    嵌入式系统是指集成到特定应用中的计算机系统,它们通常执行单一或有限的任务。嵌入式Linux将开源Linux操作系统与硬件平台相结合,提供了一种高效、灵活且可定制的解决方案。学习嵌入式Linux需要理解微处理器架构、...

    嵌入式linux入门笔记

    嵌入式系统是嵌入到其他设备或系统中的计算机系统,通常具有特定的功能,并且对功耗、体积和成本有严格要求。而嵌入式Linux则是将开源的Linux操作系统与嵌入式硬件相结合,提供了强大的处理能力、稳定性和灵活性,...

    理2244计科-C语言-OneNote笔记.rar

    3. **第3章:流程控制结构** - 条件语句:涵盖if、if...else、switch...case语句的用法,以及条件运算符。 - 循环结构:讲解while、for、do...while循环的实现和应用,以及break和continue语句。 - 分支结构:...

    达内 C语言笔记达内 C语言笔记.doc

    《达内C语言笔记》是一份详尽的教程,涵盖了C语言的基础知识,旨在帮助学习者掌握编程的基本结构和核心概念。以下是对笔记内容的详细解读: ...通过深入理解和实践这些知识点,可以逐步掌握C语言编程技巧。

    嵌入式Linux 入门笔记

    嵌入式系统是集成了微处理器、软件和硬件的专用计算机系统,它们被设计用于执行特定任务,常见于消费电子、汽车、医疗设备、工业自动化等多个行业。与传统的个人电脑系统相比,嵌入式系统通常更加小巧、低功耗,且...

    “ARM人脸识别” 实训第一天笔记

    ARM人脸识别实训第一天笔记主要涉及到ARM嵌入式硬件和Linux开发系统的基本概念和操作。其中,ARM嵌入式硬件是指基于ARM处理器的嵌入式系统,它广泛应用于人脸识别、物联网、自动化控制等领域。 Linux开发系统是ARM...

    嵌入式linux开发基础笔记

    在本笔记中,我们将深入探讨嵌入式Linux开发的基础知识,帮助IT开发者更好地理解和掌握这一技术。 一、嵌入式系统概述 嵌入式系统是指集成在设备或产品中的计算机系统,其主要功能是控制、监视或优化物理过程。与...

    嵌入式linux入门笔记.rar

    2. **嵌入式系统概念**:嵌入式系统是集成在其他设备中的计算机系统,它们有特定的功能,并且通常对实时性、功耗和尺寸有严格要求。理解嵌入式系统的设计原则和挑战是入门的关键。 3. **处理器架构**:嵌入式Linux...

    嵌入式linux学习笔记

    嵌入式系统是集成在硬件设备中,用于特定功能的计算机系统。它们通常比个人电脑更小、功耗更低,且针对性强。嵌入式Linux利用开源的Linux内核,结合定制化的硬件平台,为开发者提供了强大的功能和灵活性。 二、...

    ARM体系结构与编程(第二版) 杜春雷 学习笔记ppt

    杜春雷教授的《ARM体系结构与编程(第二版)》是深入理解这一技术的重要教材。这份学习笔记PPT涵盖了该书的核心内容,旨在帮助学习者全面掌握ARM架构的基础和高级特性。 1. **ARM架构概述** - ARM的历史:从最初的...

    arm学习笔记

    ARM学习笔记主要围绕这个核心主题展开,旨在帮助学习者深入理解和掌握ARM处理器的工作原理、指令集、体系结构以及在实际应用中的编程技巧。 首先,ARM9是ARM公司推出的一种处理器内核,属于ARM7之后的第二代增强型...

    arm入门笔记,新手学习arm的资料

    ARM架构是一种广泛应用于嵌入式系统、移动设备和服务器等领域的处理器架构。它以其低功耗、高效能和高度可定制性而闻名。对于新手来说,掌握ARM的基础知识是进入这个领域的第一步。以下是对"arm入门笔记,新手学习arm...

    C语言程序设计(谭浩强)-学习笔记.doc

    ### 第三章 数据类型、运算符与表达式 这是C语言的基础,定义了数据的存储和操作方式。 1. **C语言的基本元素**:关键字、标识符、常量、变量、运算符和语句。 2. **C的数据类型**:包括基本类型(整型、浮点型、...

    SnailOS0.00-SnailOS0.00

    笔记中提到,对于那些没有进入计算机相关专业的学生来说,自学是深入学习计算机操作系统的唯一出路。然而,这条路充满挑战,如同“翻越崇山峻岭”,需要面对极大的困难和挑战。自学过程中,初学者可能会遇到很多问题...

Global site tag (gtag.js) - Google Analytics