Chinaunix首页 | 论坛 | 博客
  • 博客访问: 290621
  • 博文数量: 46
  • 博客积分: 296
  • 博客等级: 二等列兵
  • 技术积分: 1000
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-10 13:10
文章分类
文章存档

2012年(1)

2011年(6)

2010年(9)

2009年(17)

2008年(13)

分类: C/C++

2012-02-19 17:50:30

先写一个最简单的汇编器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目标代码……
阅读(9152) | 评论(0) | 转发(1) |
0

上一篇:博客已升级,请注意变更地址

下一篇:没有了

给主人留下些什么吧!~~