OpCodes Classe

Définition

Fournit des représentations de champ des instructions MSIL (Microsoft Intermediate Language) pour l’émission par les membres de classe ILGenerator (tels que 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 à l’aide ILGenerator de l’émission OpCodes dans un MethodBuilder.


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 de Common Language Infrastructure (CLI), 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

Nom Description
Add

Ajoute deux valeurs et envoie (push) le résultat dans la pile d’évaluation.

Add_Ovf

Ajoute deux entiers, effectue une vérification de dépassement de capacité et envoie le résultat sur la pile d’évaluation.

Add_Ovf_Un

Ajoute deux valeurs entières non signées, effectue une vérification de dépassement de capacité et envoie le résultat sur la pile d’évaluation.

And

Calcule le bit AND de deux valeurs et envoie le résultat sur 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 deux valeurs sont égales.

Beq_S

Transfère le contrôle à une instruction cible (forme abrégée) si 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 valeur.

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 valeur.

Bge_Un

Transfère le contrôle à une instruction cible si la première valeur est supérieure à la deuxième valeur, 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 valeur, 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 valeur.

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 valeur.

Bgt_Un

Transfère le contrôle à une instruction cible si la première valeur est supérieure à la deuxième valeur, 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 valeur, 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 valeur.

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 valeur.

Ble_Un

Transfère le contrôle à une instruction cible si la première valeur est inférieure ou égale à la deuxième valeur, 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 valeur, 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 valeur.

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 valeur.

Blt_Un

Transfère le contrôle à une instruction cible si la première valeur est inférieure à la deuxième valeur, 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 valeur, 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 des valeurs float non ordonnées ne sont pas égales.

Bne_Un_S

Transfère le contrôle à une instruction cible (formulaire court) lorsque deux valeurs entières non signées ou des 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 inconditionnellement le contrôle à une instruction cible.

Br_S

Transfère inconditionnellement le contrôle à une instruction cible (forme abrégée).

Break

Signale l’interface CLI (Common Language Infrastructure) pour informer le débogueur qu’un point d’arrêt a été triplé.

Brfalse

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

Brfalse_S

Transfère le contrôle à une instruction cible s’il value s’agit falsed’une référence null ou zéro.

Brtrue

Transfère le contrôle à une instruction cible s’il value s’agit trued’une valeur null ou non nulle.

Brtrue_S

Transfère le contrôle à une instruction cible (forme abrégée) s’il value s’agit true, non null ou non zéro.

Call

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

Calli

Appelle la méthode indiquée sur la pile d’évaluation (en tant que pointeur vers un point d’entrée) avec des arguments décrits par une convention d’appel.

Callvirt

Appelle une méthode à liaison tardive sur un objet, en transmettant la valeur de retour sur la pile d’évaluation.

Castclass

Tente de convertir un objet passé par référence à la classe spécifiée.

Ceq

Compare deux valeurs. S’ils sont égaux, la valeur entière 1 (int32) est envoyée (push) sur la pile d’évaluation ; sinon, 0 (int32) est envoyé () sur la pile d’évaluation.

Cgt

Compare deux valeurs. Si la première valeur est supérieure à la seconde, la valeur entière 1 (int32) est envoyée (push) sur la pile d’évaluation ; sinon, 0 (int32) est envoyé () sur la pile d’évaluation.

Cgt_Un

Compare deux valeurs non signées ou non ordonnées. Si la première valeur est supérieure à la seconde, la valeur entière 1 (int32) est envoyée (push) sur la pile d’évaluation ; sinon, 0 (int32) est envoyé () sur la pile d’évaluation.

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 seconde, la valeur entière 1 (int32) est envoyée (push) sur la pile d’évaluation ; sinon, 0 (int32) est envoyé () sur la pile d’évaluation.

Clt_Un

Compare les valeurs value1 non signées ou non ordonnées et value2. Si value1 elle value2est inférieure à , la valeur entière 1 (int32) est envoyée (push) à la pile d’évaluation ; sinon, 0 (int32) est envoyé () sur la pile d’évaluation.

Constrained

Limite le type sur lequel un appel de méthode virtuelle est effectué.

Conv_I

Convertit la valeur en haut de la pile native intd’évaluation en .

Conv_I1

Convertit la valeur en haut de la pile int8d’évaluation, puis l’étend (pads) en int32.

Conv_I2

Convertit la valeur en haut de la pile int16d’évaluation, puis l’étend (pads) en int32.

Conv_I4

Convertit la valeur en haut de la pile int32d’évaluation en .

Conv_I8

Convertit la valeur en haut de la pile int64d’évaluation en .

Conv_Ovf_I

Convertit la valeur signée au-dessus de la pile d’évaluation en native intOverflowException levée sur dépassement de capacité.

Conv_Ovf_I_Un

Convertit la valeur non signée au-dessus de la pile d’évaluation en native intOverflowException levée sur dépassement de capacité.

Conv_Ovf_I1

Convertit la valeur signée au-dessus de la pile d’évaluation en signe int8 et l’étend à int32, levée OverflowException sur dépassement de capacité.

Conv_Ovf_I1_Un

Convertit la valeur non signée au-dessus de la pile d’évaluation en signe int8 et l’étend à int32, levée OverflowException sur dépassement de capacité.

Conv_Ovf_I2

Convertit la valeur signée au-dessus de la pile d’évaluation en la int16 signant et l’étendant à int32, lève OverflowException sur dépassement de capacité.

Conv_Ovf_I2_Un

Convertit la valeur non signée au-dessus de la pile d’évaluation en signe int16 et l’étend à int32, levée OverflowException sur dépassement de capacité.

Conv_Ovf_I4

Convertit la valeur signée au-dessus de la pile d’évaluation en int32OverflowException levée sur dépassement de capacité.

Conv_Ovf_I4_Un

Convertit la valeur non signée au-dessus de la pile d’évaluation en int32OverflowException levée sur dépassement de capacité.

Conv_Ovf_I8

Convertit la valeur signée au-dessus de la pile d’évaluation en int64OverflowException levée sur dépassement de capacité.

Conv_Ovf_I8_Un

Convertit la valeur non signée au-dessus de la pile d’évaluation en int64OverflowException levée sur dépassement de capacité.

Conv_Ovf_U

Convertit la valeur signée en haut de la pile unsigned native intd’évaluation , levée OverflowException sur dépassement de capacité.

Conv_Ovf_U_Un

Convertit la valeur non signée au-dessus de la pile unsigned native intd’évaluation en levée OverflowException sur dépassement de capacité.

Conv_Ovf_U1

Convertit la valeur signée au-dessus de la pile unsigned int8 d’évaluation et l’étend à int32, levée OverflowException sur dépassement de capacité.

Conv_Ovf_U1_Un

Convertit la valeur non signée en haut de la pile unsigned int8 d’évaluation et l’étend à int32, levée OverflowException sur dépassement de capacité.

Conv_Ovf_U2

Convertit la valeur signée au-dessus de la pile unsigned int16 d’évaluation et l’étend à int32, levée OverflowException sur dépassement de capacité.

Conv_Ovf_U2_Un

Convertit la valeur non signée en haut de la pile unsigned int16 d’évaluation et l’étend à int32, levée OverflowException sur dépassement de capacité.

Conv_Ovf_U4

Convertit la valeur signée en haut de la pile unsigned int32d’évaluation , levée OverflowException sur dépassement de capacité.

Conv_Ovf_U4_Un

Convertit la valeur non signée au-dessus de la pile unsigned int32d’évaluation en levée OverflowException sur dépassement de capacité.

Conv_Ovf_U8

Convertit la valeur signée en haut de la pile unsigned int64d’évaluation , levée OverflowException sur dépassement de capacité.

Conv_Ovf_U8_Un

Convertit la valeur non signée au-dessus de la pile unsigned int64d’évaluation en levée OverflowException sur dépassement de capacité.

Conv_R_Un

Convertit la valeur entière non signée en haut de la pile float32d’évaluation en .

Conv_R4

Convertit la valeur en haut de la pile float32d’évaluation en .

Conv_R8

Convertit la valeur en haut de la pile float64d’évaluation en .

Conv_U

Convertit la valeur en haut de la pile unsigned native intd’évaluation et l’étend à native int.

Conv_U1

Convertit la valeur en haut de la pile unsigned int8d’évaluation et l’étend à int32.

Conv_U2

Convertit la valeur en haut de la pile unsigned int16d’évaluation et l’étend à int32.

Conv_U4

Convertit la valeur en haut de la pile unsigned int32d’évaluation et l’étend à int32.

Conv_U8

Convertit la valeur en haut de la pile unsigned int64d’évaluation et l’étend à int64.

Cpblk

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

Cpobj

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

Div

Divise deux valeurs et envoie le résultat sous forme de virgule flottante (type F) ou quotient (type int32) sur la pile d’évaluation.

Div_Un

Divise deux valeurs entières non signées et envoie le résultat (int32) dans la pile d’évaluation.

Dup

Copie la valeur la plus élevée actuelle sur la pile d’évaluation, puis envoie (push) la copie sur la pile d’évaluation.

Endfilter

Transfère le contrôle de la filter clause d’une exception au gestionnaire d’exceptions Common Language Infrastructure (CLI).

Endfinally

Transfère le contrôle à partir de l’ou finally de la fault clause d’un bloc d’exception vers le gestionnaire d’exceptions Common Language Infrastructure (CLI).

Initblk

Initialise un bloc de mémoire spécifié à une adresse spécifique à une taille donnée et une valeur initiale.

Initobj

Initialise chaque champ du type valeur à une adresse spécifiée à une référence Null ou un 0 du type primitif approprié.

Isinst

Teste 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) sur 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 de formulaire court spécifié) dans la pile d’évaluation.

