Based on Bill Verners' Inside the Java Virtual Machine, McGraw Hill Companies, 1997

i2b - Convert int to byte
  opcode:  145 (0x91)
  usage: i2b
  stack before: ..., value
stack after: ..., result
 
description: The top word of the operand stack, value, must be an int. To execute the i2b instruction, the Java Virtual Machine pops int value from the operand stack, truncates the int to a byte, sign-extends the result back to an int, and pushes the int result.

i2c - Convert int to char
  opcode:  146 (0x92)
  usage: i2c
  stack before: ..., value
stack after: ..., result
 
description: The top word of the operand stack, value, must be an int. To execute the i2c instruction, the Java Virtual Machine pops int value from the operand stack, truncates the int to a char, zero-extends the result back to an int, and pushes the int result.

i2d - Convert int to double
  opcode:  135 (0x87)
  usage: i2d
  stack before: ..., value
stack after: ..., result.word1, result.word2
 
description: The top word of the operand stack, value, must be an int. To execute the i2d instruction, the Java Virtual Machine pops int value from the operand stack, sign-extends the int to a double, and pushes the double result.

i2f - Convert int to float
  opcode:  134 (0x86)
  usage: i2f
  stack before: ..., value
stack after: ..., result
 
description: The top word of the operand stack, value, must be an int. To execute the i2f instruction, the Java Virtual Machine pops int value from the operand stack, converts the int to a float using the IEEE round-to-nearest mode, and pushes the float result.

i2l - Convert int to long
  opcode:  133 (0x85)
  usage: i2l
  stack before: ..., value
stack after: ..., result.word1, result.word2
 
description: The top word of the operand stack, value, must be an int. To execute the i2l instruction, the Java Virtual Machine pops int value from the operand stack, sign-extends the int to a long, and pushes the long result.

i2s - Convert int to short
  opcode:  147 (0x93)
  usage: i2s
  stack before: ..., value
stack after: ..., result
 
description: The top word of the operand stack, value, must be an int. To execute the i2s instruction, the Java Virtual Machine pops int value from the operand stack, truncates the int to a short, sign-extends the result back to an int, and pushes the int result.

iadd - Add ints
  opcode:  96 (0x60)
  usage: iadd
  stack before: ..., value1, value2
stack after: ..., result
 
description: The top two words of the operand stack must be two ints. To execute the iadd instruction, the Java Virtual Machine pops value1 and value2, adds them, and pushes the int result on the operand stack.

iaload - Load int from array
  opcode:  46 (0x2e)
  usage: iaload
  stack before: ..., arrayref, index
stack after: ..., value
 
description: The Java Virtual Machine takes two top words from the stack. Arrayref must a reference to an integer array  and i must be an integer. As a result virtual machine pushes integer value from index i of array arrayref on the stack.
exceptions: NullPointerException - arrayref is null
ArrayIndexOutOfBoundsException - i is not a legal array index

iand - Perform boolean AND on ints
  opcode:  126 (0x7e)
  usage: iand
  stack before: ..., value1, value2
stack after: ..., result
 
description: Two top words on the stack must be integers. The Java Virtual Machine pops value1 and value2, bitwise ANDs them and pushes integer result on the stack.

iastore - Store into int array
  opcode:  79 (0x4f)
  usage: iastore
  stack before: ..., arrayref, index, value
stack after: ...
 
description: The Java Virtual Machine stores byte value in index i of array arrayref. Arrayref must be an integer array, i must be an integer and value must be an integer.
exceptions: NullPointerException - arrayref is null
ArrayIndexOutOfBoundsException - i is not a legal array index
ArrayStoreException - value is not an integer

iconst_0 - Push int constant 0
  opcode:  3 (0x3)
  usage: iconst_0
  stack before: ...
stack after: ..., 0
 
description: The Java Virtual Machine pushes constant integer 0 on the stack.

iconst_1 - Push int constant 1
  opcode:  4 (0x4)
  usage: iconst_1
  stack before: ...
stack after: ..., 1
 
description: The Java Virtual Machine pushes constant integer 1 on the stack.

iconst_2 - Push int constant 2
  opcode:  5 (0x5)
  usage: iconst_2
  stack before: ...
stack after: ..., 2
 
description: The Java Virtual Machine pushes constant integer 2 on the stack.

iconst_3 - Push int constant 3
  opcode:  6 (0x6)
  usage: iconst_3
  stack before: ...
stack after: ..., 3
 
description: The Java Virtual Machine pushes constant integer 3 on the stack.

iconst_4 - Push int constant 4
  opcode:  7 (0x7)
  usage: iconst_4
  stack before: ...
stack after: ..., 4
 
description: The Java Virtual Machine pushes constant integer 4 on the stack.

 iconst_5 - Push int constant 5
  opcode: 8 (0x8)
  usage: iconst_5
  stack before:  ...
