IL Bytecode Other bytes Stack
[before]→[after]
Description  
حسابی و منطقی  
add dadd   value1, value2 → result adds two doubles  
fadd   value1, value2 → result adds two floats  
iadd   value1, value2 → result adds two ints together  
ladd   value1, value2 → result add two longs  
div ddiv   value1, value2 → result divides two doubles  
fdiv   value1, value2 → result divides two floats  
idiv   value1, value2 → result divides two integers  
ldiv   value1, value2 → result divide two longs  
mul dmul   value1, value2 → result multiplies two doubles  
fmul   value1, value2 → result multiplies two floats  
imul   value1, value2 → result multiply two integers  
lmul   value1, value2 → result multiplies two longs  
neg dneg   value → result negates a double  
fneg   value → result negates a float  
ineg   value → result negate int  
lneg   value → result negates a long  
rem drem   value1, value2 → result gets the remainder from a division between two doubles  
frem   value1, value2 → result gets the remainder from a division between two floats  
irem   value1, value2 → result logical int remainder  
lrem   value1, value2 → result remainder of division of two longs  
sub dsub   value1, value2 → result subtracts a double from another  
fsub   value1, value2 → result subtracts two floats  
isub   value1, value2 → result int subtract  
lsub   value1, value2 → result subtract two longs  
and iand   value1, value2 → result performs a bitwise and on two integers  
land   value1, value2 → result bitwise and of two longs  
or ior   value1, value2 → result bitwise int or  
lor   value1, value2 → result bitwise or of two longs  
xor ixor   value1, value2 → result int xor  
lxor   value1, value2 → result bitwise exclusive or of two longs  
انتقال داده  
  bipush byte → value pushes a byte onto the stack as an integer value  
pop pop2   {value2, value1} → discards the top two values on the stack (or one value, if it is a double or long)  
pop   value → discards the top value on the stack  
dup dup   value → value, value duplicates the value on top of the stack  
dup2   {value2, value1} → {value2, value1}, {value2, value1} duplicate top two stack words (two values, if value1 is not double nor long; a single value, if value1 is double or long)  
  dup2_x2   {value4, value3}, {value2, value1} → {value2, value1}, {value4, value3}, {value2, value1} duplicate two words and insert beneath fourth word  
  dup2_x1   value3, {value2, value1} → {value2, value1}, value3, {value2, value1} duplicate two words and insert beneath third word (see explanation above)  
  dup_x2   value3, value2, value1 → value1, value3, value2, value1 inserts a copy of the top value into the stack two (if value2 is double or long it takes up the entry of value3, too) or three values (if value2 is neither double nor long) from the top  
  dup_x1   value2, value1 → value1, value2, value1 inserts a copy of the top value into the stack two values from the top  
ldloc <uint16 (indx)> dload index → value loads a double value from a local variable #index  
fload index → value loads a float value from a local variable #index  
lload index → value load a long value from a local variable #index  
iload index → value loads an int value from a local variable #index  
ldloc.0 lload_0   → value load a long value from a local variable 0  
dload_0   → value loads a double from local variable 0  
fload_0   → value loads a float value from local variable 0  
iload_0   → value loads an int value from local variable 0  
ldloc.1 lload_1   → value load a long value from a local variable 1  
dload_1   → value loads a double from local variable 1  
fload_1   → value loads a float value from local variable 1  
iload_1   → value loads an int value from local variable 1  
ldloc.2 lload_2   → value load a long value from a local variable 2  
dload_2   → value loads a double from local variable 2  
fload_2   → value loads a float value from local variable 2  
iload_2   → value loads an int value from local variable 2  
ldloc.3 lload_3   → value load a long value from a local variable 3  
dload_3   → value loads a double from local variable 3  
fload_3   → value loads a float value from local variable 3  
iload_3   → value loads an int value from local variable 3  
ldc.i4.0 iconst_0   → 0 loads the int value 0 onto the stack Push 0 onto the stack as int32.
ldc.i4.1 iconst_1   → 1 loads the int value 1 onto the stack  
  iconst_2   → 2 loads the int value 2 onto the stack Push 2 onto the stack as int32.
  iconst_3   → 3 loads the int value 3 onto the stack Push 3 onto the stack as int32.
  iconst_4   → 4 loads the int value 4 onto the stack Push 4 onto the stack as int32.
  iconst_5   → 5 loads the int value 5 onto the stack Push 5 onto the stack as int32.
