我一直在编写一些verilog代码来创建具有自己指令集的简单微处理器模拟。到目前为止,我一直在编译我的所有代码,并使用十六进制编辑器生成可用作启动程序内存的二进制文件。现在我需要将一些流行的语言(如 C 或 BASIC)编译到我的指令集中,并且由于编写自己的编译器似乎是一项非常困难和长期的任务,我正在寻找可以以某种方式或哪种方式扩展的编译器s 源代码可以简单地重写为不同的指令。
有没有办法做到这一点?这样的编译器存在吗?
我一直在编写一些verilog代码来创建具有自己指令集的简单微处理器模拟。到目前为止,我一直在编译我的所有代码,并使用十六进制编辑器生成可用作启动程序内存的二进制文件。现在我需要将一些流行的语言(如 C 或 BASIC)编译到我的指令集中,并且由于编写自己的编译器似乎是一项非常困难和长期的任务,我正在寻找可以以某种方式或哪种方式扩展的编译器s 源代码可以简单地重写为不同的指令。
有没有办法做到这一点?这样的编译器存在吗?
您可以为 gcc 或 llvm 等可重定向编译器编写后端。例如,参见http://llvm.org/docs/WritingAnLLVMBackend.html或http://gcc.gnu.org/onlinedocs/gccint/Back-End.html。
对于像 C 这样的任何东西,这将是一项非常复杂的任务。甚至比编写一些简单语言的编译器还要复杂。但是,如果您想这样做,请查看 GCC。它是开源的,旨在为新平台扩展。此外,它支持组合多个前端(编程语言)和后端(目标平台的生成器)。
但是,如果您的活动只是为了学习一些东西而不是实际设计一个新的生产微处理器,我宁愿选择一些简单语言(例如 Pascal)的子集并编写一个简单的编译器。你最终可能会得到大约 10k 到 20k 行代码,而且也会很有趣。