《操作系统真象还原》——1.2 我们需要哪些编译器
本节书摘来自异步社区《操作系统真象还原》一书中的第1章,第1.2节,作者:郑钢著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.2 我们需要哪些编译器
C语言虽然不是为设计大型软件而生的,但其却被用来开发大型软件。
现代操作系统基本上是用C语言再结合汇编语言开发的,所以C语言编译器,我们选择的是gcc。而汇编语言编译器,我们选择的是nasm。为什么选择这两个,首先因为它们都是开源软件,其次其强大的功能不亚于同类的商业软件。
1.2.1 世界顶级编译器GCC
秉着简单至上的原则,我们在开发过程中,能用简单的工具就不用复杂的。所以我们的系统,绝大部分是C语言实现的,而且并不需要多么高深的算法及数据结构功底。
另外我们在Linux下开发,所以首先的编译器就是GCC,基本上没有人不了解这个大名鼎鼎的开源编译器了。出于对这个编译器的膜拜,我还是引用wiki上的介绍:
GNU编译器套装(GNU Compiler Collection,GCC),是一套由GNU开发的编程语言编译器。它是一套以GPL及LGPL许可证所发行的自由软体,也是GNU计划的关键部分,亦是自由的类Unix及苹果电脑Mac OS X 操作系统的标准编译器。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的标准。
GCC是由理查德·马修·斯托曼在1985年开始的。他首先扩展一个旧有的编译器,使它能编译C,这个编译器一开始是以Pastel语言所写的。Pastel是一个不可移植的Pascal语言特殊版,这个编译器也只能编译Pastel语言。为了让自由软件有一个编译器,后来此编译器由斯托曼和Len Tower在1987年以C语言重写并成为GNU专案的编译器。GCC的建立者由自由软件基金会直接管理。
GCC原名为GNU C语言编译器(GNU C Compiler),因为它原本只能处理C语言。GCC很快扩展,以2011年10月26日释出的4.6.2版为准,可处理的编程语言有:
1.Ada(GNAT) 2.C(GCC) 3.C++(G++) 4.Fortran(Fortran 77: G77,Fortran 90: GFORTRAN) 5.Java(编译器:GCJ;解释器:GIJ) 6.Objective-C(GOBJC) 7.Objective-C++ 8.Go
好啦,介绍结束,看上去GCC很厉害,居然可以支持这么多语言。不愧是出自理查德·马修·斯托曼(Richard Matthew Stallman)之手,只要学过计算机的读者便了解此人,他到底有多厉害呢,看网友对他的评价:“曾独自一人与一众lisp黑客高手进行比赛……”好了,多说已无益,简单的半句话便彻底表达了此人深厚的计算机功力。
1.2.2 汇编语言编译器新贵NASM
新是相对于旧来说的,旧的汇编器MASM和TASM已经过时了,从名称上可以看出字母n是在m之后,其功能必然有所超越才会被大家接受。
请用一句话概括NASM优势在哪里。免费+语法简洁使人舒适+支持Linux平台。这里所说的任何一个理由都是其他同类产品不具备的,敏锐的同学是不是察觉到了什么……哈哈,怎么给人的感觉是:其他编译器不是花钱,就是语法怪异让人不爽,要么就不支持Linux,看上去选择nasm是没得可选了?我就不自问自答了,反正NASM语法很接近咱们当初学的Intel语法,我是用得很爽呢。这里就不再比较其优越性了,大家若感兴趣还是自行查阅吧。
同样是为了抒发一下对这位新贵的“爱慕之情”,简要介绍还是很有必要的。
NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16位的'OBJ'和'Win32'。它还可以输出纯二进制文件。它的语法设计得相当的简洁易懂,和Intel语法相似但更简单。它支持'Pentium','P6','MMX','3DNow!','SSE'和'SSE2'指令集。
介绍完了之后,咱们讨论下为什么要用汇编语言开发系统呢?就目前来看,无论再怎么要求开发过程简单,也避免不了用汇编语言,尤其是开发操作系统这类底层软件。越底层的软件就越要与硬件直接打交道,这就要求在语言层面上给开发人员提供访问端口寄存器的方法。显然,目前的高级语言都做不到这一点,像C语言这类偏底层的语言都不支持修改寄存器,用汇编语言则是不可避免的事了。
包括我在内的很多同学一听要用汇编了,都有一种小小的恐惧感,认为这是一种不好掌握的东西(我没有称之为语言而是称之为东西,是因为曾经有个女同学都不知道汇编是什么),而且程序编写起来特别麻烦,要考虑的东西太多了,代码逻辑写起来不够直接,似乎总是在迂回……以至于我们经常被汇编语言“搞定”。我个人的感觉是当我熟悉了汇编语言后,甚至觉得有一点亲切呢。当然了,任何陌生的事物经过熟悉的过程后都会变得有亲切感,关键是咱们得扛到对它熟悉为止,不能让心里的畏惧战胜自己。用汇编语言和CPU直接对话,想想就有点小兴奋呢。
不过好在我们需要用汇编的地方只是一些硬件访问、中断调用、端口读写、线程切换之类(怎么看上去好多……),我们可以写出一些通用的代码来减少汇编的枯燥。总之,只有不得不用时我们才会向汇编语言屈服。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《玩转掌上生活——手机网上生活达人秘笈》一1.1 认识你的设备
本节书摘来异步社区《玩转掌上生活——手机网上生活达人秘笈》一书中的第1章,第1.1节,作者: 秦庆雷 , 李鑫 , 马雪飞 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。 1.1 认识你的设备 玩转掌上生活——手机网上生活达人秘笈我们的生活越来越因为科技的力量而改变,目前我们手中的设备——手机,基本上成为了每个人的信息处理平台与生活辅助工具。那么你真正了解它们吗?下面我们就按照手机系统的分类分别介绍主流的3种设备:iOS设备、Android设备以及Windows设备。 1.1.1 iOS iPhone是苹果公司研发的智能手机系列,它搭载苹果公司研发的iOS手机操作系统。第一代iPhone于2007年1月9日由苹果公司前首席执行官的史蒂夫·乔布斯发布,并在同年6月29日正式发售。2013年9月10日,苹果公司在美国加州举行新产品发布会上,推出第七代产品iPhone 5S及iPhone 5C,苹果手机各时期产品如图1.1所示。 1.1.2 Android Android是一种基于Linux的开放式源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Googl...
- 下一篇
《iOS 6高级开发手册(第4版)》——1.16节小结
本节书摘来自异步社区《iOS 6高级开发手册(第4版)》一书中的第1章,第1.16节小结,作者 【美】Erica Sadun,更多章节内容可以访问云栖社区“异步社区”公众号查看 1.16 小结iOS 6高级开发手册(第4版)本章介绍了一些与iPhone设备交互的核心方式。你看到了如何获取设备信息,检查电池状态,以及订阅接近事件。你学习了如何将iPod Touch与iPhone和iPad区分开,以及确定正在使用的是哪种型号。你了解了加速计,并通过几个示例看到了它的应用,从简单的“向上”定位到更复杂的晃动检测算法。你进入到Core Motion中,并且学习了如何创建更新块,实时响应设备事件。最后,你看到了如何给应用程序添加外部屏幕支持。下面对你刚才遇到的秘诀列出了几条总结性考虑。 iPhone的加速计提供了一种新颖的方式,用于补充其基于触摸的界面。使用加速度数据把用户交互扩展到“触摸此处”基本操作之外,并且引入了知道倾斜的反馈。低级调用可能是App Store友好的。它们不依赖于可能基于当前的固件版本而改变的Apple API。UNIX系统调用似乎令人畏缩不前,但是其中许多都受到iOS设备...
相关文章
文章评论
共有0条评论来说两句吧...