您好我正在尝试使用内联汇编来执行简单的Java代码。在asm过程中我想对java变量做一些操作,这里是我的代码
public class Add {
public static void main(String[] args) {
int a=5;
int b=4;
int c=0;
System.loadLibrary("native");
(new Add()).nativeCode();
}
public native void nativeCode();
}
和Asm程序
global _Java_Add_nativeCode
section .text
_Java_Add_nativeCode:
mov eax, a
mov ebx, b
add eax,ebx
mov c,eax
我正在尝试对C ++中的变量进行操作,但是Nasm给了我一个错误符号'a'未定的等等。有没有办法对ASM过程中java中声明的变量进行操作?
答案 0 :(得分:1)
a
是一个虚拟变量。目前执行此操作的唯一方法是通过JNI在C中实现方法调用。我建议你使用javah生成C代码并使用asm
。注意:这比在Java中做同样的事情要慢很多倍(而且时间更复杂)
在Java 9中,您可以使用用户定义的内在函数。这将允许您将程序集添加到Java中以使用Java当前不像XMM那样使用的指令。