OpCodes クラス

定義

ILGenerator クラス メンバー (Emit(OpCode) など) によって出力されるMicrosoft中間言語 (MSIL) 命令のフィールド表現を提供します。

public ref class OpCodes
public class OpCodes
[System.Runtime.InteropServices.ComVisible(true)]
public class OpCodes
type OpCodes = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type OpCodes = class
Public Class OpCodes
継承
OpCodes
属性

次の例では、 ILGenerator を使用して OpCodesMethodBuilderに出力する動的メソッドの構築を示します。


using System;
using System.Threading;
using System.Reflection;
using System.Reflection.Emit;

class EmitWriteLineDemo {

   public static Type CreateDynamicType() {
       Type[] ctorParams = new Type[] {typeof(int),
                   typeof(int)};
    
       AppDomain myDomain = Thread.GetDomain();
       AssemblyName myAsmName = new AssemblyName();
       myAsmName.Name = "MyDynamicAssembly";

       AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(
                      myAsmName,
                      AssemblyBuilderAccess.Run);

       ModuleBuilder pointModule = myAsmBuilder.DefineDynamicModule("PointModule",
                                    "Point.dll");

       TypeBuilder pointTypeBld = pointModule.DefineType("Point",
                                  TypeAttributes.Public);

       FieldBuilder xField = pointTypeBld.DefineField("x", typeof(int),
                                                      FieldAttributes.Public);
       FieldBuilder yField = pointTypeBld.DefineField("y", typeof(int),
                                                      FieldAttributes.Public);

       Type objType = Type.GetType("System.Object");
       ConstructorInfo objCtor = objType.GetConstructor(new Type[0]);

       ConstructorBuilder pointCtor = pointTypeBld.DefineConstructor(
                                   MethodAttributes.Public,
                                   CallingConventions.Standard,
                                   ctorParams);
       ILGenerator ctorIL = pointCtor.GetILGenerator();

       // First, you build the constructor.
       ctorIL.Emit(OpCodes.Ldarg_0);
       ctorIL.Emit(OpCodes.Call, objCtor);
       ctorIL.Emit(OpCodes.Ldarg_0);
       ctorIL.Emit(OpCodes.Ldarg_1);
       ctorIL.Emit(OpCodes.Stfld, xField);
       ctorIL.Emit(OpCodes.Ldarg_0);
       ctorIL.Emit(OpCodes.Ldarg_2);
       ctorIL.Emit(OpCodes.Stfld, yField);
       ctorIL.Emit(OpCodes.Ret);

       //  Now, you'll build a method to output some information on the
       // inside your dynamic class. This method will have the following
       // definition in C#:
    //  public void WritePoint()

       MethodBuilder writeStrMthd = pointTypeBld.DefineMethod(
                                     "WritePoint",
                             MethodAttributes.Public,
                                             typeof(void),
                                             null);

       ILGenerator writeStrIL = writeStrMthd.GetILGenerator();

       // The below ILGenerator created demonstrates a few ways to create
       // string output through STDIN.

       // ILGenerator.EmitWriteLine(string) will generate a ldstr and a
       // call to WriteLine for you.

       writeStrIL.EmitWriteLine("The value of this current instance is:");

       // Here, you will do the hard work yourself. First, you need to create
       // the string we will be passing and obtain the correct WriteLine overload
       // for said string. In the below case, you are substituting in two values,
       // so the chosen overload is Console.WriteLine(string, object, object).

       String inStr = "({0}, {1})";
       Type[] wlParams = new Type[] {typeof(string),
                     typeof(object),
                     typeof(object)};

       // We need the MethodInfo to pass into EmitCall later.

       MethodInfo writeLineMI = typeof(Console).GetMethod(
                            "WriteLine",
                        wlParams);

       // Push the string with the substitutions onto the stack.
       // This is the first argument for WriteLine - the string one.

       writeStrIL.Emit(OpCodes.Ldstr, inStr);

       // Since the second argument is an object, and it corresponds to
       // to the substitution for the value of our integer field, you
       // need to box that field to an object. First, push a reference
       // to the current instance, and then push the value stored in
       // field 'x'. We need the reference to the current instance (stored
       // in local argument index 0) so Ldfld can load from the correct
       // instance (this one).

       writeStrIL.Emit(OpCodes.Ldarg_0);
       writeStrIL.Emit(OpCodes.Ldfld, xField);

       // Now, we execute the box opcode, which pops the value of field 'x',
       // returning a reference to the integer value boxed as an object.

       writeStrIL.Emit(OpCodes.Box, typeof(int));

       // Atop the stack, you'll find our string inStr, followed by a reference
       // to the boxed value of 'x'. Now, you need to likewise box field 'y'.

       writeStrIL.Emit(OpCodes.Ldarg_0);
       writeStrIL.Emit(OpCodes.Ldfld, yField);
       writeStrIL.Emit(OpCodes.Box, typeof(int));

       // Now, you have all of the arguments for your call to
       // Console.WriteLine(string, object, object) atop the stack:
       // the string InStr, a reference to the boxed value of 'x', and
       // a reference to the boxed value of 'y'.

       // Call Console.WriteLine(string, object, object) with EmitCall.

       writeStrIL.EmitCall(OpCodes.Call, writeLineMI, null);

       // Lastly, EmitWriteLine can also output the value of a field
       // using the overload EmitWriteLine(FieldInfo).

       writeStrIL.EmitWriteLine("The value of 'x' is:");
       writeStrIL.EmitWriteLine(xField);
       writeStrIL.EmitWriteLine("The value of 'y' is:");
       writeStrIL.EmitWriteLine(yField);

       // Since we return no value (void), the ret opcode will not
       // return the top stack value.

       writeStrIL.Emit(OpCodes.Ret);

       return pointTypeBld.CreateType();
   }

