Jasmin中带下划线与不带下划线的iload指令差异及使用疑问
Jasmin中iload指令的正确使用方式
首先明确:iload 1和iload_1在JVM规范里是等价的,功能完全一致——都是把局部变量表中索引为1的int类型变量压入操作数栈。
指令规则
- 对于局部变量索引0-3,JVM提供了两种指令形式:短格式的
iload_0/iload_1/iload_2/iload_3,以及通用格式的iload 0/iload 1/iload 2/iload 3,Jasmin对这两种写法都支持。 - 对于局部变量索引≥4,只能用通用格式
iload n,因为JVM没有iload_4、iload_5这类短格式指令,写了会直接报错。
你运行出错的原因分析
你说全用带下划线或全不带下划线都不行,大概率是踩了这两个坑:
- 全用带下划线时,可能写了
iload_4、iload_5这类不存在的指令,Jasmin无法识别; - 全用通用格式时,可能引用了超出当前方法局部变量表范围的索引(比如方法只定义了3个局部变量,却用了
iload 4)。
正确示例
假设你的方法局部变量表有5个int类型变量,正确的写法如下:
// 索引0-3,两种写法都合法 iload_0 iload 1 iload_2 iload 3 // 索引4及以上,只能用通用格式 iload 4
内容的提问来源于stack exchange,提问作者João Reis
相关产品推荐
相关产品推荐