ldc.i4.m1          or          ldc.i4.M1 iconst_m1   → -1 loads the int value -1 onto the stack Push -1 onto the stack as int32.
ldc.i4.s <int8 (num)>
ldc.i8 <int64 (num)>
ldc.r4 <float32 (num)>
ldc.r8 <float64 (num)>
ldc2_w indexbyte1, indexbyte2 → value pushes a constant #index from a constant pool (double or long) onto the stack (wide index is constructed as indexbyte1 << 8 + indexbyte2)  
ldc index → value pushes a constant #index from a constant pool (String, int or float) onto the stack  
ldc_w indexbyte1, indexbyte2 → value pushes a constant #index from a constant pool (String, int or float) onto the stack (wide index is constructed as indexbyte1 << 8 + indexbyte2)  
  sipush byte1, byte2 → value pushes a short onto the stack  
  fconst_0   → 0.0f pushes 0.0f on the stack  
  fconst_1   → 1.0f pushes 1.0f on the stack  
  fconst_2   → 2.0f pushes 2.0f on the stack  
  dconst_0   → 0.0 pushes the constant 0.0 onto the stack  
  dconst_1   → 1.0 pushes the constant 1.0 onto the stack  
  lconst_0   → 0L pushes the long 0 onto the stack  
  lconst_1   → 1L pushes the long 1 onto the stack  
stloc.0 lstore_0   value → store a long value in a local variable 0  
istore_0   value → store int value into variable 0  
dstore_0   value → stores a double into local variable 0  
fstore_0   value → stores a float value into local variable 0  
stloc.1 lstore_1   value → store a long value in a local variable 1  
istore_1   value → store int value into variable 1  
dstore_1   value → stores a double into local variable 1  
fstore_1   value → stores a float value into local variable 1  
stloc.2 lstore_2   value → store a long value in a local variable 2  
istore_2   value → store int value into variable 2  
dstore_2   value → stores a double into local variable 2  
fstore_2   value → stores a float value into local variable 2  
stloc.3 lstore_3   value → store a long value in a local variable 3  
istore_3   value → store int value into variable 3  
dstore_3   value → stores a double into local variable 3  
fstore_3   value → stores a float value into local variable 3  
stloc <uint16 (indx)> istore index value → store int value into variable #index  
lstore index value → store a long value in a local variable #index  
dstore index value → stores a double value into a local variable #index  
fstore index value → stores a float value into a local variable #index  
شرطی و پرشی  
  dreturn   value → [empty] returns a double from a method  
freturn   value → [empty] returns a float  
return   → [empty] return void from method  
ireturn   value → [empty] returns an integer from a method  
lreturn   value → [empty] returns a long value  
br.s goto branchbyte1, branchbyte2 [no change] goes to another instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2) Branch to target, short form.
br goto_w branchbyte1, branchbyte2, branchbyte3, branchbyte4 [no change] goes to another instruction at branchoffset (signed int constructed from unsigned bytes branchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4)  
beq <int32 (target)> if_icmpeq branchbyte1, branchbyte2 value1, value2 → if ints are equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
bne.un <int32 (target)> if_icmpne branchbyte1, branchbyte2 value1, value2 → if ints are not equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
blt <int32 (target)> if_icmplt branchbyte1, branchbyte2 value1, value2 → if value1 is less than value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
bge <int32 (target)> if_icmpge branchbyte1, branchbyte2 value1, value2 → if value1 is greater than or equal to value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
bgt <int32 (target)> if_icmpgt branchbyte1, branchbyte2 value1, value2 → if value1 is greater than value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
ble <int32 (target)> if_icmple branchbyte1, branchbyte2 value1, value2 → if value1 is less than or equal to value2, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
brzero <int32 (target)> ifeq branchbyte1, branchbyte2 value → if value is 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
   