   public static void Main() {

      object[] ctorParams = new object[2];

      Console.Write("Enter a integer value for X: ");
      string myX = Console.ReadLine();
      Console.Write("Enter a integer value for Y: ");
      string myY = Console.ReadLine();

      Console.WriteLine("---");

      ctorParams[0] = Convert.ToInt32(myX);
      ctorParams[1] = Convert.ToInt32(myY);

      Type ptType = CreateDynamicType();

      object ptInstance = Activator.CreateInstance(ptType, ctorParams);
      ptType.InvokeMember("WritePoint",
              BindingFlags.InvokeMethod,
              null,
              ptInstance,
              new object[0]);
   }
}

Imports System.Threading
Imports System.Reflection
Imports System.Reflection.Emit

 _

Class EmitWriteLineDemo
   
   
   Public Shared Function CreateDynamicType() As Type

      Dim ctorParams() As Type = {GetType(Integer), GetType(Integer)}
      
      Dim myDomain As AppDomain = Thread.GetDomain()
      Dim myAsmName As New AssemblyName()
      myAsmName.Name = "MyDynamicAssembly"
      
      Dim myAsmBuilder As AssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.RunAndSave)
      
      Dim pointModule As ModuleBuilder = myAsmBuilder.DefineDynamicModule("PointModule", "Point.dll")
      
      Dim pointTypeBld As TypeBuilder = pointModule.DefineType("Point", _
                                   TypeAttributes.Public)
      
      Dim xField As FieldBuilder = pointTypeBld.DefineField("x", _
                                GetType(Integer), _
                                FieldAttributes.Public)
      Dim yField As FieldBuilder = pointTypeBld.DefineField("y", _
                                GetType(Integer), _
                                FieldAttributes.Public)
      
      
      Dim objType As Type = Type.GetType("System.Object")
      Dim objCtor As ConstructorInfo = objType.GetConstructor(New Type(){})
      
      Dim pointCtor As ConstructorBuilder = pointTypeBld.DefineConstructor( _
                             MethodAttributes.Public, _
                             CallingConventions.Standard, _
                             ctorParams)
      Dim ctorIL As ILGenerator = pointCtor.GetILGenerator()
      
      
      ' First, you build the constructor.

      ctorIL.Emit(OpCodes.Ldarg_0)
      ctorIL.Emit(OpCodes.Call, objCtor)
      ctorIL.Emit(OpCodes.Ldarg_0)
      ctorIL.Emit(OpCodes.Ldarg_1)
      ctorIL.Emit(OpCodes.Stfld, xField)
      ctorIL.Emit(OpCodes.Ldarg_0)
      ctorIL.Emit(OpCodes.Ldarg_2)
      ctorIL.Emit(OpCodes.Stfld, yField)
      ctorIL.Emit(OpCodes.Ret)
      
      '  Now, you'll build a method to output some information on the
      ' inside your dynamic class. This method will have the following
      ' definition in C#:
      '  Public Sub WritePoint() 

      Dim writeStrMthd As MethodBuilder = pointTypeBld.DefineMethod("WritePoint", _
                                    MethodAttributes.Public, _
                                    Nothing, Nothing)
      
      Dim writeStrIL As ILGenerator = writeStrMthd.GetILGenerator()
      
      ' The below ILGenerator created demonstrates a few ways to create
      ' string output through STDIN. 
      ' ILGenerator.EmitWriteLine(string) will generate a ldstr and a 
      ' call to WriteLine for you.

      writeStrIL.EmitWriteLine("The value of this current instance is:")
      
      ' Here, you will do the hard work yourself. First, you need to create
      ' the string we will be passing and obtain the correct WriteLine overload
      ' for said string. In the below case, you are substituting in two values,
      ' so the chosen overload is Console.WriteLine(string, object, object).

      Dim inStr As [String] = "({0}, {1})"
      Dim wlParams() As Type = {GetType(String), GetType(Object), GetType(Object)}
      
      ' We need the MethodInfo to pass into EmitCall later.

      Dim writeLineMI As MethodInfo = GetType(Console).GetMethod("WriteLine", wlParams)
      
      ' Push the string with the substitutions onto the stack.
      ' This is the first argument for WriteLine - the string one. 

      writeStrIL.Emit(OpCodes.Ldstr, inStr)
      
      ' Since the second argument is an object, and it corresponds to
      ' to the substitution for the value of our integer field, you 
      ' need to box that field to an object. First, push a reference
      ' to the current instance, and then push the value stored in
      ' field 'x'. We need the reference to the current instance (stored
      ' in local argument index 0) so Ldfld can load from the correct
      ' instance (this one).

      writeStrIL.Emit(OpCodes.Ldarg_0)
      writeStrIL.Emit(OpCodes.Ldfld, xField)
      
      ' Now, we execute the box opcode, which pops the value of field 'x',
      ' returning a reference to the integer value boxed as an object.

      writeStrIL.Emit(OpCodes.Box, GetType(Integer))
      
      ' Atop the stack, you'll find our string inStr, followed by a reference
      ' to the boxed value of 'x'. Now, you need to likewise box field 'y'.

      writeStrIL.Emit(OpCodes.Ldarg_0)
      writeStrIL.Emit(OpCodes.Ldfld, yField)
      writeStrIL.Emit(OpCodes.Box, GetType(Integer))
      
      ' Now, you have all of the arguments for your call to
      ' Console.WriteLine(string, object, object) atop the stack:
      ' the string InStr, a reference to the boxed value of 'x', and
      ' a reference to the boxed value of 'y'.
      ' Call Console.WriteLine(string, object, object) with EmitCall.

      writeStrIL.EmitCall(OpCodes.Call, writeLineMI, Nothing)
      
      ' Lastly, EmitWriteLine can also output the value of a field
      ' using the overload EmitWriteLine(FieldInfo).

      writeStrIL.EmitWriteLine("The value of 'x' is:")
      writeStrIL.EmitWriteLine(xField)
      writeStrIL.EmitWriteLine("The value of 'y' is:")
      writeStrIL.EmitWriteLine(yField)
      
      ' Since we return no value (void), the ret opcode will not
      ' return the top stack value.

      writeStrIL.Emit(OpCodes.Ret)
      
      Return pointTypeBld.CreateType()

   End Function 'CreateDynamicType
    
   
   Public Shared Sub Main()
      
      Dim ctorParams(1) As Object
      
      Console.Write("Enter a integer value for X: ")
      Dim myX As String = Console.ReadLine()
      Console.Write("Enter a integer value for Y: ")
      Dim myY As String = Console.ReadLine()
      
      Console.WriteLine("---")
      
      ctorParams(0) = Convert.ToInt32(myX)
      ctorParams(1) = Convert.ToInt32(myY)
      
      Dim ptType As Type = CreateDynamicType()

      Dim ptInstance As Object = Activator.CreateInstance(ptType, ctorParams)

      ptType.InvokeMember("WritePoint", _
              BindingFlags.InvokeMethod, _
              Nothing, ptInstance, Nothing)

   End Sub

