Chinaunix首页 | 论坛 | 博客
  • 博客访问: 255665
  • 博文数量: 71
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-16 13:07
个人简介

我喜欢蓝天,也喜欢雨天。

文章分类

全部博文(71)

文章存档

2014年(14)

2013年(57)

分类: C/C++

2014-02-17 15:47:33

原文地址:C语言编译器自举开发过程 作者:yaofei

先写一个最简单的汇编器AssA(可以只支持一部分指令),手工翻译成二进制指令码,在裸机上跑。

然后用这个AssA支持的汇编语言或子集写一个功能略强支持全部指令的汇编器AssB,用AssA汇编后生成目标码。

用汇编语言写一个宏汇编器AssC,用AssB生成目标码。

用汇编语言写一个最简单的C语言子集编译器C tiny,可以仅仅支持整数和指针数据类型,输出汇编语言源文件。用AssC汇编这个编译器。

以后就是用C tiny写一个支持更多数据类型的C语言子集编译器C small, 用C tiny 编译C small,再用 AssC 生成目标码。

如果愿意,这时候可以再用可执行的C small 编译器编译C small自己的源代码,再用AssC生成目标码,形成新的C small编译器。

下面,可以选择用C small重写汇编器AssD……

接着再用C small支持的C语言子集,编写更大的C语言子集编译器C medium,然后是C big、操作系统、在操作系统上运行的新C编译器 …… 

这是仅有目标计算机自己的情况下玩的自举开发途径。如果已经有了一套完整的体系结构能运行C语言和编译器,可以在这个机器上开发改写C编译器,让其产生目标平台的可执行代码,也就是通常说的“交叉编译”。常见的例子,就是在PC上开发MCS51单片机程序。

在GCC自己编译自己的过程里,有三个配置选项:build host target,分别代表编译编译器的平台、编译器运行的平台和编译生成代码的目标平台。举例而言:你可以在Linux/x86 平台上用GCC编译GCC自己,生成一个运行在Solaris/SPARC平台上的新版本GCC,这个GCC在SUN工作站上运行后,可以生成运行在裸机上的ARM目标代码……
阅读(1352) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~