深入理解计算机系统:程序结构和执行.pdf

深入理解计算机系统:程序结构和执行.pdf

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
深入理解计算机系统:程序结构和执行

深入理解计算机系统 :程序结构和执行 1. 信信息息就就是是位位 + 上上下下文文 程程序序被被其其他他程程序序翻翻译译成成不不同同的的格格式式 大部分的现代系统都使用 ASCII 准来表示文本字符, 这种方式实际上就是用 一个唯一的单字节大小 的整数值来表示每个字符。 例如图 1 -2 中给出了 hello. c 程序的 ASCII 码表示。 系系统统中中所所有有的的信信息息—包包括括磁磁盘盘文文件件、、 存存储储器器中中的的程程序序、、 存存储储器器中中存存放放的的用用户户数数据据以以及及网网络络上上传传 送送的的数数据据,, 都都是是由由一一串串位位表表示示的的。。 区区分分不不同同数数据据对对象象的的唯唯一一方方法法是是我我们们读读到到这这些些数数据据对对象象时时的的上上下下文文。。 为为了了在在系系统统上上运运行行 程程序序,,每每条条 C 语语句句都都必必须须被被其其他他程程序序转转化化为为一一系系列列的的低低级级机机器器语语言言指指令令。。 然然 后后这这些些指指令令按按照照一一种种称称为为可可执执行行目目 程程序序的的格格式式打打好好包包,, 并并以以二二进进制制磁磁盘盘文文件件的的形形式式存存放放起起 来来。。 目目 程程序序也也称称为为可可执执行行目目 文文件件。。这这个个翻翻译译的的过过程程可可分分为为四四个个阶阶段段完完成成,, 如如图图 1 -3 所所示示。。 执执行行这这四四个个阶阶段段的的程程序序 ((预预处处理理器器、、 编编译译器器、、 汇汇编编器器和和链链接接器器)) 一一起起构构成成了了编编译译系系 统统 (( compilation system))。。 • 预处理阶段。 预处理器 (cpp ) 根据以字符 # 开头的命令, 修改原始的 C 程序。 比如 hello. c 中第 1 行的 #include stdio. h 命令告诉预处理器读取系统头文件 stdio. h 的内容,并把它直接插入到程序文本 中。 结果就得到了另 一个 C 程序, 通常是以 . i 作为文件扩展名 。 • 编译阶段。 编译器 ( cc 1 ) 将文本文件 hello. i 翻译成文本文件 hello. s, 它包含一个汇编语言程序。 汇编语言程序中的每条语句都以一种 准的文本格式确切地描述了一条低级机器语言指令。 汇编语言 是非常有用的, 因为它为不同高级语言的不同编译器提供了通用的输出语言。 例如, C 编译器和 Fortran 编译器产生的输出文件用的都是一样的汇编语言。 • 汇编阶段。 接下来, 汇编器 ( as ) 将 hello. s 翻译成机器语言指令, 把这些指令打包成一种叫做可 重定位目 程序 ( relocatable obj ect progra ) 的格式, 并将结果保存在目 文件 hello. o 中。 hello. o 文件是一个二进制文件, 它的字节编码是机器语言指令而不是字符。 如果我们在文本编辑器中打开 hello. o 文件, 看到的将是一堆乱码。 • 链接阶段。 请注意, hello 程序调用 了 printf 函数, 它是每个 C 编译器都会提供的 准 C 库中的一 个函数。 printf 函数存在于一个名为 printf. o 的单独的预编译好了的目 文件中, 而这个文件必须以 某种方式合并到我们的 hello. o 程序中。 链接器 ( ld ) 就负责处理这种合并。 结果就得到 hello 文 件, 它是一个可执行目 文件 ( 或者简称为可执行文件), 可以被加载到内存中,由系统执行。 有有一一些些重重要要的的原原因因促促使使程程序序员员必必须须知知道道编编译译系系统统是是如如何何工工作作的的,, 其其原原因因如如下下 :: 优优化化程程序序性性能能。。 现现代代编编译译器器都都是是成成熟熟的的工工具具,, 通通常常可可以以生生成成很很好好的的代代码码。。 作作为为程程序序员员,, 我我们们无无 需需为为了了写写出出高高效效代代码码而而去去了了解解编编译译器器的的内内部部工工作作。。 但但是是,, 为为了了在在 C 程程序序中中做做出出好好的的编编码码选选择择,, 我我们们确确实实需需要要了了解解一一些些机机器器代代码码以以及及编编译译器器将将不不同同

文档评论(0)

561190792 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档