End Class

注釈

メンバー オペコードの詳細については、共通言語インフラストラクチャ (CLI) のドキュメント、特に"Partition III: CIL Instruction Set" と "Partition II: Metadata Definition and Semantics" を参照してください。 詳細については、 ECMA 335 共通言語インフラストラクチャ (CLI) を参照してください。

フィールド

名前 説明
Add

2 つの値を追加し、結果を評価スタックにプッシュします。

Add_Ovf

2 つの整数を追加し、オーバーフロー チェックを実行し、結果を評価スタックにプッシュします。

Add_Ovf_Un

2 つの符号なし整数値を追加し、オーバーフロー チェックを実行し、結果を評価スタックにプッシュします。

And

2 つの値のビットごとの AND を計算し、結果を評価スタックにプッシュします。

Arglist

現在のメソッドの引数リストへのアンマネージ ポインターを返します。

Beq

2 つの値が等しい場合は、制御をターゲット命令に転送します。

Beq_S

2 つの値が等しい場合は、制御をターゲット命令 (短い形式) に転送します。

Bge

最初の値が 2 番目の値以上の場合は、制御をターゲット命令に転送します。

Bge_S

最初の値が 2 番目の値以上の場合は、制御をターゲット命令 (短い形式) に転送します。

Bge_Un

