Partager via


OpCodes Classe

Définition

Fournit les représentations des champs des instructions MSIL (Microsoft Intermediate Language) pour l'émission par les membres de classe ILGenerator (par exemple, Emit(OpCode)).

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
Héritage
OpCodes
Attributs

Exemples

L’exemple suivant illustre la construction d’une méthode dynamique utilisant ILGenerator pour émettre OpCodes dans un MethodBuilder.

using namespace System;
using namespace System::Threading;
using namespace System::Reflection;
using namespace System::Reflection::Emit;
Type^ CreateDynamicType()
{
   array<Type^>^ctorParams = {int::typeid,int::typeid};
   AppDomain^ myDomain = Thread::GetDomain();
   AssemblyName^ myAsmName = gcnew 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", int::typeid, FieldAttributes::Public );
   FieldBuilder^ yField = pointTypeBld->DefineField( "y", int::typeid, FieldAttributes::Public );
   Type^ objType = Type::GetType( "System.Object" );
   ConstructorInfo^ objCtor = objType->GetConstructor( gcnew array<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, void::typeid, nullptr );
   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})";
   array<Type^>^wlParams = {String::typeid,Object::typeid,Object::typeid};
   
   // We need the MethodInfo to pass into EmitCall later.
   MethodInfo^ writeLineMI = Console::typeid->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, int::typeid );
   
   // 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, int::typeid );
   
   // 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, nullptr );
   
   // 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();
}

int main()
{
   array<Object^>^ctorParams = gcnew array<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, nullptr, ptInstance, gcnew array<Object^>(0) );
}

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

Remarques

Pour obtenir une description détaillée des opcodes membres, consultez la documentation cli (Common Language Infrastructure), en particulier « Partition III : Jeu d’instructions CIL » et « Partition II : Définition et sémantique des métadonnées ». Pour plus d’informations, consultez ECMA 335 Common Language Infrastructure (CLI).

Champs

Add

Ajoute deux valeurs et exécute un push du résultat dans la pile d'évaluation.

Add_Ovf

Ajoute deux entiers, effectue un contrôle de dépassement de capacité et exécute un push du résultat dans la pile d'évaluation.

Add_Ovf_Un

Ajoute deux valeurs entières non signées, effectue un contrôle de dépassement de capacité et exécute un push du résultat dans la pile d'évaluation.

And

Calcule l'opération de bits AND de deux valeurs et exécute un push du résultat dans la pile d'évaluation.

Arglist

Retourne un pointeur non managé vers la liste d'arguments de la méthode actuelle.

Beq

Transfère le contrôle à une instruction cible si les deux valeurs sont égales.

Beq_S

Transfère le contrôle à une instruction cible (forme abrégée) si les deux valeurs sont égales.

Bge

Transfère le contrôle à une instruction cible si la première valeur est supérieure ou égale à la deuxième.

Bge_S

Transfère le contrôle à une instruction cible (forme abrégée) si la première valeur est supérieure ou égale à la deuxième.

Bge_Un

Transfère le contrôle à une instruction cible si la première valeur est supérieure à la deuxième lors de la comparaison des valeurs entières non signées ou des valeurs float non ordonnées.

Bge_Un_S

Transfère le contrôle à une instruction cible (forme abrégée) si la première valeur est supérieure à la deuxième lors de la comparaison des valeurs entières non signées ou des valeurs float non ordonnées.

Bgt

Transfère le contrôle à une instruction cible si la première valeur est supérieure à la deuxième.

Bgt_S

Transfère le contrôle à une instruction cible (forme abrégée) si la première valeur est supérieure à la deuxième.

Bgt_Un

Transfère le contrôle à une instruction cible si la première valeur est supérieure à la deuxième lors de la comparaison des valeurs entières non signées ou des valeurs float non ordonnées.

Bgt_Un_S

Transfère le contrôle à une instruction cible (forme abrégée) si la première valeur est supérieure à la deuxième lors de la comparaison des valeurs entières non signées ou des valeurs float non ordonnées.

Ble

Transfère le contrôle à une instruction cible si la première valeur est inférieure ou égale à la deuxième.

Ble_S

Transfère le contrôle à une instruction cible (forme abrégée) si la première valeur est inférieure ou égale à la deuxième.

Ble_Un