Ldarga

Chargez une adresse d’argument sur la pile d’évaluation.

Ldarga_S

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

Ldc_I4

Envoie (push) une valeur de type int32 fournie sur la pile d’évaluation en tant que int32.

Ldc_I4_0

Envoie (push) la valeur entière de 0 sur la pile d’évaluation en tant que int32.

Ldc_I4_1

Envoie (push) la valeur entière de 1 sur la pile d’évaluation en tant que int32.

Ldc_I4_2

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

Ldc_I4_3

Envoie (push) la valeur entière de 3 sur la pile d’évaluation en tant que int32.

Ldc_I4_4

Envoie (push) la valeur entière de 4 sur la pile d’évaluation en tant que int32.

Ldc_I4_5

Envoie (push) la valeur entière de 5 sur la pile d’évaluation en tant que int32.

Ldc_I4_6

Envoie (push) la valeur entière de 6 sur la pile d’évaluation en tant que int32.

Ldc_I4_7

Envoie (push) la valeur entière de 7 sur la pile d’évaluation en tant que int32.

Ldc_I4_8

Envoie (push) la valeur entière de 8 sur la pile d’évaluation en tant que int32.

Ldc_I4_M1

Envoie (push) la valeur entière de -1 sur la pile d’évaluation en tant que int32.