符号なし整数値または順序なし浮動小数点値を比較するときに、最初の値が 2 番目の値より大きい場合は、制御をターゲット命令に転送します。

Bge_Un_S

符号なし整数値または順序なし浮動小数点値を比較するときに、最初の値が 2 番目の値より大きい場合は、ターゲット命令 (短い形式) に制御を転送します。

Bgt

最初の値が 2 番目の値より大きい場合は、制御をターゲット命令に転送します。

Bgt_S

最初の値が 2 番目の値より大きい場合は、制御をターゲット命令 (短い形式) に転送します。

Bgt_Un

符号なし整数値または順序なし浮動小数点値を比較するときに、最初の値が 2 番目の値より大きい場合は、制御をターゲット命令に転送します。

Bgt_Un_S

符号なし整数値または順序なし浮動小数点値を比較するときに、最初の値が 2 番目の値より大きい場合は、ターゲット命令 (短い形式) に制御を転送します。

Ble

最初の値が 2 番目の値以下の場合は、制御をターゲット命令に転送します。

Ble_S

最初の値が 2 番目の値以下の場合は、制御をターゲット命令 (短い形式) に転送します。

Ble_Un

符号なし整数値または順序なし浮動小数点値を比較するときに、最初の値が 2 番目の値以下の場合は、制御をターゲット命令に転送します。

Ble_Un_S

符号なし整数値または順序なし浮動小数点値を比較するときに、最初の値が 2 番目の値以下の場合は、制御をターゲット命令 (短い形式) に転送します。

Blt

最初の値が 2 番目の値より小さい場合、制御をターゲット命令に転送します。

Blt_S

最初の値が 2 番目の値より小さい場合は、制御をターゲット命令 (短い形式) に転送します。

Blt_Un

符号なし整数値または順序なし浮動小数点値を比較するときに、最初の値が 2 番目の値より小さい場合に、制御をターゲット命令に転送します。

Blt_Un_S

符号なし整数値または順序なし浮動小数点値を比較するときに、最初の値が 2 番目の値より小さい場合は、ターゲット命令 (短い形式) に制御を転送します。

Bne_Un

2 つの符号なし整数値または順序なし浮動小数点値が等しくない場合に、制御をターゲット命令に転送します。

Bne_Un_S

2 つの符号なし整数値または順序なし浮動小数点値が等しくない場合に、制御をターゲット命令 (短い形式) に転送します。

Box

値型をオブジェクト参照 (型 O) に変換します。

Br

無条件に制御をターゲット命令に転送します。

Br_S

無条件に制御をターゲット命令 (短い形式) に転送します。

Break

ブレークポイントがトリップされたことをデバッガーに通知するように共通言語インフラストラクチャ (CLI) に通知します。

Brfalse

valuefalse、null 参照 (Visual Basic では Nothing)、または 0 の場合は、ターゲット命令に制御を転送します。

Brfalse_S

valuefalse、null 参照、またはゼロの場合、制御をターゲット命令に転送します。

Brtrue

valueが null ではなくtrueまたはゼロ以外の場合は、ターゲット命令に制御を転送します。

Brtrue_S

valueが null またはゼロ以外のtrueの場合は、ターゲット命令 (短い形式) に制御を転送します。

Call

渡されたメソッド記述子によって示されるメソッドを呼び出します。

Calli

呼び出し規約で記述された引数を使用して、評価スタックで示されるメソッドを (エントリ ポイントへのポインターとして) 呼び出します。

Callvirt

オブジェクトで遅延バインディング メソッドを呼び出し、戻り値を評価スタックにプッシュします。

Castclass

指定したクラスへの参照によって渡されたオブジェクトのキャストを試みます。

Ceq

2 つの値を比較します。 等しい場合、整数値 1 (int32) が評価スタックにプッシュされます。それ以外の場合は、0 (int32) が評価スタックにプッシュされます。

Cgt

2 つの値を比較します。 最初の値が 2 番目の値より大きい場合、整数値 1 (int32) が評価スタックにプッシュされます。それ以外の場合は、0 (int32) が評価スタックにプッシュされます。

Cgt_Un

2 つの符号なし値または順序なし値を比較します。 最初の値が 2 番目の値より大きい場合、整数値 1 (int32) が評価スタックにプッシュされます。それ以外の場合は、0 (int32) が評価スタックにプッシュされます。

Ckfinite

値が有限の数値でない場合は、 ArithmeticException をスローします。

Clt

2 つの値を比較します。 最初の値が 2 番目の値より小さい場合、整数値 1 (int32) が評価スタックにプッシュされます。それ以外の場合は、0 (int32) が評価スタックにプッシュされます。

