Appendix C
IL Instruction Set Reference
| Type | Description |
| int8 | Signed 1-byte integer |
| uint8 | Unsigned 1-byte integer |
| int32 | Signed 4-byte integer |
| uint32 | Unsigned 4-byte integer |
| int64 | Signed 8-byte integer |
| float32 | 4-byte floating point number |
| float64 | 8-byte floating point number |
| <Method> | MethodDef or MemberRef token |
| <Field> | FieldDef or MemberRef token |
| <Type> | TypeDef, TypeRef, or TypeSpec token |
| <Signature> | StandAloneSig token |
| <String> | User-defined string token |
| Type | Description |
| int32 | Signed 4-byte integer |
| int64 | Signed 8-byte integer |
| Float | 80-bit floating point number |
| & | Managed or unmanaged pointer |
| o | Object reference |
| * | Unspecified type |
| Opcode | Name | Parameter(s) | Pop | Push |
| 00 | nop | - | - | - |
| 01 | break | - | - | - |
| 02 | ldarg.0 | - | - | * |
| 03 | ldarg.1 | - | - | * |
| 04 | ldarg.2 | - | - | * |
| 05 | ldarg.3 | - | - | * |
| 06 | ldloc.0 | - | - | * |
| 07 | ldloc.1 | - | - | * |
| 08 | ldloc.2 | - | - | * |
| 09 | ldloc.3 | - | - | * |
| 0A | stloc.0 | - | * | - |
| 0B | stloc.1 | - | * | - |
| 0C | stloc.2 | - | * | - |
| 0D | stloc.3 | - | * | - |
| 0E | ldarg.s | uint8 | - | * |
| 0F | ldarga.s | uint8 | - | & |
| 10 | starg.s | uint8 | * | - |
| 11 | ldloc.s | uint8 | - | * |
| 12 | ldloca.s | uint8 | - | & |
| 13 | stloc.s | uint8 | * | - |
| 14 | ldnull | - | - | &=0 |
| 15 | ldc.i4.m1ldc.i4.M1 | - | - | int32=-1 |
| 16 | ldc.i4.0 | - | - | int32=0 |
| 17 | ldc.i4.1 | - | - | int32=1 |
| 18 | ldc.i4.2 | - | - | int32=2 |
| 19 | ldc.i4.3 | - | - | int32=3 |
| 1A | ldc.i4.4 | - | - | int32=4 |
| 1B | ldc.i4.5 | - | - | int32=5 |
| 1C | ldc.i4.6 | - | - | int32=6 |
| 1D | ldc.i4.7 | - | - | int32=7 |
| 1E | ldc.i4.8 | - | - | int32=8 |
| 1F | ldc.i4.s | int8 | - | int32 |
| 20 | ldc.i4 | int32 | - | int32 |
| 21 | ldc.i8 | int64 | - | int64 |
| 22 | ldc.r4 | float32 | - | Float |
| 23 | ldc.r8 | float64 | - | Float |
| 25 | dup | - | * | *,* |
| 26 | pop | - | * | - |
| 27 | jmp | <Method> | - | - |
| 28 | call | <Method> | N arguments | Ret.value |
| 29 | calli | <Signature> | N arguments | Ret.value |
| 2A | ret | - | * | - |
| 2B | br.s | int8 | - | - |
| 2C | brfalse.sbrnull.sbrzero.s | int8 | int32 | - |
| 2D | brtrue.sbrinst.s | int8 | int32 | - |
| 2E | beq.s | int8 | *,* | - |
| 2F | bge.s | int8 | *,* | - |
| 30 | bgt.s | int8 | *,* | - |
| 31 | ble.s | int8 | *,* | - |
| 32 | blt.s | int8 | *,* | - |
| 33 | bne.un.s | int8 | *,* | - |
| 34 | bge.un.s | int8 | *,* | - |
| 35 | bgt.un.s | int8 | *,* | - |
| 36 | ble.un.s | int8 | *,* | - |
| 37 | blt.un.s | int8 | *,* | - |
| 38 | br | int32 | - | - |
| 39 | brfalsebrnullbrzero | int32 | int32 | - |
| 3A | brtruebrinst | int32 | int32 | - |
| 3B | beq | int32 | *,* | - |
| 3C | bge | int32 | *,* | - |
| 3D | bgt | int32 | *,* | - |
| 3E | ble | int32 | *,* | - |
| 3F | blt | int32 | *,* | - |
| 40 | bne.un | int32 | *,* | - |
| 41 | bge.un | int32 | *,* | - |
| 42 | bgt.un | int32 | *,* | - |
| 43 | ble.un | int32 | *,* | - |
| 44 | blt.un | int32 | *,* | - |
| 45 | switch | (uint32=N) + N(int32) | *,* | - |
| 46 | ldind.i1 | - | & | int32 |
| 47 | ldind.u1 | - | & | int32 |
| 48 | ldind.i2 | - | & | int32 |
| 49 | ldind.u2 | - | & | int32 |
| 4A | ldind.i4 | - | & | int32 |
| 4B | ldind.u4 | - | & | int32 |
| 4C | ldind.i8ldind.u8 | - | & | int64 |
| 4D | ldind.i | - | & | int32 |
| 4E | ldind.r4 | - | & | Float |
| 4F | ldind.r8 | - | & | Float |
| 50 | ldind.ref | - | & | & |
| 51 | stind.ref | - | &,& | - |
| 52 | stind.i1 | - | int32,& | - |
| 53 | stind.i2 | - | int32,& | - |
| 54 | stind.i4 | - | int32,& | - |
| 55 | stind.i8 | - | int32,& | - |
| 56 | stind.r4 | - | Float,& | - |
| 57 | stind.r8 | - | Float,& | - |
| 58 | add | - | *,* | * |
| 59 | sub | - | *,* | * |
| 5A | mul | - | *,* | * |
| 5B | div | - | *,* | * |
| 5C | div.un | - | *,* | * |
| 5D | rem | - | *,* | * |
| 5E | rem.un | - | *,* | * |
| 5F | and | - | *,* | * |
| 60 | or | - | *,* | * |
| 61 | xor | - | *,* | * |
| 62 | shl | - | *,* | * |
| 63 | shr | - | *,* | * |
| 64 | shr.un | - | *,* | * |
| 65 | neg | - | * | * |
| 66 | not | - | * | * |
| 67 | conv.i1 | - | * | int32 |
| 68 | conv.i2 | - | * | int32 |
| 69 | conv.i4 | - | * | int32 |
| 6A | conv.i8 | - | * | int64 |
| 6B | conv.r4 | - | * | Float |
| 6C | conv.r8 | - | * | Float |
| 6D | conv.u4 | - | * | int32 |
| 6E | conv.u8 | - | * | int64 |
| 6F | callvirt | <Method> | N arguments | Ret.value |
| 70 | cpobj | < Type > | &,& | - |
| 71 | ldobj | <Type> | & | * |
| 72 | ldstr | <String> | - | o |
| 73 | newobj | <Method> | N arguments | o |
| 74 | castclass | <Type> | o | o |
| 75 | isinst | <Type> | o | int32 |
| 76 | conv.r.un | - | * | Float |
| 79 | unbox | <Type> | o | & |
| 7A | throw | - | o | - |
| 7B | ldfld | <Field> | o/& | * |
| 7C | ldflda | <Field> | o/& | & |
| 7D | stfld | <Field> | o/&,* | - |
| 7E | ldsfld | <Field> | - | * |
| 7F | ldsflda | <Field> | - | & |
| 80 | stsfld | <Field> | * | - |
| 81 | stobj | <Type> | &,* | - |
| 82 | conv.ovf.i1.un | - | * | int32 |
| 83 | conv.ovf.i2.un | - | * | int32 |
| 84 | conv.ovf.i4.un | - | * | int32 |
| 85 | conv.ovf.i8.un | - | * | int64 |
| 86 | conv.ovf.u1.un | - | * | int32 |
| 87 | conv.ovf.u2.un | - | * | int32 |
| 88 | conv.ovf.u4.un | - | * | int32 |
| 89 | conv.ovf.u8.un | - | * | int64 |
| 8A | conv.ovf.i.un | - | * | int32 |
| 8B | conv.ovf.u.un | - | * | int64 |
| 8C | box | <Type> | * | o |
| 8D | newarr | <Type> | int32 | o |
| 8E | ldlen | - | o | int32 |
| 8F | ldelema | <Type> | int32,o | & |
| 90 | ldelem.i1 | - | int32,o | int32 |
| 91 | ldelem.u1 | - | int32,o | int32 |
| 92 | ldelem.i2 | - | int32,o | int32 |
| 93 | ldelem.u2 | - | int32,o | int32 |
| 94 | ldelem.i4 | - | int32,o | int32 |
| 95 | ldelem.u4 | - | int32,o | int32 |
| 96 | ldelem.i8ldelem.u8 | - | int32,o | int64 |
| 97 | ldelem.i | - | int32,o | int32 |
| 98 | ldelem.r4 | - | int32,o | Float |
| 99 | ldelem.r8 | - | int32,o | Float |
| 9A | ldelem.ref | - | int32,o | o/& |
| 9B | stelem.i | - | int32,int32,o | - |
| 9C | stelem.i1 | - | int32,int32,o | - |
| 9D | stelem.i2 | - | int32,int32,o | - |
| 9E | stelem.i4 | - | int32,int32,o | - |
| 9F | stelem.i8 | - | int64,int32,o | - |
| A0 | stelem.r4 | - | Float,int32,o | - |
| A1 | stelem.r8 | - | Float,int32,o | - |
| A2 | stelem.ref | - | o/&,int32,o | - |
| B3 | conv.ovf.i1 | - | * | int32 |
| B4 | conv.ovf.u1 | - | * | int32 |
| B5 | conv.ovf.i2 | - | * | int32 |
| B6 | conv.ovf.u2 | - | * | int32 |
| B7 | conv.ovf.i4 | - | * | int32 |
| B8 | conv.ovf.u4 | - | * | int32 |
| B9 | conv.ovf.i8 | - | * | int64 |
| BA | conv.ovf.u8 | - | * | int64 |
| C2 | refanyval | <Type> | * | & |
| C3 | ckfinite | - | * | Float |
| C6 | mkrefany | <Type> | & | * |
| D0 | ldtoken | <Type>/ <Field>/ <Method> | - | & |
| D1 | conv.u2 | - | * | int32 |
| D2 | conv.u1 | - | * | int32 |
| D3 | conv.i | - | * | int32 |
| D4 | conv.ovf.i | - | * | int32 |
| D5 | conv.ovf.u | - | * | int32 |
| D6 | add.ovf | - | *,* | * |
| D7 | add.ovf.un | - | *,* | * |
| D8 | mul.ovf | - | *,* | * |
| D9 | mul.ovf.un | - | *,* | * |
| DA | sub.ovf | - | *,* | * |
| DB | sub.ovf.un | - | *,* | * |
| DC | endfinallyendfault | - | - | - |
| DD | leave | int32 | - | - |
| DE | leave.s | int8 | - | - |
| DF | stind.i | - | int32,& | - |
| E0 | conv.u | - | * | int32 |
| FE 00 | arglist | - | * | & |
| FE 01 | ceq | - | *,* | int32 |
| FE 02 | cgt | - | *,* | int32 |
| FE 03 | cgt.un | - | *,* | int32 |
| FE 04 | clt | - | *,* | int32 |
| FE 05 | clt.un | - | *,* | int32 |
| FE 06 | ldftn | <Method> | - | & |
| FE 07 | ldvirtftn | <Method> | o | & |
| FE 09 | ldarg | uint32 | - | * |
| FE 0A | ldarga | uint32 | - | & |
| FE 0B | starg | uint32 | * | - |
| FE 0C | ldloc | uint32 | - | * |
| FE 0D | ldloca | uint32 | - | & |
| FE 0E | stloc | uint32 | * | - |
| FE 0F | localloc | - | int32 | & |
| FE 11 | endfilter | - | int32 | - |
| FE 12 | unaligned. | uint8 | - | - |
| FE 13 | volatile. | - | - | - |
| FE 14 | tail. | - | - | - |
| FE 15 | initobj | <Type> | & | - |
| FE 17 | cpblk | - | int32,&,& | - |
| FE 18 | initblk | - | int32,int32,& | - |
| FE 1A | rethrow | - | - | - |
| FE 1C | sizeof | <Type> | - | int32 |
| FE 1D | refanytype | - | * | & |