博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己动手构造编译系统:编译、汇编与链接1.1 从编程聊起
阅读量:6243 次
发布时间:2019-06-22

本文共 937 字,大约阅读时间需要 3 分钟。

第1章

  

代码背后

 

知其然,并知其所以然。

——《朱子语类》

1.1  从编程聊起

  

说起编程,如果有人问我们敲进计算机的第一段代码是什么,相信很多人会说出同一个答案——“Hello World !”。编程语言的教材一般都会把这段代码作为书中的第一个例子呈现给读者。当我们按照课本或者老师的要求把它输入到开发环境,然后单击“编译”和“运行”按钮,映入眼帘的那行字符串定会令人欣喜不已!然而激动过后,一股强烈的好奇心可能会驱使我们去弄清一个新的概念——编译是什么?

  遗憾的是,一般教授编程语言的老师不会介绍太多关于它的内容,最多会告诉我们:代码只有经过编译,才能在计算机中正确执行。随着知识和经验的不断积累,我们逐渐了解到当初单击“编译”按钮的时候,计算机在幕后做了一系列的工作。它先对源代码进行编译,生成二进制目标文件,然后对目标文件进行链接,最后生成一个可执行文件。即便如此,我们对编译的流程也只有一个模糊的认识。

  直到学习了编译原理,才发现编译器原来就是语言翻译程序,它把高级语言程序翻译成低级汇编语言程序。而汇编语言程序是不能被计算机直接识别的,必须靠汇编器把它翻译为计算机硬件可识别的机器语言程序。而根据之前对目标文件和链接器的了解,我们可能猜测到机器语言应该是按照二进制的形式存储在目标文件内部的。可是目标文件到底包含什么,链接后的可执行文件里又有什么?问题貌似越来越多。

  图1-1展示了编译的大致工作流程,相信拥有一定编程经验的人,对该图所表达的含义并不陌生。为了让源代码能正常地运行在计算机上,计算机对代码进行了“繁复”的处理。可是,编译器既然是语言翻译程序,为什么不把源代码直接翻译成机器语言,却还要经过汇编和链接的过程呢?

 

图1-1  编译的流程

  似乎我们解决了一些疑惑后,总是会有更多的疑惑接踵而来。但也正是这些层出不穷的疑惑,促使我们不断地探究简单问题背后的复杂机制。当挖掘出这些表象下覆盖的问题本质时,可能比首次敲出“Hello World!”程序时还要喜悦。在后面的章节中,将会逐步探讨编译背后的本质,将谜团一一揭开,最终读者自己可动手构造出本书所实现的编译系统——编译器、汇编器与链接器,真正做到“知其然,并知其所以然”。

转载地址:http://livia.baihongyu.com/

你可能感兴趣的文章
Spring2.5整合ActiveMQ 5.2
查看>>
浅析Struts1和Struts2的Action线程安全问题
查看>>
java-颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I
查看>>
HDU 2017
查看>>
yaml文件java的实现
查看>>
NO.142 执行用例,并提交bug,查看报表统计。
查看>>
LVM实现原理(pv,vg,lv,pe,le)
查看>>
我的友情链接
查看>>
cisco交换机IP/MAC***防范
查看>>
8、Python —— 输入输出
查看>>
我的友情链接
查看>>
[转]Shell 统计PV, UV ,独立IP
查看>>
Flash网页甘特图控件
查看>>
yii2 csrf验证以及token管理
查看>>
一步一步理解Java企业级应用的可扩展性
查看>>
存储非结构化数据之利器-minio
查看>>
苹果个人开发者账号申请
查看>>
SSH双机互信及错误解决大全
查看>>
adb命令详解
查看>>
php网页如何运作
查看>>