Clt_Un

value1およびvalue2の符号なし値または順序なし値を比較します。 value1value2未満の場合は、整数値 1 (int32) が評価スタックにプッシュされます。それ以外の場合は、0 (int32) が評価スタックにプッシュされます。

Constrained

仮想メソッド呼び出しが行われる型を制約します。

Conv_I

評価スタックの上にある値を native intに変換します。

Conv_I1

評価スタックの上にある値を int8に変換し、それを int32に拡張 (パッド) します。

Conv_I2

評価スタックの上にある値を int16に変換し、それを int32に拡張 (パッド) します。

Conv_I4

評価スタックの上にある値を int32に変換します。

Conv_I8

評価スタックの上にある値を int64に変換します。

Conv_Ovf_I

評価スタックの上にある符号付き値を符号付き native intに変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_I_Un

評価スタックの上にある符号なし値を符号付き native intに変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_I1

評価スタックの上にある符号付き値を符号付き int8 に変換し、それを int32に拡張し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_I1_Un

評価スタックの上にある符号なし値を符号付き int8 に変換し、それを int32に拡張し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_I2

評価スタックの上にある符号付き値を符号付き int16 に変換し、それを int32に拡張し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_I2_Un

評価スタックの上にある符号なし値を符号付き int16 に変換し、それを int32に拡張し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_I4

評価スタックの上にある符号付き値を符号付き int32に変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_I4_Un

評価スタックの上にある符号なし値を符号付き int32に変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_I8

評価スタックの上にある符号付き値を符号付き int64に変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_I8_Un

評価スタックの上にある符号なし値を符号付き int64に変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_U

評価スタックの上にある符号付き値を unsigned native intに変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_U_Un

評価スタックの上にある符号なし値を unsigned native intに変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_U1

評価スタックの上にある符号付き値を unsigned int8 に変換し、 int32に拡張し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_U1_Un

評価スタックの上にある符号なし値を unsigned int8 に変換し、 int32に拡張し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_U2

評価スタックの上にある符号付き値を unsigned int16 に変換し、 int32に拡張し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_U2_Un

評価スタックの上にある符号なし値を unsigned int16 に変換し、 int32に拡張し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_U4

評価スタックの上にある符号付き値を unsigned int32に変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_U4_Un

評価スタックの上にある符号なし値を unsigned int32に変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_U8

評価スタックの上にある符号付き値を unsigned int64に変換し、オーバーフロー時に OverflowException をスローします。

Conv_Ovf_U8_Un

評価スタックの上にある符号なし値を unsigned int64に変換し、オーバーフロー時に OverflowException をスローします。

Conv_R_Un

評価スタックの上にある符号なし整数値を float32に変換します。

Conv_R4

評価スタックの上にある値を float32に変換します。

Conv_R8

評価スタックの上にある値を float64に変換します。

Conv_U

評価スタックの上にある値を unsigned native intに変換し、 native intに拡張します。

Conv_U1

評価スタックの上にある値を unsigned int8に変換し、 int32に拡張します。

Conv_U2

評価スタックの上にある値を unsigned int16に変換し、 int32に拡張します。

Conv_U4

評価スタックの上にある値を unsigned int32に変換し、 int32に拡張します。

Conv_U8

評価スタックの上にある値を unsigned int64に変換し、 int64に拡張します。

Cpblk

指定したバイト数をソース アドレスから宛先アドレスにコピーします。

Cpobj

オブジェクトのアドレスにある値の型 (型 & 、または native int) をコピー先オブジェクトのアドレス (型 & 、または native int) にコピーします。

Div

2 つの値を除算し、結果を浮動小数点 (型 F) または商 (型 int32) として評価スタックにプッシュします。

Div_Un

2 つの符号なし整数値を除算し、結果 (int32) を評価スタックにプッシュします。

Dup

評価スタックの現在の最上位の値をコピーし、そのコピーを評価スタックにプッシュします。

Endfilter

例外の filter 句から共通言語インフラストラクチャ (CLI) 例外ハンドラーに制御を戻します。

Endfinally

例外ブロックの fault 句または finally 句から共通言語インフラストラクチャ (CLI) 例外ハンドラーに制御を戻します。

Initblk

特定のアドレスで指定したメモリ ブロックを、指定したサイズと初期値に初期化します。

Initobj

指定したアドレスにある値型の各フィールドを、null 参照または適切なプリミティブ型の 0 に初期化します。

Isinst

オブジェクト参照 (型 O) が特定のクラスのインスタンスであるかどうかをテストします。

Jmp

現在のメソッドを終了し、指定したメソッドにジャンプします。

Ldarg

