Java内联汇编传输变量

时间:2015-12-12 00:06:14

标签: java assembly inline

您好我正在尝试使用内联汇编来执行简单的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中声明的变量进行操作?

1 个答案:

答案 0 :(得分:1)

a是一个虚拟变量。目前执行此操作的唯一方法是通过JNI在C中实现方法调用。我建议你使用javah生成C代码并使用asm。注意:这比在Java中做同样的事情要慢很多倍(而且时间更复杂)

在Java 9中,您可以使用用户定义的内在函数。这将允许您将程序集添加到Java中以使用Java当前不像XMM那样使用的指令。