1

我很好奇是否可以以在 C 中使用 NASM 的类似方式进行汇编编程。

经过快速谷歌搜索,看看是否可以在 JVM 上进行汇编语言编程,并惊讶地发现了一些结果。

有没有人尝试过做这样的事情?

我还想知道是否有对 Clojure 或 Scala 的任何支持程序集支持。

从 Java 调用汇编语言编程

minijavac:不是英文的,但看起来它使用了某种 NASM 支持。

4

4 回答 4

2

用 C 语言编写一个带有内联汇编的 JNI 库。

理论上,您可以在纯汇编中编写一个符合 JNI 的库,但何必费心呢?

于 2013-01-03T22:37:03.790 回答
2

汇编通常在 C 中使用,以便 a)您可以访问 C 不生成的指令或 b)较低级别的性能调整。

由于字节码是为 Java 设计的,

  • 它不会生成任何有用的字节码指令
  • JVM 在编译器生成的字节码中寻找常见模式并针对这些模式进行优化。这意味着如果您自己编写字节码,它更有可能优化得更少,即更慢,除非它与编译器生成的相同。
于 2013-01-03T21:18:57.523 回答
1

我想指出另一个解决方案:在运行时从您的 java 程序生成汇编代码。很久以前,有一个名为softwire 的项目,用c++ 编写,正是这样做的。它(ab)使用(方法和运算符)重载来创建某种与 x86 ASM 非常相似的 c++ DSL,并在幕后组装相应的程序集。主要目标是能够动态组装为特定配置定制的组装例程,同时消除几乎所有的分支(如果配置发生更改,该例程将重新编译)。这是一个优秀的库,并且作者过去习惯于实现具有着色支持的软件渲染器(着色器在运行时动态转换为 x86 程序集和组装),因此这不仅仅是一个疯狂的想法。

今天,要遵循这样的路线,您可以创建一个与DynAsm的 JNI 绑定(仅此一项可能不是小任务)并在运行时使用它来组装。如果您愿意在 java 上使用 scala,您甚至可以相对轻松地创建一个 DSL ala 软线,它将在后台生成汇编源代码并将其传递给 DynASM。听起来很有趣:-) 没有理由再无聊了。

于 2013-01-04T12:44:25.977 回答
0

你在寻找像 jasmin 项目这样的东西吗?因为,出于某种原因,minijava 总是让我想起 jasmin 解析器......

于 2013-01-03T21:26:44.060 回答