stack after: ..., 5
 
description: The Java Virtual Machine pushes constant integer 5 on the stack.

iconst_m1 - Push int constant -1
  opcode:  2 (0x2)
  usage: iconst_m1
  stack before: ...
stack after: ..., -1
 
description: The Java Virtual Machine pushes constant integer -1 on the stack.

idiv - Divide ints
  opcode:  108 (0x6c)
  usage: idiv
  stack before: ..., value1, value2
stack after: ..., result
 
description: The top two words of the operand stack must be two ints. To execute the idiv instruction, the Java Virtual Machine pops value1 and value2, divides them, and pushes the int result on the operand stack.

ifeq - Goto if equal to 0
  opcode:  153 (0x99)
  usage: ifeq label
  stack before: ..., value
stack after: ...
 
description: Instruction checks whether value is equal to 0 and jumps to label, if the answer is true. Value must be of number type.

ifge - Goto if greater than or equal to 0
  opcode:  156 (0x9c)
  usage: ifge label
stack before: ..., value
stack after: ...
 
description: Instruction checks whether value is equal to or greater than 0 and jumps to label, if the answer is true. Value must be of number type.

ifgt - Branch if greater than 0
  opcode:  157 (0x9d)
  usage: ifgt label
  stack before: ..., value
stack after: ...
 
description: Instruction checks whether value is greater than 0 and jumps to label, if the answer is true. Value must be of number type.

ifle - Branch if less than or equal to 0
  opcode:  158 (0x9e)
  usage: ifle label
  stack before: ..., value
stack after: ...
 
description: Instruction checks whether value is equal to or less than 0 and jumps to label, if the answer is true. Value must be of number type.

iflt - Branch if less than 0
  opcode:  155 (0x9b)
  usage: iflt, branchbyte1, branchbyte2
  stack before: ..., value
stack after: ...
 
description: Instruction checks whether value is less than 0 and jumps to label, if the answer is true. Value must be of number type.

ifne - Branch if not equal to 0
  opcode:  154 (0x9a)
  usage: ifne label
  stack before: ..., value
stack after: ...
 
description: Instruction checks whether value is not equal to 0 and jumps to label, if the answer is true. Value must be of number type.

ifnonnull - Branch if not null
  opcode:  199 (0xc7)
  usage: ifnonnull label
  stack before: ..., value
stack after: ...
 
description: Instruction checks whether value is not null and jumps to label, if the answer is true. Value must be a reference.

ifnull - Branch if null
  opcode:  198 (0xc6)
  usage: ifnull label
  stack before: ..., value
stack after: ...
 
description: Instruction checks whether value is null and jumps to label, if the answer is true. Value must be a reference.

if_acmpeq - Branch if object references are equal
  opcode:  165 (0xa5)
  usage: if_acmpeq label
  stack before: ..., value1, value2
stack after: ...
 
description: Instruction checks whether value1 and value2 are equal and jumps to label if answer is true. Value1 and value2 must be object references. The Java Virtual Machine uses == operator to compare objects (not equals() method!).

if_acmpne - Branch if object references not equal
  opcode:  166 (0xa6)
  usage: if_acmpne label
  stack before: ..., value1, value2
stack after: ...
 
description: Instruction checks whether value1 and value2 are not equal and jumps to label if answer is true. Value1 and value2 must be object references. The Java Virtual Machine uses != operator to compare objects (not !equals() method!).

if_icmpeq - Branch if ints equal
  opcode:  159 (0x9f)
  usage: if_icmpeq label
  stack before: ..., value1, value2
stack after: ...
 
description: Instruction checks whether value1 and value2 are equal and jumps to label if answer is true. Value1 and value2 must be of primitive number type.

if_icmpge - Branch if int greater than or equal to other int
  opcode:  162 (0xa2)
  usage: if_icmpge label
  stack before: ..., value1, value2
stack after: ...
 
description: Instruction checks whether value1 is greater than or equal to value2 and jumps to label if answer is true. Value1 and value2 must be of primitive number type.

if_icmpgt - Branch if int greater than other int
  opcode:  163 (0xa3)
  usage: if_icmpgt label
  stack before: ..., value1, value2
stack after: ...
 
description: Instruction checks whether value1 is greater than value2 and jumps to label if answer is true. Value1 and value2 must be of primitive number type.

if_icmple - Branch if int less than or equal to other int
  opcode:  164 (0xa4)
  usage: if_icmple label
  stack before: ..., value1, value2
stack after: ...
 
description: Instruction checks whether value1 is less than or equal to value2 and jumps to label if answer is true. Value1 and value2 must be of primitive number type.

if_icmplt - Branch if int less than other int
  opcode:  161 (0xa1)
  usage: if_icmplt label
  stack before: ..., value1, value2
stack after: ...
 