brfalse <int32 (target)>  
brtrue.s <int8 (target)> ifne branchbyte1, branchbyte2 value → if value is not 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
brinst <int32 (target)> ifnonnull branchbyte1, branchbyte2 value → if value is not null, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
brnull <int32 (target)> ifnull branchbyte1, branchbyte2 value → if value is null, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
  dcmpg   value1, value2 → result compares two doubles  
dcmpl   value1, value2 → result compares two doubles  
fcmpg   value1, value2 → result compares two floats  
fcmpl   value1, value2 → result compares two floats  
lcmp   value1, value2 → result compares two longs values  
  iflt branchbyte1, branchbyte2 value → if value is less than 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
  ifge branchbyte1, branchbyte2 value → if value is greater than or equal to 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
  ifgt branchbyte1, branchbyte2 value → if value is greater than 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
  ifle branchbyte1, branchbyte2 value → if value is less than or equal to 0, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)  
  jsr branchbyte1, branchbyte2 → address jump to subroutine at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2) and place the return address on the stack  
  jsr_w branchbyte1, branchbyte2, branchbyte3, branchbyte4 → address jump to subroutine at branchoffset (signed int constructed from unsigned bytes branchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4) and place the return address on the stack  
switch <uint32, int32,int32 (t1..tN)> tableswitch [0-3 bytes padding], defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, lowbyte1, lowbyte2, lowbyte3, lowbyte4, highbyte1, highbyte2, highbyte3, highbyte4, jump offsets... index → continue execution from an address in the table at offset index  
  lookupswitch <0-3 bytes padding>, defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, npairs1, npairs2, npairs3, npairs4, match-offset pairs... key → a target address is looked up from a table using a key and execution continues from the instruction at that address  
  ret index [No change] continue execution from address taken from a local variable #index (the asymmetry with jsr is intentional)  
سایر  
conv.r4 d2f   value → result converts a double to a float  
i2f   value → result converts an int into a float  
l2f   value → result converts a long to a float  
conv.i4 d2i   value → result converts a double to an int  
f2i   value → result converts a float to an int  
l2i   value → result converts a long to a int  
conv.i8 d2l   value → result converts a double to a long  
f2l   value → result converts a float to a long  
i2l   value → result converts an int into a long  
conv.r8 f2d   value → result converts a float to a double  
i2d   value → result converts an int into a double  
l2d   value → result converts a long to a double  
conv.u1 i2b   value → result converts an int into a byte  
conv.i1 i2c   value → result converts an int into a character  
conv.i2 i2s   value → result converts an int into a short  
  iinc index, const [No change] increment local variable #index by signed byte const  
  ishl   value1, value2 → result int shift left  
  ishr   value1, value2 → result int arithmetic shift right  
  iushr   value1, value2 → result int logical shift right  
  lshl   value1, value2 → result bitwise shift left of a long value1 by value2 positions  
  lshr   value1, value2 → result bitwise shift right of a long value1 by value2 positions  
  lushr   value1, value2 → result bitwise shift right of a long value1 by value2 positions, unsigned  
nop nop   [No change] performs no operation  
  swap   value2, value1 → value1, value2 swaps two top words on the stack (note that value1 and value2 must not be double or long)  
  wide opcode, indexbyte1, indexbyte2 [same as for corresponding instructions] execute opcode, where opcode is either iload, fload, aload, lload, dload, istore, fstore, astore, lstore, dstore, or ret, but assume the index is 16 bit; or execute iinc, where the index is 16 bits and the constant to increment by is a signed 16 bit short  
  or  
  iinc, indexbyte1, indexbyte2, countbyte1, countbyte2  
