Jvm Jasmin调用本地方法导致VerifyError

Jvm Jasmin调用本地方法导致VerifyError,jvm,jasmin,Jvm,Jasmin,我试图调用一个本地方法pow(),如下所示 我的班级看起来像这样 .class public helloworld .super java/lang/Object .method public pow(II)I ... .end method .method public foo()V ... ldc 1 ldc 2 invokevirtual helloworld/pow(II)I return .end method 但是,这会导致以下错

我试图调用一个本地方法pow(),如下所示

我的班级看起来像这样

.class public helloworld
.super java/lang/Object

.method public pow(II)I
    ...
.end method

.method public foo()V
    ...
    ldc 1
    ldc 2
    invokevirtual helloworld/pow(II)I
    return
.end method
但是,这会导致以下错误:

java.lang.VerifyError: (class: helloworld, method: foo signature: ()V) Unable to pop operand off an empty stack
我做错了什么

编辑:我的完整代码如下。 请注意,pow()是一个将第一个值提升为第二个值幂的方法:

val pow (val v, val pow) {

    val result = v;

    for (val i = 1; i < pow; i++ ) {
        result = result * v;
    }

    return result;
}
val-pow(val-v,val-pow){
val结果=v;
对于(vali=1;i
全班:

.class public helloworld
.super java/lang/Object

.method public <init>()V
aload_0
invokenonvirtual java/lang/Object/<init>()V
return
.end method

.method public pow(II)I
.limit stack 9
.limit locals 5
iload 1
istore 3
ldc 1
istore 4
label16:
iload 4
iload 2
if_icmplt label22
iconst_0
goto label24
label22:
iconst_1
label24:
ifeq label36
goto label30
label27:
iinc 4 1
goto label16
label30:
iload 3
iload 1
imul
istore 3
goto label27
label36:
ireturn
.end method

.method public foo()V
.limit stack 3
.limit locals 3
ldc 1
ldc 2
invokevirtual helloworld/pow(II)I
return
.end method

.method public static main([Ljava/lang/String;)V
.limit stack 3
.limit locals 2
return
.end method
.class公共helloworld
.super java/lang/Object
.public()方法V
阿洛德0
invokenvirtualjava/lang/Object/()V
返回
.结束方法
.方法公共pow(II)I
.限制堆栈9
.限制本地人5
伊洛德1号
史前3
最不发达国家1
史前4
标签16:
伊洛德4号
伊洛德2号
if_icmplt label22
iconst_0
goto label24
标签22:
iconst_1
标签24:
ifeq label36
goto label30
标签27:
iinc 4 1
goto label16
标签30:
伊洛德3号
伊洛德1号
伊穆尔
史前3
goto label27
标签36:
我返回
.结束方法
.方法public foo()V
.限制堆栈3
.限制本地人3
最不发达国家1
最不发达国家2
调用虚拟helloworld/pow(II)I
返回
.结束方法
.method public static main([Ljava/lang/String;)V
.限制堆栈3
.限制本地人2
返回
.结束方法

调用实例方法时,也必须将对象放在堆栈上

aload 0
ldc 1
ldc 2
invokevirtual helloworld/pow(II)I

为什么不发布完整的代码?我认为错误在您忽略的部分。我不认为这是问题所在,但我将其粘贴到了原始帖子的下方。您知道如何使用数组作为参数调用该方法吗?它适用于整数,但不适用于数组似乎: