《操作系统真象还原》——1.2 我们需要哪些编译器-阿里云开发者社区

开发者社区> 异步社区> 正文

《操作系统真象还原》——1.2 我们需要哪些编译器

简介: GCC是由理查德·马修·斯托曼在1985年开始的。他首先扩展一个旧有的编译器,使它能编译C,这个编译器一开始是以Pastel语言所写的。Pastel是一个不可移植的Pascal语言特殊版,这个编译器也只能编译Pastel语言。
+关注继续查看

本节书摘来自异步社区《操作系统真象还原》一书中的第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直接对话,想想就有点小兴奋呢。

不过好在我们需要用汇编的地方只是一些硬件访问、中断调用、端口读写、线程切换之类(怎么看上去好多……),我们可以写出一些通用的代码来减少汇编的枯燥。总之,只有不得不用时我们才会向汇编语言屈服。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10099 0
09.阿里云服务器(Ubantu系统)配置ndk 编译ffmpeg
(创建于2018/1/4) ffmpeg完整的编译过程 1.ls 显示所有目录文件 2.mkdir root 创建文件夹root //将Android文件夹下的所有强制删除 rm -rf android 3.
891 0
《Linux C编程从入门到精通》——2.2 Linux中的C语言编译器gcc
Install是安装软件包,build-essential是待安装的软件包名称。由于安装软件需要root权限,因此系统会提示输入密码。在输入密码后,系统会自动安装编译所需要的相关文件。系统在安装build-essential时,会把程序文件放入以下几个目录。
1303 0
6 cocos2dx粒子效果,类图关系,系统原生粒子和自定义粒子效果,粒子编译器软件,爆炸粒子效果,烟花效果,火焰效果,流星效果,漩涡粒子效果,雪花效果,烟雾效果,太阳效果,下雨效果
 1 粒子 示例 2 类图关系 3 系统原生粒子 CCParticleSystem 所有粒子系统的父类 CCParticleSystemPoint、 CCParticleSystemQuad 点粒子和方形粒子系统,都继承了CCParti
1281 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13895 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载