Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有C本机编译器的情况下创建C编译器_C_Assembly_Compiler Construction - Fatal编程技术网

如何在没有C本机编译器的情况下创建C编译器

如何在没有C本机编译器的情况下创建C编译器,c,assembly,compiler-construction,C,Assembly,Compiler Construction,这是一个简单的问题。如果要编译C编译器,需要一个C编译器。。。也许直接用汇编代码?也许内核提供了一个基本的工具来将C转换成汇编程序,并创建一个升级的基础设施?这也是一个愚蠢的问题,但我真的对如何从0设计一个操作系统(不是我)来与CPU和内存交互感兴趣。听起来这是小型C编译器tcc的任务 这是我所知道的最小的C编译器,一旦你移植了它,它就可以编译一个更大的C编译器,而且有很多关于如何将它移植到自定义系统的指南。Bootstrapping 如果你想查一查的话,这句话来源于“通过你的引导让你自己站起来

这是一个简单的问题。如果要编译C编译器,需要一个C编译器。。。也许直接用汇编代码?也许内核提供了一个基本的工具来将C转换成汇编程序,并创建一个升级的基础设施?这也是一个愚蠢的问题,但我真的对如何从0设计一个操作系统(不是我)来与CPU和内存交互感兴趣。

听起来这是小型C编译器tcc的任务

这是我所知道的最小的C编译器,一旦你移植了它,它就可以编译一个更大的C编译器,而且有很多关于如何将它移植到自定义系统的指南。

Bootstrapping 如果你想查一查的话,这句话来源于“通过你的引导让你自己站起来”。引导是一个简单的过程,但它需要大量的工作

  • 用另一种语言编写C编译器

  • 用C编写C编译器

  • 使用步骤1中的编译器编译步骤2中的编译器

  • 其他一些编译器必须是自举的,而不仅仅是C编译器。例如,必须使用它来编译自己

    请注意,只有在以下两个条件都满足时,才需要引导:

  • 您正在发明一种新的语言,因此没有现有的编译器

  • 您想用正在编译的语言编写编译器


  • 这与操作系统无关。如果你正在设计一个操作系统,你已经有足够的工作要做了。如果您的新操作系统还没有C编译器,则可以从其他操作系统交叉编译编译器。这项工作要少得多——可能是几个小时或几天,而不是几个月或几年。

    听起来你对“引导”这个主题很感兴趣。我建议你用谷歌搜索一下,看看这是否会引发更多的具体问题。现在你可能可以编写一个交叉编译器了。维基百科关于的文章应该会很有帮助。+1对于C编译内核模块的想法(Linus会喜欢的)以及“升级基础设施”的概念都很有用。相关:。另外,tcc非常简单,可以“编译”手动将其转换为x86汇编/操作码。这是我有一天想做的疯狂的项目之一:得到一个旧的穿孔卡片阅读器和穿孔卡片,用一个手动“编译并链接”的tcc穿孔它们,并用一个由分立元件制成的适配器将其连接到现代计算机的LPC接口,仅仅为了它。你有一种奇怪的乐趣,我的朋友:P