Ldc_I4_S

Envoie (push) la valeur fournie int8 dans la pile d’évaluation int32sous forme abrégée.

Ldc_I8

Envoie (push) une valeur de type int64 fournie sur la pile d’évaluation en tant que int64.

Ldc_R4

Envoie (push) une valeur de type float32 fournie sur la pile d’évaluation en tant que type F (float).

Ldc_R8

Envoie (push) une valeur de type float64 fournie sur 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 comme type spécifié dans l’instruction.

Ldelem_I

Charge l’élément avec un 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 un 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 un 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 un 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 un 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 un 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 un 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 un 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 un 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 un 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 à 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 se trouve actuellement sur la pile d’évaluation.

Ldflda

Recherche l’adresse d’un champ dans l’objet dont la référence se trouve actuellement sur la pile d’évaluation.

Ldftn

Envoie (push) un pointeur non managé (type native int) vers le code natif implémentant une méthode spécifique sur la pile d’évaluation.

Ldind_I

Charge indirectement une valeur de type native int dans native int la pile d’évaluation.

Ldind_I1

Charge indirectement une valeur de type int8 dans int32 la pile d’évaluation.

Ldind_I2

Charge indirectement une valeur de type int16 dans int32 la pile d’évaluation.

Ldind_I4

Charge indirectement une valeur de type int32 dans int32 la pile d’évaluation.