description: Instruction checks whether value1 is less than value2 and jumps to label if answer is true. Value1 and value2 must be of primitive number type.

if_icmpne - Branch if ints not equal
  opcode:  160 (0xa0)
  usage: if_icmpne label
  stack before: ..., value1, value2
stack after: ...
 
description: Instruction checks whether value1 and value2 are not equal and jumps to label if answer is true. Value1 and value2 must be of primitive number type.

iinc - Increment int local variable by constant.
  opcode:  132 (0x84)
  usage: iinc index const
  stack: No change
 
description: Instruction increases local variable index by constant const. Value of local variable index must be an integer. Const must also be an integer.

iload - Load int from local variable
  opcode:  21 (0x15)
  usage: iload index
  stack before: ...
stack after: ..., value
 
description: The Java Virtual Machine loads value value from local variable index (unsigned 8-bit) and pushes it on the stack. The value stored in local variable index must be an integer.

iload_0 - Load int from local variable 0
  opcode:  26 (0x1a)
  usage: iload_0
  stack before: ...
stack after: ..., value
 
description: The Java Virtual Machine loads value value from local variable 0 and pushes it on the stack. The value stored in local variable index must be an integer.

iload_1 - Load int from local variable 1
  opcode:  27 (0x1b)
  usage: iload_1
  stack before: ...
stack after: ..., value
 
description: The Java Virtual Machine loads value value from local variable 1 and pushes it on the stack. The value stored in local variable index must be an integer.

iload_2 - Load int from local variable 2
  opcode:  28 (0x1c)
  usage: iload_2
  stack before: ...
stack after: ..., value
 
description: The Java Virtual Machine loads value value from local variable 2 and pushes it on the stack. The value stored in local variable index must be an integer.

iload_3 - Load int from local variable 3
  opcode:  29 (0x1d)
  usage: iload_3
  stack before: ...
stack after: ..., value
 
description: The Java Virtual Machine loads value value from local variable 3 and pushes it on the stack. The value stored in local variable index must be an integer.

imul - Multiply ints
  opcode:  104 (0x68)
  usage: imul
  stack before: ..., value1, value2
stack after: ..., result
 
description: The top two words of the operand stack must be two ints. To execute the imul instruction, the Java Virtual Machine pops value1 and value2, multiplies them, and pushes the int result on the operand stack.

ineg - Negate int
  opcode:  116 (0x74)
  usage: ineg
  stack before: ..., value
stack after: ..., result
 
description: The top word of the operand stack must be an int. To execute the ineg instruction, the Java Virtual Machine pops value from the operand stack, negates it and pushes the int result on the operand stack.

instanceof - Determine if an object is of given type
  opcode:  193 (0xc1)
  usage: instanceof class
  stack before: ..., objectref
stack after: ..., result
 
description: If objectref is not null and the object pointed to by objectref is an "instance of" the resolved type, the virtual machine pushes an int one result onto the operand stack. Otherwise, the virtual machine machine pushes an int zero result onto the operand stack.

invokeinterface - Invoke interface method
  opcode:  185 (0xb9)
  usage: invokeinterface method-spec num-args
  stack before: ..., objectref, [arg1, [arg2 ...]]
stack after: ...
  This instruction invokes method from interface objectref with arguments arg*. A method specification is formed of three parts: the characters before the last '/' form the class name. The characters between last '/' and '(' are the method name. The rest of the string is the arguments and return value types descriptors (f.e. foo/bar/ClassName/methodName(Ljava/lang/String;)V). An integer num-args indicates how many arguments the method takes.
description: This instruction invokes method from interface objectref with arguments arg*. A method specification is formed of three parts: the characters before the last '/' form the class name. The characters between last '/' and '(' are the method name. The rest of the string is the arguments and return value types descriptors (f.e. foo/bar/ClassName/methodName(Ljava/lang/String;)V). An integer num-args indicates how many arguments the method takes.

invokenonvirtual -
  opcode:  183 (0xb7)
  usage: invokenonvirtual method-spec
  stack before: , objectref, [arg1, [arg2 ...]]
stack after: ...
 
description: This instruction invokes nonvirtual method from object objectref with arguments arg*. A method specification is formed of three parts: the characters before the last '/' form the class name. The characters between last '/' and '(' are the method name. The rest of the string is the arguments and return value types descriptors. (f.e. foo/bar/ClassName/methodName(Ljava/lang/String;)V)