(指定したインデックス値によって参照される) 引数をスタックに読み込みます。

Ldarg_0

インデックス 0 の引数を評価スタックに読み込みます。

Ldarg_1

インデックス 1 の引数を評価スタックに読み込みます。

Ldarg_2

インデックス 2 の引数を評価スタックに読み込みます。

Ldarg_3

インデックス 3 の引数を評価スタックに読み込みます。

Ldarg_S

(指定した短いフォーム インデックスによって参照される) 引数を評価スタックに読み込みます。

Ldarga

評価スタックに引数アドレスを読み込みます。

Ldarga_S

引数アドレスを短い形式で評価スタックに読み込みます。

Ldc_I4

int32型の指定された値をint32として評価スタックにプッシュします。

Ldc_I4_0

0 の整数値を int32として評価スタックにプッシュします。

Ldc_I4_1

1 の整数値を int32として評価スタックにプッシュします。

Ldc_I4_2

2 の整数値を int32として評価スタックにプッシュします。

Ldc_I4_3

3 の整数値を int32として評価スタックにプッシュします。

Ldc_I4_4

4 の整数値を int32として評価スタックにプッシュします。

Ldc_I4_5

5 の整数値を int32として評価スタックにプッシュします。

Ldc_I4_6

6 の整数値を int32として評価スタックにプッシュします。

Ldc_I4_7

7 の整数値を int32として評価スタックにプッシュします。

Ldc_I4_8

8 の整数値を int32として評価スタックにプッシュします。

Ldc_I4_M1

-1 の整数値を int32として評価スタックにプッシュします。

Ldc_I4_S

指定した int8 値を int32の短い形式として評価スタックにプッシュします。

Ldc_I8

int64型の指定された値をint64として評価スタックにプッシュします。

Ldc_R4

float32型の指定された値を型 F (float) として評価スタックにプッシュします。

Ldc_R8

float64型の指定された値を型 F (float) として評価スタックにプッシュします。

Ldelem

指定した配列インデックスにある要素を、命令で指定された型として評価スタックの先頭に読み込みます。

Ldelem_I

指定した配列インデックスで native int 型を持つ要素を、 native intとして評価スタックの先頭に読み込みます。

Ldelem_I1

指定した配列インデックスで int8 型を持つ要素を、 int32として評価スタックの先頭に読み込みます。

Ldelem_I2

指定した配列インデックスで int16 型を持つ要素を、 int32として評価スタックの先頭に読み込みます。

Ldelem_I4

指定した配列インデックスで int32 型を持つ要素を、 int32として評価スタックの先頭に読み込みます。

Ldelem_I8

指定した配列インデックスで int64 型を持つ要素を、 int64として評価スタックの先頭に読み込みます。

Ldelem_R4

指定した配列インデックスで float32 型を持つ要素を、評価スタックの先頭に型 F (float) として読み込みます。

Ldelem_R8

指定した配列インデックスで float64 型を持つ要素を、評価スタックの先頭に型 F (float) として読み込みます。

Ldelem_Ref

指定した配列インデックスにあるオブジェクト参照を含む要素を、評価スタックの先頭に型 O (オブジェクト参照) として読み込みます。

Ldelem_U1

指定した配列インデックスで unsigned int8 型を持つ要素を、 int32として評価スタックの先頭に読み込みます。

Ldelem_U2

指定した配列インデックスで unsigned int16 型を持つ要素を、 int32として評価スタックの先頭に読み込みます。

Ldelem_U4

指定した配列インデックスで unsigned int32 型を持つ要素を、 int32として評価スタックの先頭に読み込みます。

Ldelema

指定した配列インデックスにある配列要素のアドレスを、評価スタックの先頭に型 & (マネージド ポインター) として読み込みます。

Ldfld

参照が評価スタック上にあるオブジェクト内のフィールドの値を検索します。

Ldflda

参照が評価スタック上にあるオブジェクト内のフィールドのアドレスを検索します。

Ldftn

アンマネージ ポインター (型 native int) を、特定のメソッドを実装するネイティブ コードに評価スタックにプッシュします。

Ldind_I

native intとしてnative int型の値を間接的に評価スタックに読み込みます。

Ldind_I1

int8としてint32型の値を間接的に評価スタックに読み込みます。

Ldind_I2

int16としてint32型の値を間接的に評価スタックに読み込みます。

Ldind_I4

int32としてint32型の値を間接的に評価スタックに読み込みます。

Ldind_I8

int64としてint64型の値を間接的に評価スタックに読み込みます。

Ldind_R4

float32 の値を F (float) として評価スタックに間接的に読み込みます。

Ldind_R8

float64 の値を F (float) として評価スタックに間接的に読み込みます。

