使用jsr指令的Java递归
我正在使用 Jasmin Java 汇编器来编译玩具语言。但是,当我使用 jsr 指令递归回子例程,并使用 java 运行 Jasmin 的输出时,我收到错误“递归调用 jsr 条目”。这是 Jasmin 代码(它正在计算 5!(我省略了类定义;所有这些都在主方法体中)):
f:
swap
istore 2
iload 2
ifeq label0
iload 2
iload 2
ldc 1
isub
jsr f
istore 1
istore 2
iload 1
iload 2
imul
goto label1
label0:
ldc 1
label1:
swap
astore 0
ret 0
main:
ldc 5
jsr f
istore 1
iload 1
I am using the Jasmin Java assembler to compile a toy language. But when I use the jsr instruction to recurse back into a subroutine, and run the output of Jasmin using java, I get the error "Recursive call to jsr entry". Here is the Jasmin code (it's computing 5! (I've left out the class definitions; all this is in the main method body)):
f:
swap
istore 2
iload 2
ifeq label0
iload 2
iload 2
ldc 1
isub
jsr f
istore 1
istore 2
iload 1
iload 2
imul
goto label1
label0:
ldc 1
label1:
swap
astore 0
ret 0
main:
ldc 5
jsr f
istore 1
iload 1
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
§4.8.2 明确禁止递归 jsr JVM 规范:
这主要是为了简化字节码验证器的逻辑,以便它可以确保适当的状态在子程序中保存和恢复。
Recursive jsr's are explicitly forbidden by §4.8.2 of the JVM spec:
This is primarily to simplify the logic of the bytecode verifier so that it can ensure that appropriate state is saved and restored in a subroutine.