计算机系统复习笔记-第3章 程序的机器级表示.docxVIP

计算机系统复习笔记-第3章 程序的机器级表示.docx

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 程序的机器级表示 3.1 序言 历史观点 机器代码:用字节序列编码低级的操作,包括处理数据、管理内存、读写存储设备上的数据,以及利用网络通信。 汇编代码:GCC C语言编译器以汇编代码的形式产生输出,汇编代码是机器代码的文本表示,给出程序中的每一条指令。GCC调用汇编器和链接器,根据汇编代码生成可执行的机器代码。 注:① 用高级语言编写的程序可以在很多不同的机器上编译和执行,而汇编代码则是与特定机器密切相关的 ② 汇编代码的两种格式:ATT、Intel 生成Intel格式的代码的命令: 1inux gcc -Og -S -masm=intel mstore.c IA32:Intel 32位体系结构(Intel Architecture32),Intel在1985年提出 x86-64:即Intel64,IA32的64位拓展 后向兼容:较早版本上编译的代码可以在较新的处理器上运行 摩尔定律(Moore’s Law):1965年, Gordon Moore, Intel公司的创始人,根据当时的芯片技术做出的预测。在未来10年,芯片上的晶体管数量每年都会翻一番。事实是,在超过50年中,半导体工业一直能够使得晶体管数目每18个月翻一倍 3.2 程序编码 假设一个C程序,有两个文件p1.c和p2.c,我们用Linux命令将源代码转化成可执行代码 linux gcc -Og -o p p1.c p2.c 注:-Og表示优化等级。为了提高程序的性能,可以选择较高级别的优化(例如,-O1或-O2) gcc命令调用了一整套的程序,将源代码转化成可执行代码: C预处理器(C preprocessor,cpp)扩展源代码,插人所有用#include命令指定的文件,并扩展所有用#define声明指定的宏 编译器(compiler)产生两个源文件的汇编代码,名字分别为p1.s和p2.s 汇编器(assembler)将汇编代码(.s)转化成二进制目标代码文件(.o)p1.o和p2.o 。目标代码是机器代码的一种形式,它包含所有指令的二进制表示,但是还没有填入全局值的地址、缺少不同文件代码之间的联系 链接器(linker)将两个目标代码文件与实现库函数(例如printf)的代码合并,并产生最终的可执行代码文件p(由命令行指示符-o p指定的)。解析文件之间的引用,为函数调用找到匹配的函数的可执行代码的位置。可执行代码文件是机器代码的第二种形式,也就是处理器执行的代码格式 机器级编程两种重要抽象: ①指令集体系结构 (Instruction Set Architecture, ISA)定义机器级程序的格式和行为,它定义了处理器状态、指令的格式,以及每条指令对状态的影响。大多数ISA,包括x86-64,将程序的行为描述成好像每条指令都是按顺序执行的,一条指令结束后,下一条再开始。处理器的硬件远比描述的精细复杂,它们并发地执行许多指令,但是可以采取措施保证整体行为与ISA指定的顺序执行的行为完全一致 ②机器级程序使用的内存地址是虚拟地址,提供的内存模型看上去是一个非常大的字节数组 x86-64的机器代码和原始的C代码差别非常大 ①一些通常对C语言程序员隐藏的处理器状态都是可见的: 程序计数器(通常称为“PC”,在x86-64中用%rip表示):给出将要执行的下一条指令在内存中的地址 整数寄存器文件:包含16个命名的位置,分别存储64位的值。这些寄存器可以存储地址(对应于C语言的指针)或整数数据。有的寄存器被用来记录某些重要的程序状态,而其他的寄存器用来保存临时数据,例如过程的参数和局部变量,以及函数的返回值 条件码寄存器:保存着最近执行的算术或逻辑指令的状态信息。它们用来实现控制或数据流中的条件变化,比如说用来实现if和while语句 向量寄存器:可以存放一个或多个整数或浮点数值 ②机器代码只是简单地将内存看成一个很大的、按字节寻址的数组。C语言中的聚合数据类型,例如数组和结构,在机器代码中用一组连续的字节来表示。即使是对标量数据类型,汇编代码也不区分有符号或无符号整数,不区分各种类型的指针,甚至于不区分指针和整数 对于一个C语言代码文件mstore.c 生成汇编代码: linux gcc -Og -S mstore.c 产生汇编文件mstore.s 编译并汇编该代码: linux gcc -Og -c mstore.c 产生目标代码文件mstore.o 注:它是二进制格式的,无法直接查看 反汇编器(disassembler):根据机器代码产生一种类似于汇编代码的格式。 linux objdump -d mstore.o 链接,生成可执行文件prog 1inux gcc -Og -o Prog main.c mstore.c 关于机器代码和它的反汇编

文档评论(0)

浙江工程信息通 + 关注
实名认证
服务提供商

网络工程师持证人

本人已从事浙江省工程咨询5年,对浙江省内工程信息非常熟悉,可获取新建工程相关联系人、设计院、业主等关键信息。另外从事楼宇自控专业已10年,考取了一建二建等资格证书,有关考试方面的问题(考试心得、方法、学习资料等)都欢饮来咨询交流。

领域认证该用户于2023年05月11日上传了网络工程师

1亿VIP精品文档

相关文档