「共通中間言語」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator |
imported>Administrator |
||
20行目: | 20行目: | ||
== CILの命令セット == | == CILの命令セット == | ||
+ | {| class="wikitable sortable" | ||
+ | |+ | ||
+ | ! style="" | コード | ||
+ | ! style="" | 命令 | ||
+ | ! style="" | 概要 | ||
+ | |- | ||
+ | | 0x58 | ||
+ | | <code>add</code> | ||
+ | | 2つの値を加算し、新しい値を返す | ||
+ | |- | ||
+ | | 0xD6 | ||
+ | | <code>add.ovf</code> | ||
+ | | 2つの符号付き整数値を加算し、かつオーバーフローのチェックを行い、新しい値を返す。 | ||
+ | |- | ||
+ | | 0xD7 | ||
+ | | <code>add.ovf.un</code> | ||
+ | | 2つの符号なし整数値を加算し、かつオーバーフローのチェックを行い、新しい値を返す。 | ||
+ | |- | ||
+ | | 0x5F | ||
+ | | <code>and</code> | ||
+ | | 2つの値のビットごとのANDを計算し、新しい値を返す。 | ||
+ | |- | ||
+ | | 0xFE 0x00 | ||
+ | | <code>arglist</code> | ||
+ | | 現在のメソッドの引数リストのハンドル(アンマネージポインター)を返す。 | ||
+ | |- | ||
+ | | 0x3B <int32> | ||
+ | | <code>beq</code> target | ||
+ | | 2つの値が等しいときに、targetバイト移動したところへ処理を移す。 | ||
+ | |- | ||
+ | | 0x2E <int8> | ||
+ | | <code>beq.s</code> target | ||
+ | | 2つの値が等しいときに、targetバイト移動したところへ処理を移す。飛び先がint8の範囲内のとき用。 | ||
+ | |- | ||
+ | | 0x3C <int32> | ||
+ | | <code>bge</code> target | ||
+ | | 値1が値2より大きいまたは等しいときに、targetバイト移動したところへ処理を移す。 | ||
+ | |- | ||
+ | | 0x2E <int8> | ||
+ | | <code>bge.s</code> target | ||
+ | | 値1が値2より大きいまたは等しいときに、targetバイト移動したところへ処理を移す。飛び先がint8の範囲内のとき用。 | ||
+ | |- | ||
+ | | 0x41 <int32> | ||
+ | | <code>bge.un</code> target | ||
+ | | 符号なし整数値または順序なし(浮動小数点)を比較し、値1が値2より大きいまたは等しいときに、targetバイト移動したところへ処理を移す。 | ||
+ | |- | ||
+ | | 0x34 <int8> | ||
+ | | <code>bge.un.s</code> target | ||
+ | | 符号なし整数値または順序なし(浮動小数点)を比較し、値1が値2より大きいまたは等しいときに、targetバイト移動したところへ処理を移す。飛び先がint8の範囲内のとき用。 | ||
+ | |- | ||
+ | | 0x3D <int32> | ||
+ | | <code>bgt</code> target) | ||
+ | | | ||
+ | |- | ||
+ | | 0x30 <int8> | ||
+ | | <code>bgt.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x42 <int32> | ||
+ | | <code>bgt.un</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x35 <int8> | ||
+ | | <code>bgt.un.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x3E <int32> | ||
+ | | <code>ble</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x31 <int8> | ||
+ | | <code>ble.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x43 <int32> | ||
+ | | <code>ble.un</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x36 <int8> | ||
+ | | <code>ble.un.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x3F <int32> | ||
+ | | <code>blt</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x32 <int8> | ||
+ | | <code>blt.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x44 <int32> | ||
+ | | <code>blt.un</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x37 <int8> | ||
+ | | <code>blt.un.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x40 <int32> | ||
+ | | <code>bne.un</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x33 <int8> | ||
+ | | <code>bne.un.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x8C <T> | ||
+ | | <code>box</code> <valTypeToken> | ||
+ | | | ||
+ | |- | ||
+ | | 0x38 <int32> | ||
+ | | <code>br</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x2B <int8> | ||
+ | | <code>br.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x01 | ||
+ | | <code>break</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x39 <int32> | ||
+ | | <code>brfalse</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x2C <int8> | ||
+ | | <code>brfalse.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x3A <int32> | ||
+ | | <code>brinst</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x2D <int8> | ||
+ | | <code>brinst.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x39 <int32> | ||
+ | | <code>brnull</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x2C <int8> | ||
+ | | <code>brnull.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x3A <int32> | ||
+ | | <code>brtrue</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x2D <int8> | ||
+ | | <code>brtrue.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x39 <int32> | ||
+ | | <code>brzero</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x2C <int8> | ||
+ | | <code>brzero.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0x28 <T> | ||
+ | | <code>call</code> methodDesc | ||
+ | | | ||
+ | |- | ||
+ | | 0x29 <T> | ||
+ | | <code>calli</code> callSiteDescr | ||
+ | | | ||
+ | |- | ||
+ | | 0x6F <T> | ||
+ | | <code>callvirt</code> method | ||
+ | | | ||
+ | |- | ||
+ | | 0x74 <T> | ||
+ | | <code>castclass</code> class | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x01 | ||
+ | | <code>ceq</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x02 | ||
+ | | <code>cgt</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x03 | ||
+ | | <code>cgt.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xC3 | ||
+ | | <code>ckfinite</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x04 | ||
+ | | <code>clt</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x05 | ||
+ | | <code>clt.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x16 <T> | ||
+ | | <code>constrained.</code> thisType | ||
+ | | | ||
+ | |- | ||
+ | | 0xD3 | ||
+ | | <code>conv.i</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x67 | ||
+ | | <code>conv.i1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x68 | ||
+ | | <code>conv.i2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x69 | ||
+ | | <code>conv.i4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x6A | ||
+ | | <code>conv.i8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xD4 | ||
+ | | <code>conv.ovf.i</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x8A | ||
+ | | <code>conv.ovf.i.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xB3 | ||
+ | | <code>conv.ovf.i1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x82 | ||
+ | | <code>conv.ovf.i1.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xB5 | ||
+ | | <code>conv.ovf.i2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x83 | ||
+ | | <code>conv.ovf.i2.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xB7 | ||
+ | | <code>conv.ovf.i4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x84 | ||
+ | | <code>conv.ovf.i4.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xB9 | ||
+ | | <code>conv.ovf.i8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x85 | ||
+ | | <code>conv.ovf.i8.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xD5 | ||
+ | | <code>conv.ovf.u</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x8B | ||
+ | | <code>conv.ovf.u.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xB4 | ||
+ | | <code>conv.ovf.u1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x86 | ||
+ | | <code>conv.ovf.u1.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xB6 | ||
+ | | <code>conv.ovf.u2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x87 | ||
+ | | <code>conv.ovf.u2.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xB8 | ||
+ | | <code>conv.ovf.u4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x88 | ||
+ | | <code>conv.ovf.u4.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xBA | ||
+ | | <code>conv.ovf.u8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x89 | ||
+ | | <code>conv.ovf.u8.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x76 | ||
+ | | <code>conv.r.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x6B | ||
+ | | <code>conv.r4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x6C | ||
+ | | <code>conv.r8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xE0 | ||
+ | | <code>conv.u</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xD2 | ||
+ | | <code>conv.u1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xD1 | ||
+ | | <code>conv.u2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x6D | ||
+ | | <code>conv.u4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x6E | ||
+ | | <code>conv.u8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x17 | ||
+ | | <code>cpblk</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x70 <T> | ||
+ | | <code>cpobj</code> classTok | ||
+ | | | ||
+ | |- | ||
+ | | 0x5B | ||
+ | | <code>div</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x5C | ||
+ | | <code>div.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x25 | ||
+ | | <code>dup</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xDC | ||
+ | | <code>endfault</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0X11 | ||
+ | | <code>endfilter</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xDC | ||
+ | | <code>endfinally</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x4C | ||
+ | | <code>idind.u8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x18 | ||
+ | | <code>initblk</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x15 <T> | ||
+ | | <code>initobj</code> typeTok | ||
+ | | | ||
+ | |- | ||
+ | | 0x75 <T> | ||
+ | | <code>isinst</code> class | ||
+ | | | ||
+ | |- | ||
+ | | 0x27 <T> | ||
+ | | <code>jmp</code> method | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x09 <uint16> | ||
+ | | <code>ldarg</code> index | ||
+ | | | ||
+ | |- | ||
+ | | 0x02 | ||
+ | | <code>ldarg.0</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x03 | ||
+ | | <code>ldarg.1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x04 | ||
+ | | <code>ldarg.2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x05 | ||
+ | | <code>ldarg.3</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x0E <uint8> | ||
+ | | <code>ldarg.s</code> index | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x0A <uint16> | ||
+ | | <code>ldarga</code> index | ||
+ | | | ||
+ | |- | ||
+ | | 0x0F <uint8> | ||
+ | | <code>ldarga.s</code> index | ||
+ | | | ||
+ | |- | ||
+ | | 0x20 <int32> | ||
+ | | <code>ldc.i4</code> num | ||
+ | | | ||
+ | |- | ||
+ | | 0x16 | ||
+ | | <code>ldc.i4.0</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x17 | ||
+ | | <code>ldc.i4.1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x18 | ||
+ | | <code>ldc.i4.2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x19 | ||
+ | | <code>ldc.i4.3</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x1A | ||
+ | | <code>ldc.i4.4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x1B | ||
+ | | <code>ldc.i4.5</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x1C | ||
+ | | <code>ldc.i4.6</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x1D | ||
+ | | <code>ldc.i4.7</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x1E | ||
+ | | <code>ldc.i4.8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x15 | ||
+ | | <code>ldc.i4.m1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x1F <int8> | ||
+ | | <code>ldc.i4.s</code> num | ||
+ | | | ||
+ | |- | ||
+ | | 0x21 <int64> | ||
+ | | <code>ldc.i8</code> num | ||
+ | | | ||
+ | |- | ||
+ | | 0x22 <float32> | ||
+ | | <code>ldc.r4</code> num | ||
+ | | | ||
+ | |- | ||
+ | | 0x23 <float64> | ||
+ | | <code>ldc.r8</code> num | ||
+ | | | ||
+ | |- | ||
+ | | 0xA3 <T> | ||
+ | | <code>ldelem</code> <typeTok> | ||
+ | | | ||
+ | |- | ||
+ | | 0x97 | ||
+ | | <code>ldelem.i</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x90 | ||
+ | | <code>ldelem.i1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x92 | ||
+ | | <code>ldelem.i2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x94 | ||
+ | | <code>ldelem.i4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x96 | ||
+ | | <code>ldelem.i8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x98 | ||
+ | | <code>ldelem.r4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x99 | ||
+ | | <code>ldelem.r8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x9A | ||
+ | | <code>ldelem.ref</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x91 | ||
+ | | <code>ldelem.u1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x93 | ||
+ | | <code>ldelem.u2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x95 | ||
+ | | <code>ldelem.u4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x96 | ||
+ | | <code>ldelem.u8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x8F <T> | ||
+ | | <code>ldelema</code> class | ||
+ | | | ||
+ | |- | ||
+ | | 0x7B <T> | ||
+ | | <code>ldfld</code> field | ||
+ | | | ||
+ | |- | ||
+ | | 0x7C <T> | ||
+ | | <code>ldflda</code> field | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x06 <T> | ||
+ | | <code>ldftn</code> method | ||
+ | | | ||
+ | |- | ||
+ | | 0x4D | ||
+ | | <code>ldind.i</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x46 | ||
+ | | <code>ldind.i1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x48 | ||
+ | | <code>ldind.i2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x4A | ||
+ | | <code>ldind.i4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x4C | ||
+ | | <code>ldind.i8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x4E | ||
+ | | <code>ldind.r4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x4F | ||
+ | | <code>ldind.r8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x50 | ||
+ | | <code>ldind.ref</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x47 | ||
+ | | <code>ldind.u1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x49 | ||
+ | | <code>ldind.u2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x4B | ||
+ | | <code>ldind.u4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x8E | ||
+ | | <code>ldlen</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x0C <uint16> | ||
+ | | <code>ldloc</code> index | ||
+ | | | ||
+ | |- | ||
+ | | 0x06 | ||
+ | | <code>ldloc.0</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x07 | ||
+ | | <code>ldloc.1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x08 | ||
+ | | <code>ldloc.2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x09 | ||
+ | | <code>ldloc.3</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x11 <uint8> | ||
+ | | <code>ldloc.s</code> indx | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x0D <uint16> | ||
+ | | <code>ldloca</code> index | ||
+ | | | ||
+ | |- | ||
+ | | 0x12 <uint8> | ||
+ | | <code>ldloca.s</code> index | ||
+ | | | ||
+ | |- | ||
+ | | 0x14 | ||
+ | | <code>ldnull</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x71 <T> | ||
+ | | <code>ldobj</code> typeTok | ||
+ | | | ||
+ | |- | ||
+ | | 0x7E <T> | ||
+ | | <code>ldsfld</code> field | ||
+ | | | ||
+ | |- | ||
+ | | 0x7F <T> | ||
+ | | <code>ldsflda</code> field | ||
+ | | | ||
+ | |- | ||
+ | | 0x72 <T> | ||
+ | | <code>ldstr</code> mdToken | ||
+ | | | ||
+ | |- | ||
+ | | 0xD0 <T> | ||
+ | | <code>ldtoken</code> token | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x07 <T> | ||
+ | | <code>ldvirtftn</code> method | ||
+ | | | ||
+ | |- | ||
+ | | 0xDD <int32> | ||
+ | | <code>leave</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0xDE <int8> | ||
+ | | <code>leave.s</code> target | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x0F | ||
+ | | <code>localloc</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xC6 <T> | ||
+ | | <code>mkrefany</code> class | ||
+ | | | ||
+ | |- | ||
+ | | 0x5A | ||
+ | | <code>mul</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xD8 | ||
+ | | <code>mul.ovf</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xD9 | ||
+ | | <code>mul.ovf.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x65 | ||
+ | | <code>neg</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x8D <T> | ||
+ | | <code>newarr</code> etype | ||
+ | | | ||
+ | |- | ||
+ | | 0x73 <T> | ||
+ | | <code>newobj</code> ctor | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x19 | ||
+ | | <code>no.</code> { <code>typecheck</code>, <code>rangecheck</code>, <code>nullcheck</code> } [prefix] | ||
+ | | | ||
+ | |- | ||
+ | | 0x00 | ||
+ | | <code>nop</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x66 | ||
+ | | <code>not</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x60 | ||
+ | | <code>or</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x26 | ||
+ | | <code>pop</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x1E | ||
+ | | <code>readonly.</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x1D | ||
+ | | <code>refanytype</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xC2 <T> | ||
+ | | <code>refanyval</code> type | ||
+ | | | ||
+ | |- | ||
+ | | 0x5D | ||
+ | | <code>rem</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x5E | ||
+ | | <code>rem.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x2A | ||
+ | | <code>ret</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x1A | ||
+ | | <code>rethrow</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x62 | ||
+ | | <code>shl</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x63 | ||
+ | | <code>shr</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x64 | ||
+ | | <code>shr.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x1C <T> | ||
+ | | <code>sizeof</code> valType | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x0B <uint16> | ||
+ | | <code>starg</code> num | ||
+ | | | ||
+ | |- | ||
+ | | 0x10 <uint8> | ||
+ | | <code>starg.s</code> num | ||
+ | | | ||
+ | |- | ||
+ | | 0xA4 <T> | ||
+ | | <code>stelem</code> typeTok | ||
+ | | | ||
+ | |- | ||
+ | | 0x9B | ||
+ | | <code>stelem.i</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x9C | ||
+ | | <code>stelem.i1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x9D | ||
+ | | <code>stelem.i2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x9E | ||
+ | | <code>stelem.i4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x9F | ||
+ | | <code>stelem.i8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xA0 | ||
+ | | <code>stelem.r4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xA1 | ||
+ | | <code>stelem.r8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xA2 | ||
+ | | <code>stelem.ref</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x7D <T> | ||
+ | | <code>stfld</code> field | ||
+ | | | ||
+ | |- | ||
+ | | 0xDF | ||
+ | | <code>stind.i</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x52 | ||
+ | | <code>stind.i1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x53 | ||
+ | | <code>stind.i2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x54 | ||
+ | | <code>stind.i4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x55 | ||
+ | | <code>stind.i8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x56 | ||
+ | | <code>stind.r4</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x57 | ||
+ | | <code>stind.r8</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x51 | ||
+ | | <code>stind.ref</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x0E <uint16> | ||
+ | | <code>stloc</code> index | ||
+ | | | ||
+ | |- | ||
+ | | 0x0A | ||
+ | | <code>stloc.0</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x0B | ||
+ | | <code>stloc.1</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x0C | ||
+ | | <code>stloc.2</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x0D | ||
+ | | <code>stloc.3</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x13 <uint8> | ||
+ | | <code>stloc.s</code> index | ||
+ | | | ||
+ | |- | ||
+ | | 0x81 <T> | ||
+ | | <code>stobj</code> class | ||
+ | | | ||
+ | |- | ||
+ | | 0x80 <T> | ||
+ | | <code>stsfld</code> field | ||
+ | | | ||
+ | |- | ||
+ | | 0x59 | ||
+ | | <code>sub</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xDA | ||
+ | | <code>sub.ovf</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xDB | ||
+ | | <code>sub.ovf.un</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x45 <uint32> <int32> ... <int32> | ||
+ | | <code>switch</code> N, t1...tN | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x14 | ||
+ | | <code>tail.</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x7A | ||
+ | | <code>throw</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x12 <uint8> | ||
+ | | <code>unaligned.</code> alignment | ||
+ | | | ||
+ | |- | ||
+ | | 0x79 <T> | ||
+ | | <code>unbox</code> valType | ||
+ | | | ||
+ | |- | ||
+ | | 0xA5 <T> | ||
+ | | <code>unbox.any</code> typeTok | ||
+ | | | ||
+ | |- | ||
+ | | 0xFE 0x13 | ||
+ | | <code>volatile.</code> | ||
+ | | | ||
+ | |- | ||
+ | | 0x61 | ||
+ | | <code>xor</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
== 関連項目 == | == 関連項目 == |
2012年4月13日 (金) 16:46時点における版
共通中間言語(きょうつうちゅうかんげんご、Common Intermediate Language、CIL)とは、Monoおよび.NET Frameworkで用いられるアセンブリ言語に類似した仮想マシン語のことである。.NET Frameworkがベータ版だったころまでは「Microsoft Intermediate Language」(MSIL)として知られており、今なおMSILと呼ぶひとは多い。
CILは、オブジェクト指向なアセンブリ言語であり、かつ完全にスタックベースの言語である。
.NET系のプログラミング言語で書かれたソースコードはコンパイルされてCILに変換される。CIL自体はプラットフォームに依存しない(特定CPUに依存しない)命令セットで構成されている。 そのためCILは、理論上はネイティブコードに変換することも(Monoでは実験的に可能)、.NET Frameworkの仮想マシンである共通言語基盤(CLR)で実行することもできる。
使用例
CILによる「Hello, world」プログラムの例。
.method public static void Main() cil managed
{
.entrypoint
.maxstack 1
ldstr "hello, world"
call void [mscorlib]System.Console::WriteLine(string)
ret
}
CILの命令セット
コード | 命令 | 概要 |
---|---|---|
0x58 | add
|
2つの値を加算し、新しい値を返す |
0xD6 | add.ovf
|
2つの符号付き整数値を加算し、かつオーバーフローのチェックを行い、新しい値を返す。 |
0xD7 | add.ovf.un
|
2つの符号なし整数値を加算し、かつオーバーフローのチェックを行い、新しい値を返す。 |
0x5F | and
|
2つの値のビットごとのANDを計算し、新しい値を返す。 |
0xFE 0x00 | arglist
|
現在のメソッドの引数リストのハンドル(アンマネージポインター)を返す。 |
0x3B <int32> | beq target
|
2つの値が等しいときに、targetバイト移動したところへ処理を移す。 |
0x2E <int8> | beq.s target
|
2つの値が等しいときに、targetバイト移動したところへ処理を移す。飛び先がint8の範囲内のとき用。 |
0x3C <int32> | bge target
|
値1が値2より大きいまたは等しいときに、targetバイト移動したところへ処理を移す。 |
0x2E <int8> | bge.s target
|
値1が値2より大きいまたは等しいときに、targetバイト移動したところへ処理を移す。飛び先がint8の範囲内のとき用。 |
0x41 <int32> | bge.un target
|
符号なし整数値または順序なし(浮動小数点)を比較し、値1が値2より大きいまたは等しいときに、targetバイト移動したところへ処理を移す。 |
0x34 <int8> | bge.un.s target
|
符号なし整数値または順序なし(浮動小数点)を比較し、値1が値2より大きいまたは等しいときに、targetバイト移動したところへ処理を移す。飛び先がint8の範囲内のとき用。 |
0x3D <int32> | bgt target)
|
|
0x30 <int8> | bgt.s target
|
|
0x42 <int32> | bgt.un target
|
|
0x35 <int8> | bgt.un.s target
|
|
0x3E <int32> | ble target
|
|
0x31 <int8> | ble.s target
|
|
0x43 <int32> | ble.un target
|
|
0x36 <int8> | ble.un.s target
|
|
0x3F <int32> | blt target
|
|
0x32 <int8> | blt.s target
|
|
0x44 <int32> | blt.un target
|
|
0x37 <int8> | blt.un.s target
|
|
0x40 <int32> | bne.un target
|
|
0x33 <int8> | bne.un.s target
|
|
0x8C <T> | box <valTypeToken>
|
|
0x38 <int32> | br target
|
|
0x2B <int8> | br.s target
|
|
0x01 | break
|
|
0x39 <int32> | brfalse target
|
|
0x2C <int8> | brfalse.s target
|
|
0x3A <int32> | brinst target
|
|
0x2D <int8> | brinst.s target
|
|
0x39 <int32> | brnull target
|
|
0x2C <int8> | brnull.s target
|
|
0x3A <int32> | brtrue target
|
|
0x2D <int8> | brtrue.s target
|
|
0x39 <int32> | brzero target
|
|
0x2C <int8> | brzero.s target
|
|
0x28 <T> | call methodDesc
|
|
0x29 <T> | calli callSiteDescr
|
|
0x6F <T> | callvirt method
|
|
0x74 <T> | castclass class
|
|
0xFE 0x01 | ceq
|
|
0xFE 0x02 | cgt
|
|
0xFE 0x03 | cgt.un
|
|
0xC3 | ckfinite
|
|
0xFE 0x04 | clt
|
|
0xFE 0x05 | clt.un
|
|
0xFE 0x16 <T> | constrained. thisType
|
|
0xD3 | conv.i
|
|
0x67 | conv.i1
|
|
0x68 | conv.i2
|
|
0x69 | conv.i4
|
|
0x6A | conv.i8
|
|
0xD4 | conv.ovf.i
|
|
0x8A | conv.ovf.i.un
|
|
0xB3 | conv.ovf.i1
|
|
0x82 | conv.ovf.i1.un
|
|
0xB5 | conv.ovf.i2
|
|
0x83 | conv.ovf.i2.un
|
|
0xB7 | conv.ovf.i4
|
|
0x84 | conv.ovf.i4.un
|
|
0xB9 | conv.ovf.i8
|
|
0x85 | conv.ovf.i8.un
|
|
0xD5 | conv.ovf.u
|
|
0x8B | conv.ovf.u.un
|
|
0xB4 | conv.ovf.u1
|
|
0x86 | conv.ovf.u1.un
|
|
0xB6 | conv.ovf.u2
|
|
0x87 | conv.ovf.u2.un
|
|
0xB8 | conv.ovf.u4
|
|
0x88 | conv.ovf.u4.un
|
|
0xBA | conv.ovf.u8
|
|
0x89 | conv.ovf.u8.un
|
|
0x76 | conv.r.un
|
|
0x6B | conv.r4
|
|
0x6C | conv.r8
|
|
0xE0 | conv.u
|
|
0xD2 | conv.u1
|
|
0xD1 | conv.u2
|
|
0x6D | conv.u4
|
|
0x6E | conv.u8
|
|
0xFE 0x17 | cpblk
|
|
0x70 <T> | cpobj classTok
|
|
0x5B | div
|
|
0x5C | div.un
|
|
0x25 | dup
|
|
0xDC | endfault
|
|
0xFE 0X11 | endfilter
|
|
0xDC | endfinally
|
|
0x4C | idind.u8
|
|
0xFE 0x18 | initblk
|
|
0xFE 0x15 <T> | initobj typeTok
|
|
0x75 <T> | isinst class
|
|
0x27 <T> | jmp method
|
|
0xFE 0x09 <uint16> | ldarg index
|
|
0x02 | ldarg.0
|
|
0x03 | ldarg.1
|
|
0x04 | ldarg.2
|
|
0x05 | ldarg.3
|
|
0x0E <uint8> | ldarg.s index
|
|
0xFE 0x0A <uint16> | ldarga index
|
|
0x0F <uint8> | ldarga.s index
|
|
0x20 <int32> | ldc.i4 num
|
|
0x16 | ldc.i4.0
|
|
0x17 | ldc.i4.1
|
|
0x18 | ldc.i4.2
|
|
0x19 | ldc.i4.3
|
|
0x1A | ldc.i4.4
|
|
0x1B | ldc.i4.5
|
|
0x1C | ldc.i4.6
|
|
0x1D | ldc.i4.7
|
|
0x1E | ldc.i4.8
|
|
0x15 | ldc.i4.m1
|
|
0x1F <int8> | ldc.i4.s num
|
|
0x21 <int64> | ldc.i8 num
|
|
0x22 <float32> | ldc.r4 num
|
|
0x23 <float64> | ldc.r8 num
|
|
0xA3 <T> | ldelem <typeTok>
|
|
0x97 | ldelem.i
|
|
0x90 | ldelem.i1
|
|
0x92 | ldelem.i2
|
|
0x94 | ldelem.i4
|
|
0x96 | ldelem.i8
|
|
0x98 | ldelem.r4
|
|
0x99 | ldelem.r8
|
|
0x9A | ldelem.ref
|
|
0x91 | ldelem.u1
|
|
0x93 | ldelem.u2
|
|
0x95 | ldelem.u4
|
|
0x96 | ldelem.u8
|
|
0x8F <T> | ldelema class
|
|
0x7B <T> | ldfld field
|
|
0x7C <T> | ldflda field
|
|
0xFE 0x06 <T> | ldftn method
|
|
0x4D | ldind.i
|
|
0x46 | ldind.i1
|
|
0x48 | ldind.i2
|
|
0x4A | ldind.i4
|
|
0x4C | ldind.i8
|
|
0x4E | ldind.r4
|
|
0x4F | ldind.r8
|
|
0x50 | ldind.ref
|
|
0x47 | ldind.u1
|
|
0x49 | ldind.u2
|
|
0x4B | ldind.u4
|
|
0x8E | ldlen
|
|
0xFE 0x0C <uint16> | ldloc index
|
|
0x06 | ldloc.0
|
|
0x07 | ldloc.1
|
|
0x08 | ldloc.2
|
|
0x09 | ldloc.3
|
|
0x11 <uint8> | ldloc.s indx
|
|
0xFE 0x0D <uint16> | ldloca index
|
|
0x12 <uint8> | ldloca.s index
|
|
0x14 | ldnull
|
|
0x71 <T> | ldobj typeTok
|
|
0x7E <T> | ldsfld field
|
|
0x7F <T> | ldsflda field
|
|
0x72 <T> | ldstr mdToken
|
|
0xD0 <T> | ldtoken token
|
|
0xFE 0x07 <T> | ldvirtftn method
|
|
0xDD <int32> | leave target
|
|
0xDE <int8> | leave.s target
|
|
0xFE 0x0F | localloc
|
|
0xC6 <T> | mkrefany class
|
|
0x5A | mul
|
|
0xD8 | mul.ovf
|
|
0xD9 | mul.ovf.un
|
|
0x65 | neg
|
|
0x8D <T> | newarr etype
|
|
0x73 <T> | newobj ctor
|
|
0xFE 0x19 | no. { typecheck , rangecheck , nullcheck } [prefix]
|
|
0x00 | nop
|
|
0x66 | not
|
|
0x60 | or
|
|
0x26 | pop
|
|
0xFE 0x1E | readonly.
|
|
0xFE 0x1D | refanytype
|
|
0xC2 <T> | refanyval type
|
|
0x5D | rem
|
|
0x5E | rem.un
|
|
0x2A | ret
|
|
0xFE 0x1A | rethrow
|
|
0x62 | shl
|
|
0x63 | shr
|
|
0x64 | shr.un
|
|
0xFE 0x1C <T> | sizeof valType
|
|
0xFE 0x0B <uint16> | starg num
|
|
0x10 <uint8> | starg.s num
|
|
0xA4 <T> | stelem typeTok
|
|
0x9B | stelem.i
|
|
0x9C | stelem.i1
|
|
0x9D | stelem.i2
|
|
0x9E | stelem.i4
|
|
0x9F | stelem.i8
|
|
0xA0 | stelem.r4
|
|
0xA1 | stelem.r8
|
|
0xA2 | stelem.ref
|
|
0x7D <T> | stfld field
|
|
0xDF | stind.i
|
|
0x52 | stind.i1
|
|
0x53 | stind.i2
|
|
0x54 | stind.i4
|
|
0x55 | stind.i8
|
|
0x56 | stind.r4
|
|
0x57 | stind.r8
|
|
0x51 | stind.ref
|
|
0xFE 0x0E <uint16> | stloc index
|
|
0x0A | stloc.0
|
|
0x0B | stloc.1
|
|
0x0C | stloc.2
|
|
0x0D | stloc.3
|
|
0x13 <uint8> | stloc.s index
|
|
0x81 <T> | stobj class
|
|
0x80 <T> | stsfld field
|
|
0x59 | sub
|
|
0xDA | sub.ovf
|
|
0xDB | sub.ovf.un
|
|
0x45 <uint32> <int32> ... <int32> | switch N, t1...tN
|
|
0xFE 0x14 | tail.
|
|
0x7A | throw
|
|
0xFE 0x12 <uint8> | unaligned. alignment
|
|
0x79 <T> | unbox valType
|
|
0xA5 <T> | unbox.any typeTok
|
|
0xFE 0x13 | volatile.
|
|
0x61 | xor
|