Transfère le contrôle à une instruction cible si la première valeur est inférieure ou égale à la deuxième lors de la comparaison des valeurs entières non signées ou des valeurs float non ordonnées.

Ble_Un_S

Transfère le contrôle à une instruction cible (forme abrégée) si la première valeur est inférieure ou égale à la deuxième lors de la comparaison des valeurs entières non signées ou des valeurs float non ordonnées.

Blt

Transfère le contrôle à une instruction cible si la première valeur est inférieure à la deuxième.

Blt_S

Transfère le contrôle à une instruction cible (forme abrégée) si la première valeur est inférieure à la deuxième.

Blt_Un

Transfère le contrôle à une instruction cible si la première valeur est inférieure à la deuxième lors de la comparaison des valeurs entières non signées ou des valeurs float non ordonnées.

Blt_Un_S

Transfère le contrôle à une instruction cible (forme abrégée) si la première valeur est inférieure à la deuxième lors de la comparaison des valeurs entières non signées ou des valeurs float non ordonnées.

Bne_Un

Transfère le contrôle à une instruction cible lorsque deux valeurs entières non signées ou valeurs float non ordonnées ne sont pas égales.

Bne_Un_S

Transfère le contrôle à une instruction cible lorsque deux valeurs entières non signées ou valeurs float non ordonnées ne sont pas égales.

Box

Convertit un type valeur en référence d'objet (type O).

Br

Transfère le contrôle à une instruction cible de manière non conditionnelle.

Br_S

Transfère le contrôle à une instruction cible de manière non conditionnelle (forme abrégée).

Break

Active l'infrastructure CLI de façon à informer le débogueur qu'un point d'arrêt a été dépassé.

Brfalse

Transfère le contrôle à une instruction cible si value est false, une référence null (Nothing en Visual Basic) ou zéro.

Brfalse_S

Transfère le contrôle à une instruction cible si value est false, une référence null ou zéro.

Brtrue

Transfère le contrôle à une instruction cible si value est true, non null ou différent de zéro.

Brtrue_S

Transfère le contrôle à une instruction cible (forme abrégée) si value est true, non null ou différent de zéro.

Call

Appelle la méthode indiquée par le descripteur de méthode passé.

Calli

Appelle la méthode indiquée dans la pile d'évaluation (sous la forme d'un pointeur vers un point d'entrée) avec les arguments décrits par une convention d'appel.

Callvirt

Appelle une méthode à liaison tardive sur un objet, en exécutant un push de la valeur de retour dans la pile d'évaluation.

Castclass

Tente d'effectuer un cast d'un objet passé par référence en classe spécifiée.

Ceq