break breakpoint     reserved for breakpoints in Java debuggers; should not appear in any class file  
دستوراتی که در IL فقط هست  
add.ovf     …,Value1,Value2 → …,RESULT Add signed integer values with overflow check.  
add.ovf.un     …,Value1,Value2 → …,RESULT Add unsigned integer values with overflow check.  
arglist       Return argument list handle for the current method.  
beq.s <int8 (target)>     …,Value1,Value2 → … Branch to target if equal, short form.  
bge.s <int8 (target)>     …,Value1,Value2 → … Branch to target if greater than or equal to, short form.  
bge.un <int32 (target)>     …,Value1,Value2 → … Branch to target if greater than or equal to (unsigned or unordered).  
bge.un.s <int8 (target)>     …,Value1,Value2 → … Branch to target if greater than or equal to (unsigned or unordered), short form  
bgt.s <int8 (target)>     …,Value1,Value2 → … Branch to target if greater than, short form.  
bgt.un <int32 (target)>     …,Value1,Value2 → … Branch to target if greater than (unsigned or unordered).  
bgt.un.s <int8 (target)>     …,Value1,Value2 → … Branch to target if greater than (unsigned or unordered), short form.  
ble.s <int8 (target)>     …,Value1,Value2 → … Branch to target if less than or equal to, short form.  
ble.un <int32 (target)>     …,Value1,Value2 → … Branch to target if less than or equal to (unsigned or unordered).  
ble.un.s <int8 (target)>     …,Value1,Value2 → … Branch to target if less than or equal to (unsigned or unordered), short form  
blt <int32 (target)>     …,Value1,Value2 → … Branch to target if less than.  
blt.s <int8 (target)>     …,Value1,Value2 → … Branch to target if less than, short form.  
blt.un <int32 (target)>     …,Value1,Value2 → … Branch to target if less than (unsigned or unordered).  
blt.un.s <int8 (target)>     …,Value1,Value2 → … Branch to target if less than (unsigned or unordered), short form.  
bne.un <int32 (target)>     …,Value1,Value2 → … Branch to target if unequal or unordered.  
bne.un.s <int8 (target)>     …,Value1,Value2 → … Branch to target if unequal or unordered, short form.  
brfalse.s <int8 (target)>     …,Value → … Branch to target if value is zero (false), short form.  
brinst.s <int8 (target)>     …,Value → … Branch to target if value is a non-null object reference, short form (alias for brtrue.s).  
brnull.s <int8 (target)>     …,Value → … Branch to target if value is null (alias for brfalse.s), short form.  
brtrue <int32 (target)>     …,Value → … Branch to target if value is non-zero (true).  
brtrue.s <int8 (target)>     …,Value → … Branch to target if value is non-zero (true), short form.  
brzero.s <int8 (target)>     …,Value → … Branch to target if value is zero (alias for brfalse.s), short form.  
call <method>     …,arg1,arg2 … argn→ ..,retVal Call method described by method.  
calli <callsitedescr>     …,arg1,arg2 … argn,fnt→ ..,retVal  Call method indicated on the stack with arguments described by callsitedescr.  
ceq     …,Value1,Value2 → …,RESULT Push 1 (of type int32) if value1 equals value2, else push 0.  
cgt     …,Value1,Value2 → …,RESULT Push 1 (of type int32) if value1 > value2, else push 0.  
cgt.un     …,Value1,Value2 → …,RESULT Push 1 (of type int32) if value1 > value2, unsigned or unordered, else push 0.  
ckfinite     …,Value → …,Value Throw ArithmeticException if value is not a finite number.  
clt     …,Value1,Value2 → …,RESULT Push 1 (of type int32) if value1 < value2, else push 0.  
clt.un     …,Value1,Value2 → …,RESULT Push 1 (of type int32) if value1 < value2, unsigned or unordered, else push 0.  
constrained. <thisType> [prefix]       Call a virtual method on a type constrained to be type T  
conv.i     .., Value → RESULT Convert to native int, pushing native int on stack.  
conv.ovf.i     .., Value → RESULT Convert to a native int (on the stack as native int) and throw an exception on overflow.  
conv.ovf.i.un     .., Value → RESULT Convert unsigned to a native int (on the stack as native int) and throw an exception on overflow.  
conv.ovf.i1     .., Value → RESULT Convert to an int8 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.i1.un     .., Value → RESULT Convert unsigned to an int8 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.i2     .., Value → RESULT Convert to an int16 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.i2.un     .., Value → RESULT Convert unsigned to an int16 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.i4     .., Value → RESULT Convert to an int32 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.i4.un     .., Value → RESULT Convert unsigned to an int32 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.i8     .., Value → RESULT Convert to an int64 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.i8.un     .., Value → RESULT Convert unsigned to an int64 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.u     .., Value → RESULT Convert to a native unsigned int (on the stack as native int) and throw an exception on overflow.  
conv.ovf.u.un     .., Value → RESULT Convert unsigned to a native unsigned int (on the stack as native int) and throw an exception on overflow.  
conv.ovf.u1.un     .., Value → RESULT Convert unsigned to an unsigned int8 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.u2     .., Value → RESULT Convert to an unsigned int16 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.u2.un     .., Value → RESULT Convert unsigned to an unsigned int16 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.u4     .., Value → RESULT Convert to an unsigned int32 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.u4.un     .., Value → RESULT Convert unsigned to an unsigned int32 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.u8     .., Value → RESULT Convert to an unsigned int64 (on the stack as int32) and throw an exception on overflow.  
conv.ovf.u8.un     .., Value → RESULT Convert unsigned to an unsigned int64 (on the stack as int32) and throw an exception on overflow.  
conv.r.un     .., Value → RESULT Convert unsigned integer to floating-point, pushing F on stack.  
conv.u     .., Value → RESULT Convert to native unsigned int, pushing native int on stack.  
conv.u1     .., Value → RESULT Convert to unsigned int8, pushing int32 on stack.  
conv.u2     .., Value → RESULT Convert to unsigned int16, pushing int32 on stack.  
conv.u4     .., Value → RESULT Convert to unsigned int32, pushing int32 on stack.  
conv.u8     .., Value → RESULT Convert to unsigned int64, pushing int64 on stack.  
cpblk     …, DESADDR,SECADDR,SIZE→… Copy data from memory to memory.  
div.un     …,Value1,Value2 → …,RESULT Divide two values, unsigned, returning a quotient.  
endfault     …,value → … End fault clause of an exception block.  
endfilter     …,value → … End an exception handling filter clause.  
endfinally     …,value → … End finally clause of an exception block.  
idind.u8       Indirect load value of type unsigned int64 as int64 on the stack (alias for ldind.i8).  
initblk     …,ADDR, Value,SIZE → … Set all bytes in a block of memory to a given byte value.  
jmp <method>     …. ,  → …. Exit current method and jump to the specified method.  
ldarg <uint16 (num)>     …. ,  → …,value Load argument numbered num onto the stack.  
ldarg.0     …. ,  → …,value Load argument 0 onto the stack.  
ldarg.1     …. ,  → …,value Load argument 1 onto the stack.  
ldarg.2     …. ,  → …,value Load argument 2 onto the stack.  
ldarg.3     …. ,  → …,value Load argument 3 onto the stack.  
ldarg.s <uin8 (num)>     …. ,  → …,value Load argument numbered num onto the stack, short form.  
ldarga <uint16 (argNum)>     …, → …,address of argument Fetch the address of argument argNum.  
ldarga.s <uint8 (argNum)>     …, → …,address of argument Fetch the address of argument argNum, short form.  
ldc.i4 <int32 (num)>     …, → …, num Push num of type int32 onto the stack as int32.  
ldc.i4.6     …, → …, num Push 6 onto the stack as int32.  
ldc.i4.7     …, → …, num Push 7 onto the stack as int32.  
ldc.i4.8     …, → …, num Push 8 onto the stack as int32.  
ldc.i4.s <int8 (num)>     …, → …, num Push num onto the stack as int32, short form.  
ldc.i8 <int64 (num)>     …, → …, num Push num of type int64 onto the stack as int64.  
ldc.r4 <float32 (num)>     …, → …, num Push num of type float32 onto the stack as F.  
ldc.r8 <float64 (num)>     …, → …, num Push num of type float64 onto the stack as F.  
ldftn <method>     …, → …,ftn Push a pointer to a method referenced by method, on the stack.  
ldind.i     …,addr → …,Value Indirect load value of type native int as native int on the stack  
ldind.i1     …,addr → …,Value Indirect load value of type int8 as int32 on the stack.  
ldind.i2     …,addr → …,Value Indirect load value of type int16 as int32 on the stack.  
ldind.i4     …,addr → …,Value Indirect load value of type int32 as int32 on the stack.  
ldind.i8     …,addr → …,Value Indirect load value of type int64 as int64 on the stack.  
ldind.r4     …,addr → …,Value Indirect load value of type float32 as F on the stack.  
ldind.r8     …,addr → …,Value Indirect load value of type float64 as F on the stack.  
ldind.ref     …,addr → …,Value Indirect load value of type object ref as O on the stack.  
ldind.u1     …,addr → …,Value Indirect load value of type unsigned int8 as int32 on the stack  
ldind.u2     …,addr → …,Value Indirect load value of type unsigned int16 as int32 on the stack  
ldind.u4     …,addr → …,Value Indirect load value of type unsigned int32 as int32 on the stack  
ldloc.s <uint8 (indx)>     …, → …,Value Load local variable of index indx onto stack, short form.  
ldloca <uint16 (indx)>     … → …,address Load address of local variable with index indx.  
ldloca.s <uint8 (indx)>     … → …,address Load address of local variable with index indx, short form.  
ldnull     … → …, null value Push a null reference on the stack.  
leave <int32 (target)>     …, → Exit a protected region of code.  
leave.s <int8 (target)>     …, → Exit a protected region of code, short form.  
localloc     …, size → …,address Allocate space from the local memory pool.  
mul.ovf.<type>     …,value1,value2 → …,result Multiply signed integer values. Signed result shall fit in same size  
mul.ovf.un     …,value1,value2 → …,result Multiply unsigned integer values. Unsigned result shall fit in same size  
not     …,value → …,result Bitwise complement.  
rem.un     …,Value1,Value2 → …,result Remainder when dividing one unsigned value by another.  
shl     …,value,shiftAmount → …,result Shift an integer left (shifting in zeros), return an integer.  
shr     …,value,shiftAmount → …,result Shift an integer right (shift in sign), return an integer.  
shr.un     …,value,shiftAmount → …,result Shift an integer right (shift in zero), return an integer.  
starg <uint16 (num)>     …,value → …, Store value to the argument numbered num.  
starg.s <uint8 (num)>     …,value → …, Store value to the argument numbered num, short form.  
stind.i     …,addr , val → … Store value of type native int into memory at address  
stind.i1     …,addr , val → … Store value of type int8 into memory at address  
stind.i2     …,addr , val → … Store value of type int16 into memory at address  
stind.i4     …,addr , val → … Store value of type int32 into memory at address  
stind.i8     …,addr , val → … Store value of type int64 into memory at address  
stind.r4     …,addr , val → … Store value of type float32 into memory at address  
stind.r8     …,addr , val → … Store value of type float64 into memory at address  
stind.ref     …,addr , val → … Store value of type object ref (type O) into memory at address  
stloc <uint16 (indx)>     …,value → … Pop a value from stack into local variable indx.  
stloc.s <uint8 (indx)>     …,value → … Pop a value from stack into local variable indx, short form.  
sub.ovf     …,Value1,Value2 → …,result Subtract native int from a native int. Signed result shall fit in same size  
sub.ovf.un     …,Value1,Value2 → …,result Subtract native unsigned int from a native unsigned int. Unsigned result shall fit in same size.