Ldind_Ref

オブジェクト参照を型 O (オブジェクト参照) として評価スタックに間接的に読み込みます。

Ldind_U1

unsigned int8としてint32型の値を間接的に評価スタックに読み込みます。

Ldind_U2

unsigned int16としてint32型の値を間接的に評価スタックに読み込みます。

Ldind_U4

unsigned int32としてint32型の値を間接的に評価スタックに読み込みます。

Ldlen

0 から始まる 1 次元配列の要素数を評価スタックにプッシュします。

Ldloc

特定のインデックスにあるローカル変数を評価スタックに読み込みます。

Ldloc_0

インデックス 0 のローカル変数を評価スタックに読み込みます。

Ldloc_1

インデックス 1 のローカル変数を評価スタックに読み込みます。

Ldloc_2

インデックス 2 のローカル変数を評価スタックに読み込みます。

Ldloc_3

インデックス 3 のローカル変数を評価スタックに読み込みます。

Ldloc_S

特定のインデックスにあるローカル変数を、短い形式の評価スタックに読み込みます。

Ldloca

特定のインデックスにあるローカル変数のアドレスを評価スタックに読み込みます。

Ldloca_S

特定のインデックスにあるローカル変数のアドレスを、短い形式で評価スタックに読み込みます。

Ldnull

null 参照 (型 O) を評価スタックにプッシュします。

Ldobj

アドレスが指す値型オブジェクトを評価スタックの先頭にコピーします。

Ldsfld

静的フィールドの値を評価スタックにプッシュします。

Ldsflda

静的フィールドのアドレスを評価スタックにプッシュします。

Ldstr

メタデータに格納されている文字列リテラルに新しいオブジェクト参照をプッシュします。

Ldtoken

メタデータ トークンをランタイム表現に変換し、評価スタックにプッシュします。

Ldvirtftn

アンマネージ ポインター (型 native int) を、指定したオブジェクトに関連付けられた特定の仮想メソッドを実装するネイティブ コードを評価スタックにプッシュします。

Leave

コードの保護された領域を終了し、無条件に特定のターゲット命令に制御を転送します。

Leave_S

コードの保護された領域を終了し、無条件に制御をターゲット命令 (短い形式) に転送します。

Localloc

ローカル動的メモリ プールから特定のバイト数を割り当て、最初に割り当てられたバイトのアドレス (一時的なポインター、型 *) を評価スタックにプッシュします。

Mkrefany

特定の型のインスタンスへの型指定された参照を評価スタックにプッシュします。

Mul

2 つの値を乗算し、評価スタックに結果をプッシュします。

Mul_Ovf

2 つの整数値を乗算し、オーバーフロー チェックを実行し、結果を評価スタックにプッシュします。

Mul_Ovf_Un

2 つの符号なし整数値を乗算し、オーバーフロー チェックを実行し、結果を評価スタックにプッシュします。

Neg

値を否定し、結果を評価スタックにプッシュします。

Newarr

要素が特定の型の 0 から始まる 1 次元配列へのオブジェクト参照を評価スタックにプッシュします。

Newobj

新しいオブジェクトまたは値型の新しいインスタンスを作成し、オブジェクト参照 (型 O) を評価スタックにプッシュします。

Nop

オペコードにパッチが適用されている場合はスペースを塗りつぶします。 処理サイクルを使用できますが、意味のある操作は実行されません。

Not

スタック上の整数値のビットごとの補数を計算し、結果を同じ型として評価スタックにプッシュします。

Or

スタックの上にある 2 つの整数値のビットごとの補数を計算し、結果を評価スタックにプッシュします。

Pop

評価スタックの上にある現在の値を削除します。

Prefix1

これは予約済み命令です。

Prefix2

これは予約済み命令です。

Prefix3

これは予約済み命令です。

Prefix4

これは予約済み命令です。

Prefix5

これは予約済み命令です。

Prefix6

これは予約済み命令です。

Prefix7

これは予約済み命令です。

Prefixref

これは予約済み命令です。

Readonly

後続の配列アドレス操作が実行時に型チェックを実行せず、変更可能性が制限されているマネージド ポインターを返すように指定します。

Refanytype

型指定された参照に埋め込まれた型トークンを取得します。

Refanyval

型指定された参照に埋め込まれたアドレス (型 &) を取得します。

Rem

2 つの値を除算し、剰余を評価スタックにプッシュします。

Rem_Un

2 つの符号なし値を除算し、剰余を評価スタックにプッシュします。

Ret

現在のメソッドから戻り、呼び出し先の評価スタックから呼び出し元の評価スタックに戻り値 (存在する場合) をプッシュします。

Rethrow

現在の例外を再スローします。

Shl