Compare deux valeurs. Si elles sont égales, la valeur entière 1 ((int32) fait l'objet d'un push dans la pile d'évaluation ; sinon, le push est exécuté sur la valeur 0 (int32).

Cgt

Compare deux valeurs. Si la première valeur est supérieure à la deuxième, la valeur entière 1 ((int32) fait l'objet d'un push dans la pile d'évaluation ; sinon, le push est exécuté sur la valeur 0 (int32).

Cgt_Un

Compare deux valeurs non signées ou non ordonnées. Si la première valeur est supérieure à la deuxième, la valeur entière 1 ((int32) fait l'objet d'un push dans la pile d'évaluation ; sinon, le push est exécuté sur la valeur 0 (int32).

Ckfinite

Lève ArithmeticException si la valeur n'est pas un nombre fini.

Clt

Compare deux valeurs. Si la première valeur est inférieure à la deuxième, la valeur entière 1 ((int32) fait l'objet d'un push dans la pile d'évaluation ; sinon, le push est exécuté sur la valeur 0 (int32).

Clt_Un

Compare les valeurs non signées ou non ordonnées value1 et value2. Si value1 est inférieur à value2, la valeur entière 1 ((int32) fait alors l'objet d'un push dans la pile d'évaluation ; sinon, le push est exécuté sur la valeur 0 (int32).

Constrained

Contraint le type sur lequel un appel à une méthode virtuelle est effectué.

Conv_I

Convertit la valeur située en haut de la pile d'évaluation en native int.

Conv_I1

Convertit la valeur située en haut de la pile d'évaluation en int8 et l'étend (remplit) à int32.

Conv_I2

Convertit la valeur située en haut de la pile d'évaluation en int16 et l'étend (remplit) à int32.

Conv_I4

Convertit la valeur située en haut de la pile d'évaluation en int32.

Conv_I8

Convertit la valeur située en haut de la pile d'évaluation en int64.

Conv_Ovf_I

Convertit la valeur signée située en haut de la pile d'évaluation en native int signé, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_I_Un

Convertit la valeur non signée située en haut de la pile d'évaluation en native int signé, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_I1

Convertit la valeur signée située en haut de la pile d’évaluation en int8 signé et l’étend à int32, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_I1_Un

Convertit la valeur non signée située en haut de la pile d'évaluation en int8 signé et l'étend à int32, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_I2

Convertit la valeur signée située en haut de la pile d'évaluation en int16 signé et l'étend à int32, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_I2_Un

Convertit la valeur non signée située en haut de la pile d'évaluation en int16 signé et l'étend à int32, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_I4

Convertit la valeur signée située en haut de la pile d'évaluation en int32 signé, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_I4_Un

Convertit la valeur non signée située en haut de la pile d'évaluation en int32 signé, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_I8

Convertit la valeur signée située en haut de la pile d'évaluation en int64 signé, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_I8_Un

Convertit la valeur non signée située en haut de la pile d'évaluation en int64 signé, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_U

Convertit la valeur signée située en haut de la pile d'évaluation en unsigned native int, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_U_Un

Convertit la valeur non signée située en haut de la pile d'évaluation en unsigned native int, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_U1

Convertit la valeur signée située en haut de la pile d'évaluation en unsigned int8 et l'étend à int32, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_U1_Un

Convertit la valeur non signée située en haut de la pile d'évaluation en unsigned int8 et l'étend à int32, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_U2

Convertit la valeur signée située en haut de la pile d'évaluation en unsigned int16 et l'étend à int32, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_U2_Un

Convertit la valeur non signée située en haut de la pile d'évaluation en unsigned int16 et l'étend à int32, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_U4

Convertit la valeur signée située en haut de la pile d'évaluation en unsigned int32, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_U4_Un

Convertit la valeur non signée située en haut de la pile d'évaluation en unsigned int32, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_U8

Convertit la valeur signée située en haut de la pile d'évaluation en unsigned int64, en levant OverflowException en cas de dépassement de capacité.

Conv_Ovf_U8_Un

Convertit la valeur non signée située en haut de la pile d'évaluation en unsigned int64, en levant OverflowException en cas de dépassement de capacité.

Conv_R_Un

Convertit la valeur entière non signée située en haut de la pile d'évaluation en float32.

Conv_R4

Convertit la valeur située en haut de la pile d'évaluation en float32.

Conv_R8

Convertit la valeur située en haut de la pile d'évaluation en float64.

Conv_U

Convertit la valeur située en haut de la pile d'évaluation en unsigned native int et l'étend à native int.

Conv_U1

Convertit la valeur située en haut de la pile d'évaluation en unsigned int8 et l'étend à int32.

Conv_U2

Convertit la valeur située en haut de la pile d'évaluation en unsigned int16 et l'étend à int32.

Conv_U4

Convertit la valeur située en haut de la pile d'évaluation en unsigned int32 et l'étend à int32.

Conv_U8

Convertit la valeur située en haut de la pile d'évaluation en unsigned int64 et l'étend à int64.

Cpblk

Copie un nombre d'octets spécifié d'une adresse source vers une adresse de destination.

Cpobj

Copie le type de valeur situé à l’adresse d’un objet (type , ou ) vers l’adresse de l’objet de destination (type &ou native int).native int&

Div

Divise une valeur par une autre et exécute un push du résultat en tant que valeur à virgule flottante (type F) ou quotient (type int32) dans la pile.

Div_Un

Divise une valeur entière non signée par une autre et exécute un push du résultat (int32) dans la pile.

Dup

Copie la valeur actuelle la plus haute dans la pile d'évaluation et exécute un push de la copie dans la pile d'évaluation.

Endfilter

Transfère à nouveau le contrôle de la clause filter d'une exception au gestionnaire d'exceptions CLI.

Endfinally

Transfère à nouveau le contrôle de la clause fault ou finally d'un bloc d'exception au gestionnaire d'exceptions CLI.

Initblk

Initialise un bloc de mémoire spécifié situé à une adresse spécifique en utilisant une taille et une valeur initiale données.

Initobj

Initialise tous les champs du type de valeur figurant à l'adresse spécifiée en utilisant la référence null ou la valeur 0 du type primitif qui convient.

Isinst

Vérifie si une référence d'objet (type O) est une instance d'une classe particulière.

Jmp

Quitte la méthode actuelle et passe à la méthode spécifiée.

Ldarg

Charge un argument (référencé par une valeur d'index spécifiée) dans la pile.

Ldarg_0

Charge l’argument à l’index 0 dans la pile d’évaluation.

Ldarg_1

Charge l’argument à l’index 1 dans la pile d’évaluation.

Ldarg_2

Charge l'argument à l'index 2 dans la pile d'évaluation.

Ldarg_3

Charge l’argument à l’index 3 dans la pile d’évaluation.

Ldarg_S

Charge l’argument (référencé par un index sous la forme abrégée) dans la pile d’évaluation.

Ldarga

Charge une adresse d'argument dans la pile d'évaluation.

Ldarga_S

Charge une adresse d’argument, sous la forme abrégée, dans la pile d’évaluation.

Ldc_I4

Exécute un push d'une valeur fournie de type int32 dans la pile d'évaluation en tant que int32.

Ldc_I4_0

Exécute un push de la valeur entière 0 dans la pile d'évaluation en tant que int32.

Ldc_I4_1

Exécute un envoi (push) de la valeur entière 1 dans la pile d’évaluation en tant que int32.

Ldc_I4_2

Exécute un envoi (push) de la valeur entière 2 dans la pile d’évaluation en tant que int32.

Ldc_I4_3

Exécute un envoi (push) de la valeur entière 3 dans la pile d’évaluation en tant que int32.

Ldc_I4_4

Exécute un envoi (push) de la valeur entière 4 dans la pile d’évaluation en tant que int32.

Ldc_I4_5

Exécute un envoi (push) de la valeur entière 5 dans la pile d’évaluation en tant que int32.

Ldc_I4_6

Exécute un envoi (push) de la valeur entière 6 dans la pile d’évaluation en tant que int32.

Ldc_I4_7

Exécute un envoi (push) de la valeur entière 7 dans la pile d’évaluation en tant que int32.

Ldc_I4_8

Exécute un envoi (push) de la valeur entière 8 dans la pile d’évaluation en tant que int32.

Ldc_I4_M1

Exécute un envoi (push) de la valeur entière -1 dans la pile d’évaluation en tant que int32.

Ldc_I4_S

Exécute un push de la valeur fournie int8 dans la pile d'évaluation en tant que int32 (forme abrégée).

Ldc_I8

Exécute un push d'une valeur fournie de type int64 dans la pile d'évaluation en tant que int64.

Ldc_R4

Exécute un push d'une valeur fournie de type float32 dans la pile d'évaluation en tant que type F (float).

Ldc_R8

Exécute un push d'une valeur fournie de type float64 dans la pile d'évaluation en tant que type F (float).

Ldelem

Charge l'élément à un index de tableau spécifié en haut de la pile d'évaluation en tant que type spécifié par l'instruction.

Ldelem_I

Charge l'élément avec le type native int à un index de tableau spécifié en haut de la pile d'évaluation en tant que native int.

Ldelem_I1

Charge l'élément avec le type int8 à un index de tableau spécifié en haut de la pile d'évaluation en tant que int32.

Ldelem_I2

Charge l'élément avec le type int16 à un index de tableau spécifié en haut de la pile d'évaluation en tant que int32.

Ldelem_I4

Charge l'élément avec le type int32 à un index de tableau spécifié en haut de la pile d'évaluation en tant que int32.

Ldelem_I8

Charge l'élément avec le type int64 à un index de tableau spécifié en haut de la pile d'évaluation en tant que int64.

Ldelem_R4

Charge l'élément avec le type float32 à un index de tableau spécifié en haut de la pile d'évaluation en tant que type F (float).

Ldelem_R8

Charge l'élément avec le type float64 à un index de tableau spécifié en haut de la pile d'évaluation en tant que type F (float).

Ldelem_Ref

Charge l'élément contenant une référence d'objet à un index de tableau spécifié en haut de la pile d'évaluation en tant que type O (référence d'objet).

Ldelem_U1

Charge l'élément avec le type unsigned int8 à un index de tableau spécifié en haut de la pile d'évaluation en tant que int32.

Ldelem_U2

Charge l'élément avec le type unsigned int16 à un index de tableau spécifié en haut de la pile d'évaluation en tant que int32.

Ldelem_U4

Charge l'élément avec le type unsigned int32 à un index de tableau spécifié en haut de la pile d'évaluation en tant que int32.

Ldelema

Charge l'adresse de l'élément de tableau situé à un index de tableau spécifié en haut de la pile d'évaluation en tant que type & (pointeur managé).

Ldfld

Recherche la valeur d'un champ dans l'objet dont la référence est actuellement située dans la pile d'évaluation.

Ldflda

Recherche l'adresse d'un champ dans l'objet dont la référence est actuellement située dans la pile d'évaluation.

Ldftn

Exécute un push d'un pointeur non managé (type native int) sur le code natif implémentant une méthode spécifique dans la pile d'évaluation.

Ldind_I

Charge indirectement une valeur de type native int en tant que native int dans la pile d'évaluation.

Ldind_I1

Charge indirectement une valeur de type int8 en tant que int32 dans la pile d'évaluation.

Ldind_I2

Charge indirectement une valeur de type int16 en tant que int32 dans la pile d'évaluation.

Ldind_I4

Charge indirectement une valeur de type int32 en tant que int32 dans la pile d'évaluation.

Ldind_I8

Charge indirectement une valeur de type int64 en tant que int64 dans la pile d'évaluation.

Ldind_R4

Charge indirectement une valeur de type float32 en tant que type F (float) dans la pile d'évaluation.

Ldind_R8

Charge indirectement une valeur de type float64 en tant que type F (float) dans la pile d'évaluation.

Ldind_Ref

Charge indirectement une référence d'objet en tant que type O (référence d'objet) dans la pile d'évaluation.

Ldind_U1

Charge indirectement une valeur de type unsigned int8 en tant que int32 dans la pile d'évaluation.

Ldind_U2

Charge indirectement une valeur de type unsigned int16 en tant que int32 dans la pile d'évaluation.

Ldind_U4

Charge indirectement une valeur de type unsigned int32 en tant que int32 dans la pile d'évaluation.

Ldlen

Exécute un push du nombre d'éléments d'un tableau unidimensionnel de base zéro dans la pile d'évaluation.

Ldloc

Charge la variable locale à un index spécifique dans la pile d'évaluation.

Ldloc_0

Charge la variable locale à l'index 0 dans la pile d'évaluation.

Ldloc_1

Charge la variable locale à l’index 1 dans la pile d’évaluation.

Ldloc_2

Charge la variable locale à l’index 2 dans la pile d’évaluation.

Ldloc_3

Charge la variable locale à l’index 3 dans la pile d’évaluation.

Ldloc_S

Charge la variable locale à un index spécifique dans la pile d'évaluation (forme abrégée).

Ldloca

Charge l'adresse de la variable locale à un index spécifique dans la pile d'évaluation.

Ldloca_S

Charge l'adresse de la variable locale à un index spécifique dans la pile d'évaluation (forme abrégée).

Ldnull

Exécute un push d'une référence null (type O) dans la pile d'évaluation.

Ldobj

Copie l'objet de type de valeur sur lequel pointe une adresse en haut de la pile d'évaluation.

Ldsfld

Exécute un push de la valeur d’un champ static dans la pile d’évaluation.

Ldsflda

Exécute un push de l’adresse d’un champ static dans la pile d’évaluation.

Ldstr

Exécute un push d'une nouvelle référence d'objet à un littéral de chaîne stocké dans les métadonnées.

Ldtoken

Convertit un jeton de métadonnées en sa représentation runtime et exécute un push de cette représentation dans la pile d'évaluation.

Ldvirtftn

Exécute un push d'un pointeur non managé (type native int) sur le code natif implémentant une méthode virtuelle spécifique associée à un objet spécifié dans la pile d'évaluation.

Leave

Quitte une région de code protégée, en transférant le contrôle à une instruction cible spécifique de manière non conditionnelle.

Leave_S

Quitte une région de code protégée, en transférant le contrôle à une instruction cible (forme abrégée) de manière non conditionnelle.

Localloc

Alloue un certain nombre d'octets à partir du pool de mémoires dynamique local et exécute un push de l'adresse (pointeur transitoire, type *) du premier octet alloué dans la pile d'évaluation.

Mkrefany

Exécute un push d'une référence typée à une instance d'un type spécifique dans la pile d'évaluation.

Mul

Multiplie deux valeurs et exécute un push du résultat dans la pile d'évaluation.

Mul_Ovf

Multiplie deux valeurs entières, effectue un contrôle de dépassement de capacité et exécute un push du résultat dans la pile d'évaluation.

Mul_Ovf_Un

Multiplie deux valeurs entières non signées, effectue un contrôle de dépassement de capacité et exécute un push du résultat dans la pile d'évaluation.

Neg

Met en négatif une valeur et exécute un push du résultat dans la pile d'évaluation.

Newarr

Exécute un push dans la pile d'évaluation sur une référence d'objet à un nouveau tableau unidimensionnel de base zéro dont les éléments sont d'un type spécifique.

Newobj

Crée un nouvel objet ou une nouvelle instance d'un type valeur, en exécutant un push d'une référence d'objet (type O) dans la pile d'évaluation.

Nop

Remplit l’espace si les opcodes sont corrigés. Aucune opération significative n'est exécutée bien qu'un cycle de traitement puisse être utilisé.

Not

Calcule le complément de bits de la valeur entière située en haut de la pile et exécute un push du résultat dans la pile d'évaluation en tant que type identique.

Or

Calcule le complément de bits de deux valeurs entières situées en haut de la pile et exécute un push du résultat dans la pile d'évaluation.

Pop

Supprime la valeur actuellement située en haut de la pile.

Prefix1

Cette instruction est réservée.

Prefix2

Cette instruction est réservée.

Prefix3

Cette instruction est réservée.

Prefix4

Cette instruction est réservée.

Prefix5

Cette instruction est réservée.

Prefix6

Cette instruction est réservée.

Prefix7

Cette instruction est réservée.

Prefixref

Cette instruction est réservée.

Readonly

Spécifie que l'opération d'adresse de tableau suivante n'exécute aucun contrôle de type au moment de l'exécution et qu'il retourne un pointeur managé dont la mutabilité est restreinte.

Refanytype

Récupère le jeton de type incorporé dans une référence typée.

Refanyval

Récupère l'adresse (type &) incorporée dans une référence typée.

Rem

Divise une valeur par une autre et exécute un push du reste dans la pile d'évaluation.

Rem_Un

Divise une valeur non signée par une autre et exécute un push du reste dans la pile d'évaluation.

Ret

Effectue un retour à partir de la méthode actuelle en exécutant un push d'une valeur de retour (si elle existe) à partir de la pile d'évaluation de l'appelé dans celle de l'appelant.

Rethrow

Lève de nouveau l'exception actuelle.

Shl

Déplace une valeur entière vers la gauche (décalage des zéros) d'un nombre de bits spécifié, en exécutant un push du résultat dans la pile d'évaluation.

Shr

Déplace une valeur entière (dans le signe) vers la droite d'un nombre de bits spécifié, en exécutant un push du résultat dans la pile d'évaluation.

Shr_Un

Déplace une valeur entière non signée (décalage des zéros) vers la droite d'un nombre de bits spécifié, en exécutant un push du résultat dans la pile d'évaluation.

Sizeof

Exécute un push de la taille (en octets) d'un type de valeur fourni dans la pile d'évaluation.

Starg

Stocke la valeur en haut de la pile d’évaluation à l’emplacement d’argument situé à un index spécifié.

Starg_S

Stocke la valeur en haut de la pile d’évaluation à l’emplacement d’argument situé à un index spécifié (forme abrégée).

Stelem

Remplace l'élément de tableau à un index donné par la valeur de la pile d'évaluation dont le type est spécifié dans l'instruction.

Stelem_I

Remplace l'élément de tableau situé à un index donné par la valeur native int dans la pile d'évaluation.

Stelem_I1

Remplace l'élément de tableau situé à un index donné par la valeur int8 dans la pile d'évaluation.

Stelem_I2

Remplace l'élément de tableau situé à un index donné par la valeur int16 dans la pile d'évaluation.

Stelem_I4

Remplace l'élément de tableau situé à un index donné par la valeur int32 dans la pile d'évaluation.

Stelem_I8

Remplace l'élément de tableau situé à un index donné par la valeur int64 dans la pile d'évaluation.

Stelem_R4

Remplace l'élément de tableau situé à un index donné par la valeur float32 dans la pile d'évaluation.

Stelem_R8

Remplace l'élément de tableau situé à un index donné par la valeur float64 dans la pile d'évaluation.

Stelem_Ref

Remplace l'élément de tableau situé à un index donné par la valeur de référence d'objet (type O) dans la pile d'évaluation.

Stfld

Remplace la valeur stockée dans le champ d'une référence d'objet ou d'un pointeur par une nouvelle valeur.

Stind_I

Stocke une valeur de type native int à une adresse fournie.

Stind_I1

Stocke une valeur de type int8 à une adresse fournie.

Stind_I2

Stocke une valeur de type int16 à une adresse fournie.

Stind_I4

Stocke une valeur de type int32 à une adresse fournie.

Stind_I8

Stocke une valeur de type int64 à une adresse fournie.

Stind_R4

Stocke une valeur de type float32 à une adresse fournie.

Stind_R8

Stocke une valeur de type float64 à une adresse fournie.

Stind_Ref

Stocke une valeur de référence d'objet à une adresse fournie.

Stloc

Affiche la valeur actuelle en haut de la pile d’évaluation et la stocke dans la liste des variables locales à un index spécifié.

Stloc_0

Affiche la valeur actuelle en haut de la pile d’évaluation et la stocke dans la liste des variables locales à l’index 0.

Stloc_1

Affiche la valeur actuelle en haut de la pile d’évaluation et la stocke dans la liste des variables locales à l’index 1.

Stloc_2

Affiche la valeur actuelle en haut de la pile d’évaluation et la stocke dans la liste des variables locales à l’index 2.

Stloc_3

Affiche la valeur actuelle en haut de la pile d’évaluation et la stocke dans la liste des variables locales à l’index 3.

Stloc_S

Affiche la valeur actuelle en haut de la pile d’évaluation et la stocke dans la liste des variables locales sous index (court formulaire).

Stobj

Copie une valeur d'un type spécifié de la pile d'évaluation vers une adresse mémoire fournie.

Stsfld

Remplace la valeur d’un champ static par une valeur de la pile d’évaluation.

Sub

Soustrait une valeur d'une autre et exécute un push du résultat dans la pile d'évaluation.

Sub_Ovf

Soustrait une valeur entière d'une autre, effectue un contrôle de dépassement de capacité et exécute un push du résultat dans la pile d'évaluation.

Sub_Ovf_Un

Soustrait une valeur entière non signée d'une autre, effectue un contrôle de dépassement de capacité et exécute un push du résultat dans la pile d'évaluation.

Switch

Implémente un tableau de saut.

Tailcall

Exécute une instruction d'appel de méthode suffixée afin que le frame de pile de la méthode actuelle soit supprimé avant cette exécution.

Throw

Lève l'objet exception actuellement situé dans la pile d'évaluation.

Unaligned

Indique qu'une adresse actuellement située en haut de la pile d'évaluation peut ne pas être alignée avec la taille naturelle de l'instruction ldind, stind, ldfld, stfld, ldobj, stobj, initblk ou cpblk qui suit immédiatement.

Unbox

Convertit la représentation boxed d'un type de valeur dans sa forme unboxed.

Unbox_Any

Convertit la représentation boxed d'un type spécifié dans l'instruction en forme unboxed.

Volatile

Spécifie qu'une adresse actuellement située en haut de la pile d'évaluation peut être volatile et que les résultats de la lecture de cet emplacement ne peuvent pas être mis en cache ou que plusieurs magasins situés à cet emplacement ne peuvent pas être supprimés.

Xor

Calcule l'opération de bits XOR des deux premières valeurs de la pile d'évaluation en exécutant un push du résultat dans la pile d'évaluation.

Méthodes

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
TakesSingleByteArgument(OpCode)

Retourne true ou false si l’opcode fourni utilise un argument à octet unique.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à