Ldind_I8

Charge indirectement une valeur de type int64 dans int64 la pile d’évaluation.

Ldind_R4

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

Ldind_R8

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

Ldind_Ref

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

Ldind_U1

Charge indirectement une valeur de type unsigned int8 dans int32 la pile d’évaluation.

Ldind_U2

Charge indirectement une valeur de type unsigned int16 dans int32 la pile d’évaluation.

Ldind_U4

Charge indirectement une valeur de type unsigned int32 dans int32 la pile d’évaluation.

Ldlen

Envoie (push) le nombre d’éléments d’un tableau unidimensionnel de base zéro sur 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 sur la pile d’évaluation, sous forme abrégée.

Ldloca

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

Ldloca_S

Charge l’adresse de la variable locale à un index spécifique sur la pile d’évaluation, sous forme abrégée.

Ldnull

Envoie une référence Null (type O) sur la pile d’évaluation.

Ldobj

Copie l’objet type valeur pointé par une adresse en haut de la pile d’évaluation.

Ldsfld

Envoie (push) la valeur d’un champ statique sur la pile d’évaluation.

Ldsflda

Envoie (push) l’adresse d’un champ statique sur la pile d’évaluation.

Ldstr

Envoie 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 d’exécution, en le transmettant à la pile d’évaluation.

Ldvirtftn

Envoie (push) un pointeur non managé (type native int) vers le code natif implémentant une méthode virtuelle particulière associée à un objet spécifié sur la pile d’évaluation.

Leave

Quitte une région protégée de code, transférant sans condition le contrôle vers une instruction cible spécifique.

Leave_S

Quitte une région protégée de code, en transférant sans condition le contrôle vers une instruction cible (forme abrégée).

Localloc

Alloue un certain nombre d’octets du pool de mémoire dynamique local et envoie (push) l’adresse (pointeur temporaire, type *) du premier octet alloué sur la pile d’évaluation.

Mkrefany

Envoie une référence typée à une instance d’un type spécifique sur la pile d’évaluation.

Mul

Multiplie deux valeurs et envoie (push) le résultat sur la pile d’évaluation.

Mul_Ovf

Multiplie deux valeurs entières, effectue une vérification de dépassement de capacité et envoie le résultat sur la pile d’évaluation.

Mul_Ovf_Un

Multiplie deux valeurs entières non signées, effectue une vérification de dépassement de capacité et envoie le résultat sur la pile d’évaluation.

Neg

Annule une valeur et envoie le résultat sur la pile d’évaluation.

Newarr

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

Newobj

Crée un objet ou une nouvelle instance d’un type valeur, en transmettant une référence d’objet (type O) à la pile d’évaluation.

Nop

Remplit l’espace si les opcodes sont corrigés. Aucune opération significative n’est effectuée même si un cycle de traitement peut être consommé.

Not

Calcule le complément au niveau du bit de la valeur entière au-dessus de la pile et envoie le résultat sur la pile d’évaluation comme le même type.

Or

Calculez le complément au niveau du bit des deux valeurs entières au-dessus de la pile et envoie le résultat sur la pile d’évaluation.

Pop

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

