「Java」- 虚拟机指令

tableswitch 0xaa(170)

用于switch条件跳转,case的值是连续的(可变长度指令)

tableswitch

<0-3 byte pad> ———————– 使得defaultbyte1与方法的的起始地址之间的距离正好是4的倍数。

defaultbyte1 ———————– 默认的跳转地址。
defaultbyte2
defaultbyte3
defaultbyte4

lowbyte1 ——————— case语句中的最小值。
lowbyte2
lowbyte3
lowbyte4

highbyte1 ———————- case语句中的最大值。
highbyte2
highbyte3
highbyte4

jump offsets… ———————- 零基址跳转表。

32位值的计算方法为(byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4 。

index – low + tableswitch的地址 = 跳转地址

Operand Stack

…, index →