invokestatic - Invoke a class (static) method
  opcode:  184 (0xb8)
  usage: invokestatic method-spec
  stack before: ..., [arg1, [arg2 ...]
stack after: ...
 
description: This instruction invokes static method from object objectref with arguments arg*. A method specification is formed of three parts: the characters before the last '/' form the class name. The characters between last '/' and '(' are the method name. The rest of the string is the arguments and return value types descriptors. (f.e. foo/bar/ClassName/methodName(Ljava/lang/String;)V)

invokevirtual - Invoke instance method,dispatch based on an objectís class at run-time
  opcode:  182 (0xb6)
  usage: invokevirtual method-spec
  stack before: ..., objectref, [arg1, [arg2 ...]]
stack after: ...
 
description: This instruction invokes a method from object objectref with arguments arg*. A method specification is formed of three parts: the characters before the last '/' form the class name. The characters between last '/' and '(' are the method name. The rest of the string is the arguments and return value types descriptors. (f.e. foo/bar/ClassName/methodName(Ljava/lang/String;)V )

ior - Perform boolean OR on ints
  opcode:  128 (0x80)
  usage: ior
  stack before: ..., value1, value2
stack after: ..., result
 
description:

The top two words of the operand stack, value1 and value2, must be integers. To execute the ior instruction, the Java Virtual Machine pops value1 and value2, bitwise ORs them, and pushes the int result.

irem - Calculate remainder of division of ints
  opcode:  112 (0x70)
  usage: irem
  stack before: ..., value1, value2
stack after: ..., result
 
description: The top two words of the operand stack, value1 and value2, must be ints. To execute the irem instruction, the Java Virtual Machine pops value1 and value2, calculates the integer remainder, and pushes the int result. The integer remainder equals value1 - (value1 / value2) * value2.

ireturn - Return int from method
  opcode:  172 (0xac)
  usage: ireturn
  stack before: ..., value
stack after: [empty]
 
description: ireturn must be invoked inside a method of return type being an int. It returns a top word from a stack and leaves the method. value must be an int

ishl - Perform left shift on int
  opcode:  120 (0x78)
  usage: ishl
  stack before: ..., value1, value2
stack after: ..., result
 
description: The top two words of the operand stack, value1 and value2, must be ints. To execute the ishl instruction, the Java Virtual Machine pops value1 and value2, shifts value1 left by the number of bits specified in the 5 lowest order bits of value2 (from 0 to 31 bit positions), and pushes the int result.

ishr - Perform arithmetic right shift on int
  opcode:  122 (0x7a)
  usage: ishr
  stack before: ..., value1, value2
stack after: ..., result
 
description: The top two words of the operand stack, value1 and value2, must be ints. To execute the ishr instruction, the Java Virtual Machine pops value1 and value2, shifts value1 right with sign extension by the number of bits specified in the 5 lowest order bits of value2 (from 0 to 31 bit positions), and pushes the int result.

istore - Store int into local variable
  opcode:  54 (0x36)
  usage: istore index
  stack before: ..., value
stack after: ...
 
description: The instruction takes parameter index and value from the stack. Top word on the stack must be an integer. Index must be an unsigned 8-bit number. As a result the Java Virtual Machine stores value into local variable index.

istore_0 - Store int into local variable 0
  opcode:  59 (0x3b)
  usage: istore_0
  stack before: ..., value
stack after: ...
 
description: Top word on the stack must be an integer. The Java Virtual Machine stores value into local variable 0.

istore_1 - Store int into local variable 1
  opcode:  60 (0x3c)
  usage: istore_1
  stack before: ..., value
stack after: ...
 
description: Top word on the stack must be an integer. The Java Virtual Machine stores value into local variable 1.

istore_2 - Store int into local variable 2
  opcode:  61 (0x3d)
  usage: istore_2
  stack before: ..., value
stack after: ...
 
description: Top word on the stack must be an integer. The Java Virtual Machine stores value into local variable 2.

istore_3 - Store int into local variable 3
  opcode:  62 (0x3e)
  usage: istore_3
  stack before: ..., value
stack after: ...
 
description: Top word on the stack must be an integer. The Java Virtual Machine stores value into local variable 3.

isub - Subtract ints
  opcode:  100 (0x64)
  usage: isub
  stack before: ..., value1, value2
stack after: ..., result
 
description: The top two words of the operand stack must be two ints. To execute the isub instruction, the Java Virtual Machine pops value1 and value2, substracts them, and pushes the int result on the operand stack.

iushr - Perform logical right shift on int
  opcode:  124 (0x7c)
  usage: iushr
  stack before: ..., value1, value2
stack after: ..., result
 
description: The top two words of the operand stack, value1 and value2, must be ints. To execute the iushr instruction, the Java Virtual Machine pops value1 and value2, shifts value1 right with zero extension by the number of bits specified in the 5 lowest order bits of value2 (from 0 to 31 bit positions), and pushes the int result.

ixor - Perform boolean XOR on ints
  opcode:  130 (0x82)
  usage: ixor
  stack before: ..., value1, value2
stack after: ..., result
 
description: The top two words of the operand stack, value1 and value2, must be integers. To execute the ior instruction, the Java Virtual Machine pops value1 and value2, bitwise XORs them, and pushes the int result.