Prefix1

Il s’agit d’une instruction réservée.

Prefix2

Il s’agit d’une instruction réservée.

Prefix3

Il s’agit d’une instruction réservée.

Prefix4

Il s’agit d’une instruction réservée.

Prefix5

Il s’agit d’une instruction réservée.

Prefix6

Il s’agit d’une instruction réservée.

Prefix7

Il s’agit d’une instruction réservée.

Prefixref

Il s’agit d’une instruction réservée.

Readonly

Spécifie que l’opération d’adresse de tableau suivante n’effectue aucune vérification de type au moment de l’exécution et qu’elle 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 deux valeurs et envoie le reste dans la pile d’évaluation.

Rem_Un

Divise deux valeurs non signées et envoie le reste sur la pile d’évaluation.

Ret

Retourne à partir de la méthode actuelle, en transmettant une valeur de retour (le cas échéant) à partir de la pile d’évaluation de l’appelant sur la pile d’évaluation de l’appelant.

Rethrow

Rétablit l’exception actuelle.

Shl

Déplace une valeur entière vers la gauche (en zéros) par un nombre spécifié de bits, envoyant le résultat sur la pile d’évaluation.

Shr

Déplace une valeur entière (en signe) à droite par un nombre spécifié de bits, envoyant le résultat sur la pile d’évaluation.

Shr_Un

Déplace une valeur entière non signée (en zéros) à droite par un nombre spécifié de bits, en envoyant le résultat sur la pile d’évaluation.

Sizeof

Envoie (push) la taille, en octets, d’un type valeur fourni dans la pile d’évaluation.

Starg

Stocke la valeur au-dessus de la pile d’évaluation dans l’emplacement d’argument à un index spécifié.

Starg_S

Stocke la valeur en haut de la pile d’évaluation dans l’emplacement d’argument à un index spécifié, sous 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 à un index donné par la native int valeur de la pile d’évaluation.

Stelem_I1

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

Stelem_I2

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

Stelem_I4

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

Stelem_I8

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

Stelem_R4

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

Stelem_R8

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

Stelem_Ref

Remplace l’élément de tableau à un index donné par la valeur ref de l’objet (type O) sur 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 au index format court.

Stobj

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

Stsfld

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

Sub

Soustrait une valeur d’une autre et envoie le résultat sur la pile d’évaluation.

Sub_Ovf

Soustrait une valeur entière d’une autre, effectue une vérification de dépassement de capacité et envoie le résultat sur la pile d’évaluation.

Sub_Ovf_Un

Soustrait une valeur entière non signée d’une autre, effectue une vérification de dépassement de capacité et envoie le résultat sur la pile d’évaluation.

Switch

Implémente une table de raccourcis.

Tailcall

Effectue une instruction d’appel de méthode postfixée de sorte que la trame de pile de la méthode actuelle soit supprimée avant l’exécution de l’instruction d’appel réelle.

Throw

Lève l’objet d’exception actuellement sur la pile d’évaluation.

Unaligned

Indique qu’une adresse en haut de la pile d’évaluation peut ne pas être alignée sur la taille naturelle immédiatement suivante ldind, , stind, ldfld, stfld, ldobjstobj, initblkou cpblk instruction.

Unbox

Convertit la représentation boxée d’un type valeur en son formulaire non encadré.

Unbox_Any

Convertit la représentation boxée d’un type spécifié dans l’instruction en son formulaire non encadré.

Volatile

Spécifie qu’une adresse 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 à cet emplacement ne peuvent pas être supprimés.

Xor

Calcule le XOR au niveau du bit des deux premières valeurs de la pile d’évaluation, en transmettant le résultat à la pile d’évaluation.

Méthodes

Nom Description
Equals(Object)

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

(Hérité de Object)
GetHashCode()

Sert de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

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

Retourne true ou false si l’opcode fourni prend un argument d’octet unique.

ToString()

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

(Hérité de Object)

S’applique à