如何在编译器中包含汇编程序

时间:2015-04-04 05:20:22

标签: java assembly compiler-construction

我目前正在参加编译器课程并在JAVA中成功构建了一个小编译器,它接受一个文件作为输入并写入NASM输出。

我想知道如果我决定分发我的编译器如何用它打包汇编程序?

我确信我不能要求最终用户首先将代码编译到NASM,确保他/她安装了NASM,然后使用它来构建最终的可执行文件!

此外,由于我想针对几个不同的系统,为每个预定目标编写高效汇编程序的想法显然是一项艰巨而耗时(更不用说看似不可能)的任务!

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

您可以使用编译器选择开源汇编程序和包。但是,请注意许可证,汇编程序的许可证可能还要求您在特定许可证下发布编译器。

当然,这并不能解决您的第二个问题:如何使这个平台(或至少是CPU)独立。然后通过汇编语言(或直接到机器代码)不是要走的路。

解决方案可能是使用其他人的后端。 LLVM目前有点“热”。在某种程度上,这通过向LLVM发送“平台无关汇编语言”来工作,然后LLVM为您输出目标平台的目标代码。

答案 1 :(得分:0)

www.nasm.us/pub/nasm/releasebuilds/2.11.08起,似乎至少在WindowsMac OS X平台上,NASM汇编程序可以在zip中部署为简单portable application文件。

您只需将zip文件与您的应用程序一起分发,并在需要时将适当的特定于平台的zip提取到临时目录中,然后在后台运行该工具。


在采取行动之前需要澄清一些其他主题:

  • 如何使用Java创建临时目录?
  • 如何使用Java解压缩档案?
  • 如何在不威胁用户的情况下将可执行文件标记为可执行文件(例如如何设置chmod+x)?
  • 如何在Java中生成等待后台进程?
  • NASM的再分发许可政策是什么?
  • NASM是否有不常见的第三方依赖项,必须同时发货?
  • 如何编写跨平台Java代码以及如何进行多平台测试?
  • ...