我很好奇是否可以以在 C 中使用 NASM 的类似方式进行汇编编程。
经过快速谷歌搜索,看看是否可以在 JVM 上进行汇编语言编程,并惊讶地发现了一些结果。
有没有人尝试过做这样的事情?
我还想知道是否有对 Clojure 或 Scala 的任何支持程序集支持。
minijavac:不是英文的,但看起来它使用了某种 NASM 支持。
用 C 语言编写一个带有内联汇编的 JNI 库。
理论上,您可以在纯汇编中编写一个符合 JNI 的库,但何必费心呢?
汇编通常在 C 中使用,以便 a)您可以访问 C 不生成的指令或 b)较低级别的性能调整。
由于字节码是为 Java 设计的,
我想指出另一个解决方案:在运行时从您的 java 程序生成汇编代码。很久以前,有一个名为softwire 的项目,用c++ 编写,正是这样做的。它(ab)使用(方法和运算符)重载来创建某种与 x86 ASM 非常相似的 c++ DSL,并在幕后组装相应的程序集。主要目标是能够动态组装为特定配置定制的组装例程,同时消除几乎所有的分支(如果配置发生更改,该例程将重新编译)。这是一个优秀的库,并且作者过去习惯于实现具有着色支持的软件渲染器(着色器在运行时动态转换为 x86 程序集和组装),因此这不仅仅是一个疯狂的想法。
今天,要遵循这样的路线,您可以创建一个与DynAsm的 JNI 绑定(仅此一项可能不是小任务)并在运行时使用它来组装。如果您愿意在 java 上使用 scala,您甚至可以相对轻松地创建一个 DSL ala 软线,它将在后台生成汇编源代码并将其传递给 DynASM。听起来很有趣:-) 没有理由再无聊了。
你在寻找像 jasmin 项目这样的东西吗?因为,出于某种原因,minijava 总是让我想起 jasmin 解析器......