整数値を指定したビット数だけ左 (ゼロ単位) にシフトし、結果を評価スタックにプッシュします。

Shr

整数値 (in sign) を指定されたビット数だけ右にシフトし、結果を評価スタックにプッシュします。

Shr_Un

符号なし整数値 (ゼロ単位) を指定されたビット数だけ右にシフトし、結果を評価スタックにプッシュします。

Sizeof

指定された値型のサイズをバイト単位で評価スタックにプッシュします。

Starg

指定したインデックス位置にある引数スロットの評価スタックの上に値を格納します。

Starg_S

指定したインデックスの短い形式で、引数スロットの評価スタックの上に値を格納します。

Stelem

特定のインデックスにある配列要素を、命令で型が指定されている評価スタックの値に置き換えます。

Stelem_I

特定のインデックスにある配列要素を評価スタックの native int 値に置き換えます。

Stelem_I1

特定のインデックスにある配列要素を評価スタックの int8 値に置き換えます。

Stelem_I2

特定のインデックスにある配列要素を評価スタックの int16 値に置き換えます。

Stelem_I4

特定のインデックスにある配列要素を評価スタックの int32 値に置き換えます。

Stelem_I8

特定のインデックスにある配列要素を評価スタックの int64 値に置き換えます。

Stelem_R4

特定のインデックスにある配列要素を評価スタックの float32 値に置き換えます。

Stelem_R8

特定のインデックスにある配列要素を評価スタックの float64 値に置き換えます。

Stelem_Ref

特定のインデックスにある配列要素を、評価スタック上のオブジェクト ref 値 (型 O) に置き換えます。

Stfld

オブジェクト参照またはポインターのフィールドに格納されている値を新しい値に置き換えます。

Stind_I

指定したアドレスに native int 型の値を格納します。

Stind_I1

指定したアドレスに int8 型の値を格納します。

Stind_I2

指定したアドレスに int16 型の値を格納します。

Stind_I4

指定したアドレスに int32 型の値を格納します。

Stind_I8

指定したアドレスに int64 型の値を格納します。

Stind_R4

指定したアドレスに float32 型の値を格納します。

Stind_R8

指定したアドレスに float64 型の値を格納します。

Stind_Ref

指定されたアドレスにオブジェクト参照値を格納します。

Stloc

評価スタックの先頭から現在の値をポップし、指定したインデックス位置にあるローカル変数リストに格納します。

Stloc_0

評価スタックの先頭から現在の値をポップし、インデックス 0 のローカル変数リストに格納します。

Stloc_1

評価スタックの先頭から現在の値をポップし、インデックス 1 のローカル変数リストに格納します。

Stloc_2

評価スタックの先頭から現在の値をポップし、インデックス 2 のローカル変数リストに格納します。

Stloc_3

評価スタックの先頭から現在の値をポップし、インデックス 3 のローカル変数リストに格納します。

Stloc_S

評価スタックの上部から現在の値をポップし、 index (短い形式) のローカル変数リストに格納します。

Stobj

指定した型の値を評価スタックから指定されたメモリ アドレスにコピーします。

Stsfld

静的フィールドの値を評価スタックの値に置き換えます。

Sub

ある値を別の値から減算し、結果を評価スタックにプッシュします。

Sub_Ovf

ある整数値を別の整数値から減算し、オーバーフロー チェックを実行して、結果を評価スタックにプッシュします。

Sub_Ovf_Un

1 つの符号なし整数値を別の符号なし整数値から減算し、オーバーフロー チェックを実行して、結果を評価スタックにプッシュします。

Switch

ジャンプ テーブルを実装します。

Tailcall

実際の呼び出し命令が実行される前に現在のメソッドのスタック フレームが削除されるように、後置メソッド呼び出し命令を実行します。

Throw

評価スタックで現在例外オブジェクトをスローします。

Unaligned

評価スタックの現在の上にあるアドレスが、直後の ldindstindldfldstfldldobjstobjinitblk、または cpblk 命令の自然なサイズに合わせられない可能性があることを示します。

Unbox

値型のボックス化された表現を、ボックス化されていないフォームに変換します。

Unbox_Any

命令で指定された型のボックス化された表現を、ボックス化されていないフォームに変換します。

Volatile

評価スタックの上にあるアドレスが揮発性である可能性があり、その場所を読み取った結果をキャッシュできないか、その場所への複数のストアを抑制できないことを指定します。

Xor

評価スタック上の上位 2 つの値のビットごとの XOR を計算し、結果を評価スタックにプッシュします。

メソッド

名前 説明
Equals(Object)

指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
TakesSingleByteArgument(OpCode)

指定されたオペコードが 1 バイト引数を受け取る場合は true または false を返します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象