大学でのタスクのために、Java コードでアセンブリ インジェクションを記述する必要があります。ネイティブ関数を持つクラスがあります
import java.io.File;
public class AsmOR {
static {
String path = System.getProperty("user.dir");
System.load(path+File.separator+"mydll.dll");
}
public static native int or(int num1, int num2);
}
次に、コマンド javac -h AsmOR.java を使用してクラスをコンパイルし、ヘッダーを取得しました。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_user_AsmFun_AsmOR */
#ifndef _Included_org_user_AsmFun_AsmOR
#define _Included_org_user_AsmFun_AsmOR
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_user_AsmFun_AsmOR
* Method: or
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_org_user_AsmFun_AsmOR_or
(JNIEnv *, jclass, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
このアセンブリ コードをアセンブリを使用しましたが、関数の r8 および r9 パラメータがなぜなのかわかりません。javadoc を読み込もうとしましたが、だめです。
global Java_org_user_AsmFun_AsmOR_or
Java_org_user_AsmFun_AsmOR_or:
mov rax,r8
or rax,r9
ret 32
end
また、ダブルサムにコプロセッサを使いたかったのですが、うまくいきません。
fld dword [r8]
fld dword [r9]
fadd st0,st1
fistp dword [rax]
ret 32
これを行う方法と、システムの 32 ビット バージョンと 64 ビット バージョンを区別し、バージョンに応じて dll ライブラリをロードする方法は?