1

CでNASMを使用するのと同様の方法でアセンブリプログラミングを実行できるかどうか、私は親切に興味がありました。

Googleですばやく検索して、JVMでアセンブリ言語プログラミングを実行できるかどうかを確認したところ、いくつかの結果を見つけて驚いた。

誰かが以前にこのようなことをしようとしたことがありますか?

また、ClojureまたはScalaのサポートアセンブリサポートがあるかどうか疑問に思っています。

Javaからのアセンブリ言語プログラミングの呼び出し

minijavac:英語ではありませんが、何らかのNASMサポートを使用しているようです。

4

4 に答える 4

2

アセンブリは通常 C で使用されるため、a) C が生成しない命令にアクセスしたり、b) 低レベルのパフォーマンス チューニングを行うことができます。

バイトコードはJava用に設計されているため、

  • 生成しない有用なバイトコード命令はありません
  • JVM は、コンパイラによって生成されたバイト コードで一般的なパターンを探し、それらを最適化します。これは、バイトコードを自分で書いた場合、コンパイラが生成するものと同じでない限り、最適化されていない、つまり遅くなる可能性が高いことを意味します。
于 2013-01-03T21:18:57.523 に答える
2

インライン アセンブリを含む JNI ライブラリを C で記述します。

理論的には、純粋なアセンブリでJNI 準拠のライブラリを作成できますが、わざわざ書く必要はありません。

于 2013-01-03T22:37:03.790 に答える
1

別の解決策を指摘したいと思います.Javaプログラムから実行時にアセンブリコードを生成します。少し前に、c++ で書かれた softwire というプロジェクトがありました。(メソッドと演算子の) オーバーロードを (アブ) 使用して、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 に答える