【-1】相关声明

本文总结于csapp; 了解详情,或有兴趣,建议看原版书籍;

【0】程序编码

GCC调用了一系列程序,将源代码转化成可执行代码的流程如下:

  • (1)C预处理器扩展源代码,插入所有用#include命令指定的文件,并扩展声明的宏;
  • (2)编译器产生两个源代码的汇编代码:*.s;
  • (3)汇编器将汇编代码转化为二进制目标代码 :*.o ; (目标代码是机器代码的一种形式,它包含所有指令的二进制表示,但没有填入地址的全局值)
  • (4)链接器将目标代码与实现库函数的代码合并,最终产生可执行代码文件;

【1】机器级代码

对于机器级编程来说,两种抽象很重要:

  • (1)机器级程序的格式和行为,定义为指令集体系结构;
  • (2)机器级程序使用的存储器地址是虚拟地址;

(Attention:os负责管理虚拟地址空间, 将虚拟地址翻译成实际处理器存储器中的物理地址!)


【2】要知道处理器的状态是可见的:

  • (1)程序计数器:pc,指示将要执行的下一条指令在存储器中的地址;
  • (2)整数寄存器文件:包含8个命名的位置;
  • (3)条件码寄存器:保存着算术或者逻辑指令的状态信息;
  • (4)一组浮点寄存器存放浮点数据;

【3】代码示例(联系开头的程序编码首文)

3.1)gcc编译器产生汇编代码

gcc -O1 -S code.c  generates code.s
gcc -O1 -S p107.c  generates p107.s

3.2)gcc编译并汇编该代码

gcc -O1 -c p107.c 产生目标代码p107.o, 它是二进制格式,所以无法直接查看。

3.3)反汇编器-disassmbler, 根据目标代码产生类似于汇编代码的格式

objdump -d p107.o >> p107-dis.s

3.4)生成可执行文件 prog

gcc -O1 -o prog p107.o p107-main.c

3.5)反汇编prog文件

objdump -d prog >> prog-dis.s

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

(Attention)

  • A0)这段代码(L121~L128)和 p107-dis.s 的代码几乎完全一样。
  • A1)其中一个主要的区别:是左边列出的地址不同——链接器将代码的地址移到一段不同的地址范围中。
  • A2)第二个不同之处:在于链接器确定了存储全局变量accum的地址。
  • A3)在p107-dis.s的12行,很明显accum=0, 而在prog的反汇编指令中(L126),accum的地址就设置为0x8049634了。

【4】ATT与intel 汇编代码格式

ATT是GCC、OBJDUMP和其它一些我们使用的工具的默认汇编格式;
其它一些编程工具, 包括Microsoft工具,以及来自intel的文档,其汇编代码是intel格式的;

