CILの命令を集めていきたいと思います。
ここにあるドキュメントは「ECMA-335 Partition III - CIL Instruction Set」を参考としています。
ECMA-335 Partition III - CIL Instruction Setまだ未完成です。それと、ここでの記述は全てが正しいとは限りません。間違っている箇所を見つけた場合は教えて頂けるとありがたいです。
命令コード(code) | 命令名(Assembly command) | 簡単な説明 |
---|---|---|
0x00 | nop | 何もしない |
0x01 | break | |
0x02 | ldarg.0 | |
0x03 | ldarg.1 | |
0x04 | ldarg.2 | |
0x05 | ldarg.3 | |
0x06 | ldloc.0 | |
0x07 | ldloc.1 | |
0x08 | ldloc.2 | |
0x09 | ldloc.3 | |
0x0a | stloc.0 | |
0x0b | stloc.1 | |
0x0c | stloc.2 | |
0x0d | stloc.3 | |
0x0e | ldarg.s | |
0x0f | ldarga.s | |
0x10 | starg.s | |
0x11 | ldloc.s | |
0x12 | ldloca.s | |
0x13 | stloc.s | |
0x14 | ldnull | |
0x15 | ldc.i4.m1 | int32型の-1をプッシュ |
0x16 | ldc.i4.0 | int32型の0をプッシュ |
0x17 | ldc.i4.1 | int32型の1をプッシュ |
0x18 | ldc.i4.2 | int32型の-2をプッシュ |
0x19 | ldc.i4.3 | int32型の3をプッシュ |
0x1a | ldc.i4.4 | int32型の4をプッシュ |
0x1b | ldc.i4.5 | int32型の5をプッシュ |
0x1c | ldc.i4.6 | int32型の6をプッシュ |
0x1d | ldc.i4.7 | int32型の7をプッシュ |
0x1e | ldc.i4.8 | int32型の8をプッシュ |
0x1f | ldc.i4.s | int32型の-12~27までの数をプッシュ |
0x20 | ldc.i4 | int32型の数をプッシュ |
0x21 | ldc.i8 | int64型の数をプッシュ |
0x22 | ldc.r4 | float32型の数をプッシュ |
0x23 | ldc.r8 | float64型の数をプッシュ |
0x25 | dup | |
0x26 | pop | |
0x27 | jmp | |
0x28 | call | |
0x29 | calli | |
0x2a | ret | |
0x2b | br.s | 無条件分岐 |
0x2c | brfalse.s brnull.s brzero.s | false、null、0の場合分岐 |
0x2d | brtrue.s | |
0x2e | beq.s | 等しいとき分岐 |
0x2f | bge.s | 大きいまたは等しいとき分岐 |
0x30 | bgt.s | 大きいとき分岐 |
0x31 | ble.s | 小さいまたは等しいとき分岐 |
0x32 | blt.s | 小さいとき分岐 |
0x33 | bne.un.s | |
0x34 | bge.un.s | |
0x35 | bgt.un.s | |
0x36 | ble.un.s | |
0x37 | blt.un.s | |
0x38 | br | 無条件分岐 |
0x39 | brfalse brnull brzero | false、null、0の場合分岐 |
0x3a | brtrue | |
0x3b | beq | 等しいとき分岐 |
0x3c | bge | 大きいまたは等しいとき分岐 |
0x3d | bgt | 大きいとき分岐 |
0x3e | ble | 小さいまたは等しいとき分岐 |
0x3f | blt | 小さいとき分岐 |
0x40 | bne.un | |
0x41 | bge.un | |
0x42 | bgt.un | |
0x43 | ble.un | |
0x44 | blt.un | |
0x45 | switch | |
0x46 | ldind.i1 | |
0x47 | ldind.u1 | |
0x48 | ldind.i2 | |
0x49 | ldind.u2 | |
0x4a | ldind.i4 | |
0x4b | ldind.u4 | |
0x4c | ldind.i8 | |
0x4d | ldind.i | |
0x4e | ldind.r4 | |
0x4f | ldind.r8 | |
0x50 | ldind.ref | |
0x51 | stind.ref | |
0x52 | stind.i1 | |
0x53 | stind.i2 | |
0x54 | stind.i4 | |
0x55 | stind.i8 | |
0x56 | stind.r4 | |
0x57 | stind.r8 | |
0x58 | add | |
0x59 | sub | |
0x5a | mul | |
0x5b | div | |
0x5c | div.un | |
0x5d | rem | |
0x5e | rem.un | |
0x5f | and | |
0x60 | or | |
0x61 | xor | |
0x62 | shl | |
0x63 | shr | |
0x64 | shr.un | |
0x65 | neg | |
0x66 | not | |
0x67 | conv.i1 | |
0x68 | conv.i2 | |
0x69 | conv.i4 | |
0x6a | conv.i8 | |
0x6b | conv.r4 | |
0x6c | conv.r8 | |
0x6d | conv.u4 | |
0x6e | conv.u8 | |
0x6f | callvirt | |
0x70 | cpobj | |
0x71 | ldobj | |
0x72 | ldstr | 文字列をプッシュする |
0x73 | newobj | |
0x74 | castclass | |
0x75 | isinst | |
0x76 | conv.r.un | |
0x79 | unbox | |
0x7a | throw | |
0x7b | ldfld | |
0x7c | ldflda | |
0x7d | stfld | |
0x7e | ldsfld | |
0x7f | ldsflda | |
0x80 | stsfld | |
0x81 | stobj | |
0x82 | conv.ovf.i1.un | |
0x83 | conv.ovf.i2.un | |
0x84 | conv.ovf.i4.un | |
0x85 | conv.ovf.i8.un | |
0x86 | conv.ovf.u1.un | |
0x87 | conv.ovf.u2.un | |
0x88 | conv.ovf.u4.un | |
0x89 | conv.ovf.u8.un | |
0x8a | conv.ovf.i.un | |
0x8b | conv.ovf.u.un | |
0x8c | box | |
0x8d | newarr | |
0x8e | ldlen | |
0x8f | ldelema | |
0x90 | ldelem.i1 | |
0x91 | ldelem.u1 | |
0x92 | ldelem.i2 | |
0x93 | ldelem.u2 | |
0x94 | ldelem.i4 | |
0x95 | ldelem.u4 | |
0x96 | ldelem.i8 | |
0x97 | ldelem.i | |
0x98 | ldelem.r4 | |
0x99 | ldelem.r8 | |
0x9a | ldelem.ref | |
0x9b | stelem.i | |
0x9c | stelem.i1 | |
0x9d | stelem.i2 | |
0x9e | stelem.i4 | |
0x9f | stelem.i8 | |
0xa0 | stelem.r4 | |
0xa1 | stelem.r8 | |
0xa2 | stelem.ref | |
0xb3 | conv.ovf.i1 | |
0xb4 | conv.ovf.u1 | |
0xb5 | conv.ovf.i2 | |
0xb6 | conv.ovf.u2 | |
0xb7 | conv.ovf.i4 | |
0xb8 | conv.ovf.u4 | |
0xb9 | conv.ovf.i8 | |
0xba | conv.ovf.u8 | |
0xc2 | refanyval | |
0xc3 | ckfinite | |
0xc6 | mkrefany | |
0xd0 | ldtoken | |
0xd1 | conv.u2 | |
0xd2 | conv.u1 | |
0xd3 | conv.i | |
0xd4 | conv.ovf.i | |
0xd5 | conv.ovf.u | |
0xd6 | add.ovf | |
0xd7 | add.ovf.un | |
0xd8 | mul.ovf | |
0xd9 | mul.ovf.un | |
0xda | sub.ovf | |
0xdb | sub.ovf.un | |
0xdc | endfinally | |
0xdd | leave | |
0xde | leave.s | |
0xdf | stind.i | |
0xe0 | conv.u | |
0xfe 0x00 | arglist | |
0xfe 0x01 | ceq | |
0xfe 0x02 | cgt | |
0xfe 0x03 | cgt.un | |
0xfe 0x04 | clt | |
0xfe 0x05 | clt.un | |
0xfe 0x06 | ldftn | |
0xfe 0x07 | ldvirtftn | |
0xfe 0x09 | ldarg | |
0xfe 0x0a | ldarga | |
0xfe 0x0b | starg | |
0xfe 0x0c | ldloc | |
0xfe 0x0d | ldloca | |
0xfe 0x0e | stloc | |
0xfe 0x0f | localloc | |
0xfe 0x11 | endfilter | |
0xfe 0x12 | unaligned. | |
0xfe 0x13 | volatile. | |
0xfe 0x14 | tail. | |
0xfe 0x15 | initobj | |
0xfe 0x17 | cpblk | |
0xfe 0x18 | initblk | |
0xfe 0x1a | rethrow | |
0xfe 0x1c | sizeof | |
0xfe 0x1d | refanytype |