首页
登录 | 注册

C语言编译器自举开发过程

先写一个最简单的汇编器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目标代码……

相关文章

  • 一.编译准备: 工作电脑的环境是Ubantu10.04.   确认 Ubantu是否已经安装 gmp 和 mpfr . 若没有,下载安装,地址如下: 1. gmp-4.3.2.tar.bz2 2. mpfr-3.1.1.tar.bz2   ...
  • Java基础20:Java8新特性终极指南
    这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux.网络.多线程,偶尔讲点Docker.ELK,同时也分享技术干货和学习经验,致力于Ja ...
  • GNU C 增加一个 __atttribute__ 关键字用来声明一个函数.变量或类型的特殊属性.声明这个特殊属性有什么用呢?主要用途就是指导编译器在编译程序时进行特定方面的优化或代码检查.比如,我们可以通过使用属性声明指定某个变量的数据边 ...
  • 前面12节的课程,主要针对 Linux 内核中 GNU C 扩展的一些常用 C 语言语法进行了分析.GNU C 的这些扩展语法,主要用来完善 C 语言标准和编译优化.而通过 C 标准的发展过程我们又发现,对于一些编译器扩展的一些特性,或者其 ...
  • 内建函数,顾名思义,就是编译器内部实现的函数.这些函数跟关键字一样,可以直接使用,无须像标准库函数那样,要 #include 对应的头文件才能使用. 用来处理变长参数列表: 用来处理程序运行异常: 程序的编译优化.性能优化: 查看函数运行中 ...
  • 这一节,接着讲 __atttribute__ 属性声明,__atttribute__ 可以说是 GNU C 最大的特色.我们接下来继续讲一下跟内联函数相关的两个属性:noinline 和 always_inline.这两个属性的用途是告诉编 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.013 s.
京ICP备10005923号