程序编码(机器级代码+汇编代码+C代码+反汇编)相关推荐

  1. 深入理解计算机系统_第三章_程序的机器级表示

    深入,并且广泛-沉默犀牛 文章目录 文章导读 历史观点 程序编码 机器级代码 代码示例 关于格式的注解 数据格式 访问信息 操作数指示符 数据传送指令 数据传送示例 压入和弹出栈数据 算术和逻辑操作 ...

  2. 计算机内功修炼:程序的机器级表示(C与汇编)

    程序的机器级表示 历史观点 程序编码 1. 机器级代码 2. 代码示例 数据格式 访问信息 1. 操作数指示符 2. 数据传送指令 算术与逻辑操作 1. 加载有效地址 2. 一元操作和二元操作 3. ...

  3. 计算机系统导论第九章,计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新)...

    计算机系统导论 -- 读书笔记 -- 第三章 程序的机器级表示 (持续更新) 第三章 程序的机器级表示 3.1 历史观点 3.2 程序编码 1. 命令行 (1)编译 Linux> gcc -Og ...

  4. 第三章 程序的机器级表示

    程序的机器级表示 计算机执行机器代码,用字节序列编码低级的操作,包括处理数据.管理内存.读写存储设备上的数据,以及利用网络通信.编译器基于编程语言的规则.目标机器的指令集和操作系统遵循的惯例,经过一系 ...

  5. 深入理解计算机系统 第3章 程序的机器级表示

    目录 第3章 程序的机器级表示 数据格式 操作数指示符 练习题 数据传送指令 习题3.4 访问信息 压入和弹出栈数据 算数和逻辑操作 移位操作 讨论 特殊的算数操作 问题 第3章 程序的机器级表示 数 ...

  6. 第 3 章 程序的机器级表示

    文章目录 第 3 章 程序的机器级表示 3.1 历史观点 3.2 程序编码 3.2.1 机器级代码 3.2.2 代码示例 3.2.3 关于格式的注解 3.3 数据格式 3.4 访问信息 3.4.1 操 ...

  7. 第三章程序的机器级表示

    原地址:https://www.cnblogs.com/disturbia/p/4869229.html 第三章 程序的机器级表示 3.1 历史观点 Intel处理器系列俗称x86,开始时是第一代单芯 ...

  8. 第三章程序的机器级表示 学习报告

    第三章 程序的机器级表示 3.1 历史观点 Intel处理器系列俗称x86,开始时是第一代单芯片.16位微处理器之一. 每个后继处理器的设计都是后向兼容的--较早版本上编译的代码可以在较新的处理器上运 ...

  9. CSAPP:第三章程序的机器级表示1

    CSAPP:程序的机器级表示1 关键点:数据格式.操作数指示符. 数据格式访问信息操作数指示符举例说明 数据格式   术语字(word)表示16位数据类型,32位数为双字(double words), ...

  10. 【《深入理解计算机系统》读书笔记(3)】 第3章 程序的机器级表示

    [时间]2021.11.19 [题目]<深入理解计算机系统>读书笔记(3)  第3章 程序的机器级表示 目录 一.简介 二.一些重点图 1.常见数据类型格式 2.16个整数寄存器 3.寄存 ...

最新文章

  1. 突然想起来,前天是感恩节。
  2. php委托模式,PHP设计模式 - 委托模式
  3. matlab的svm工具箱的安装
  4. (四)DOM对象和jQuery对象
  5. BZOJ5358: [Lydsy1805月赛]口算训练
  6. NFS网络文件系统服务配置、验证及错误解决
  7. L1-042 日期格式化-PAT团体程序设计天梯赛GPLT
  8. hi3559AV100上交叉编译faiss(facebook research)
  9. 下载百度翻译英文读音
  10. 北大青鸟(邯郸翱翔)网络校区
  11. DevOps 10大IT管理工具(翻译)
  12. C#图片无损转换为ico格式
  13. 许丹萍 计算机系,【晋江市“十佳少先队辅导员”】第二实验小学老师许丹萍: 关注每一个队员的成长...
  14. 类型类 V.S. 桥接模式:撞衫不可怕,谁丑谁尴尬
  15. Android 发布代码到github 并且部署到 JitPack maven 仓库详细步骤
  16. html中 选择子元素 子元素选择器
  17. 2021年电工(初级)实操考试视频及电工(初级)理论考试
  18. JS获取时间戳 10位数时间戳
  19. C#,河豚算法(Blowfish Algorithm)的加密、解密源代码
  20. 熟练计算机的招聘启事,招聘启事:水木社区、新电脑

热门文章

  1. 树上启发式合并 简单例题
  2. 【刷题记录】排列dp
  3. 集合均值(逆元+数学)
  4. [2020-09-11 CQBZ/HSZX多校联测 T3] 万猪拱塔(线段树+巧妙转化)
  5. [国家集训队]航班安排 (最大费用最大流)
  6. P4169 [Violet]天使玩偶/SJY摆棋子(CDQ分治、暴力)
  7. CF446D-DZY Loves Games【高斯消元,矩阵乘法】
  8. 洛谷P3845-球赛【离散化,贪心】
  9. ssl1377-竞赛真理【dp之分组背包】
  10. codeforces1271 D. Portals(dp or 带悔贪心)