11

所以最近,为了磨练我的汇编技能,我用 C++ 为一种玩具语言编写了一个非常简单的编译器。它运行单遍,并在解析阶段直接将代码发送到多个字符串流,每个字符串流代表一段代码(即一个代表section .bss,而其他代表.data.text)。之后,这些字符串流被写入一个文件,我使用 NASM 和 gcc 来组装和链接它们。我知道这种单通道方法效率极低,但同样,这更像是一种理解代码生成阶段的练习,而不是其他任何东西。无论如何,我想修改我的代码以直接发出 LLVM IL 而不是原始汇编,再次作为学习练习。是否有 LLVM IL 的入门级指南?或者,甚至更好的工具来确定一行汇编的等效 IL 代码?我看了看,我只找到了完整的规范,这比我需要的信息多得多。

4

1 回答 1

14

LLVM IR 语言参考可在此处获得。请注意,这是一个详细的参考页面,而不是教程。x86 程序集和 LLVM IR 之间没有直接的一对一对应关系,尽管由于 LLVM IR 比 x86 程序集更高级别和更通用,因此将编译器从发出 x86 调整为发出 LLVM IR 应该不会太难。

LLVM 官方文档附带了一个详细的教程,这绝对是您的最佳起点——它介绍了从简单的高级编程语言创建玩具编译器到 LLVM IR。通过学习,您将学习 LLVM 的许多关键概念,然后能够有效地使用上述语言参考。

如果您发现本教程有任何问题,请将它们报告给 LLVM 错误跟踪器或邮件列表。该教程有望正常运行,任何报告的问题都将得到修复。

了解 LLVM IR 的另一个很好的入门资源是在线演示页面。它允许您在线将 C 代码块编译为 LLVM IR(无需安装任何东西),并且对于理解如何在 LLVM IR 中表示基本编程结构非常有帮助。

于 2012-04-29T12:53:44.473 回答