据的存储格式如下:
0003 // 表类型:静态数组数据
0400 // 每个元素的字节数(这个例子是 4
字节的 int 型)
0300 0000 // 元素个数
0100 0000 // 元素 #0:int 1
0200 0000 // 元素 #1:int 2
0300 0000 // 元素 #2:int 3
27 throw vx
抛出异常对象,异常对象的引用
在 vx 寄存器。
2700 - throw v0
抛出异常对象,异常对象的引用在 v0 寄存器。
28
goto
目标
通过短偏移量
注
2
无条件跳转到
目
标
。
28F0 - goto 0005 // -0010
跳 转 到 当 前 位 置 -16 ( hex 10 ) 的 位
置,0005 是目标指令标签。
29
goto/16
目标
通过 16 位偏移量
注
2
无条件跳转
到
目标
。
2900 0FFE - goto/16 002f // -01f1
跳转到当前位置-1F1H 的位置,002f 是目标
指令标签。
2A
goto/32
目标
通过 32 位偏移量
注
2
无条件跳转
到
目标
。
2B
packed-switch
vx,
索引表偏移
量
实现一个 switch 语句,case
常量是连续的。这个指令使用
索
引 表
, vx 是 在 表 中 找 到 具 体
case 的指令偏移量的索引,如
果无法在表中找到 vx 对应的索
引 将继 续执 行下 一 个指 令 (即
default case)。
2B02 0C00 0000 - packed-switch v2,
000c // +000c
根据 v2 寄存器中的值执行 packed switch,
索引表的位置是当前指令位置+0CH,表如下所
示:
0001 // 表类型:packed switch 表
0300 // 元素个数
0000 0000 // 基础元素
0500 0000 0: 00000005 // case 0:
+00000005
0700 0000 1: 00000007 // case 1:
+00000007
0900 0000 2: 00000009 // case 2:
+00000009
2C sparse-switch
vx,
查询表偏移
量
实现一个 switch 语句,case
常量是非连续的。这个指令使用
查询表
,用于表示 case 常量和
每个 case 常量的偏移量。如果
vx 无法在表中匹配将继续执行下
一 个 指 令 ( 即 default
case)。
2C02 0c00 0000 - sparse-switch v2,
000c // +000c
根据 v2 寄存器中的值执行 sparse switch
,查询表的位置是当前指令位置+0CH,表如下
所示:
0002 // 表类型:sparse switch 表
0300 // 元素个数
9cff ffff // 第一个 case 常量: -100
fa00 0000 // 第二个 case 常量: 250
e803 0000 // 第三个 case 常量: 1000
0500 0000 // 第一个 case 常量的偏移量:
+5
0700 0000 // 第二个 case 常量的偏移量:
+7
0900 0000 // 第三个 case 常量的偏移量: