Compartir vía


OpCodes Clase

Definición

Proporciona representaciones de campo de las instrucciones del Lenguaje intermedio de Microsoft (MSIL) para su emisión por parte de los miembros de la clase ILGenerator (como 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
Herencia
OpCodes
Atributos

Ejemplos

En el ejemplo siguiente se muestra la construcción de un método dinámico mediante ILGenerator para emitir OpCodes en .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

Comentarios

Para obtener una descripción detallada de los códigos de operación del miembro, consulte la documentación de Common Language Infrastructure (CLI), especialmente "Partition III: CIL Instruction Set" y "Partition II: Metadata Definition and Semantics". Para obtener más información, consulte ECMA 335 Common Language Infrastructure (CLI).

Campos

Add

Suma dos valores e inserta el resultado en la pila de evaluación.

Add_Ovf

Suma dos enteros, realiza una comprobación de desbordamiento e inserta el resultado en la pila de evaluación.

Add_Ovf_Un

Suma dos valores enteros sin signo, realiza una comprobación de desbordamiento e inserta el resultado en la pila de evaluación.

And

Calcula la operación AND bit a bit de dos valores e inserta el resultado en la pila de evaluación.

Arglist

Devuelve un puntero no administrado a la lista de argumentos del método actual.

Beq

Transfiere el control a una instrucción máquina de destino si dos valores son iguales.

Beq_S

Transfiere el control a una instrucción máquina de destino (forma corta) si dos valores son iguales.

Bge

Transfiere el control a una instrucción máquina de destino si el primer valor es mayor o igual que el segundo valor.

Bge_S

Transfiere el control a una instrucción máquina de destino (forma corta) si el primer valor es mayor o igual que el segundo valor.

Bge_Un

Transfiere el control a una instrucción máquina de destino si el primer valor es mayor que el segundo valor, cuando se comparan valores enteros sin signo o valores flotantes desordenados.

Bge_Un_S

Transfiere el control a una instrucción máquina de destino (forma corta) si el primer valor es mayor que el segundo valor, cuando se comparan valores enteros sin signo o valores flotantes desordenados.

Bgt

Transfiere el control a una instrucción máquina de destino si el primer valor es mayor que el segundo valor.

Bgt_S

Transfiere el control a una instrucción máquina de destino (forma corta) si el primer valor es mayor que el segundo valor.

Bgt_Un

Transfiere el control a una instrucción máquina de destino si el primer valor es mayor que el segundo valor, cuando se comparan valores enteros sin signo o valores flotantes desordenados.

Bgt_Un_S

Transfiere el control a una instrucción máquina de destino (forma corta) si el primer valor es mayor que el segundo valor, cuando se comparan valores enteros sin signo o valores flotantes desordenados.

Ble

Transfiere el control a una instrucción máquina de destino si el primer valor es menor o igual que el segundo valor.

Ble_S

Transfiere el control a una instrucción máquina de destino (forma corta) si el primer valor es menor o igual que el segundo valor.

Ble_Un

Transfiere el control a una instrucción máquina de destino si el primer valor es menor o igual que el segundo valor, cuando se comparan valores enteros sin signo o valores flotantes desordenados.

Ble_Un_S

Transfiere el control a una instrucción máquina de destino (forma corta) si el primer valor es menor o igual que el segundo valor, cuando se comparan valores enteros sin signo o valores flotantes desordenados.

Blt

Transfiere el control a una instrucción máquina de destino si el primer valor es menor que el segundo valor.

Blt_S

Transfiere el control a una instrucción máquina de destino (forma corta) si el primer valor es menor que el segundo valor.

Blt_Un

Transfiere el control a una instrucción máquina de destino si el primer valor es menor que el segundo valor, cuando se comparan valores enteros sin signo o valores flotantes desordenados.

Blt_Un_S

Transfiere el control a una instrucción máquina de destino (forma corta) si el primer valor es menor que el segundo valor, cuando se comparan valores enteros sin signo o valores flotantes desordenados.

Bne_Un

Transfiere el control a una instrucción máquina de destino cuando dos valores enteros sin signo o dos valores flotantes desordenados no son iguales.

Bne_Un_S

Transfiere el control a una instrucción máquina de destino (forma corta) cuando dos valores enteros sin signo o dos valores flotantes desordenados no son iguales.

Box

Convierte un tipo de valor en una referencia a objeto (tipo O).

Br

Transfiere el control incondicionalmente a una instrucción de destino.

Br_S

Transfiere el control incondicionalmente a una instrucción máquina de destino (forma corta).

Break

Indica a Common Language Infrastructure (CLI) que informe al depurador de que se ha recorrido un punto de interrupción.

Brfalse

Transfiere el control a una instrucción máquina de destino si value es false, una referencia nula (Nothing en Visual Basic) o cero.

Brfalse_S

Transfiere el control a una instrucción máquina de destino si value es false, una referencia nula o cero.

Brtrue

Transfiere el control a una instrucción máquina de destino si value es true, no es null o es distinto de cero.

Brtrue_S

Transfiere el control a una instrucción máquina de destino (forma corta) si value es true, no es null o es distinto de cero.

Call

Llama al método indicado por el descriptor del método que se ha pasado.

Calli

Llama al método indicado en la pila de evaluación (como puntero a un punto de entrada) con los argumentos descritos mediante una convención de llamada.

Callvirt

Llama a un método enlazado tardíamente en un objeto e inserta el valor devuelto en la pila de evaluación.

Castclass

Intenta convertir un objeto pasado por referencia en la clase especificada.

Ceq

Compara dos valores. Si son iguales, el valor entero 1 (int32) se inserta en la pila de evaluación; en caso contrario, se inserta 0 (int32) en la pila de evaluación.

Cgt

Compara dos valores. Si el primer valor es mayor que el segundo, se inserta el valor entero 1 (int32) en la pila de evaluación; en caso contrario, se inserta 0 (int32) en la pila de evaluación.

Cgt_Un

Compara dos valores sin signo o desordenados. Si el primer valor es mayor que el segundo, se inserta el valor entero 1 (int32) en la pila de evaluación; en caso contrario, se inserta 0 (int32) en la pila de evaluación.

Ckfinite

Produce ArithmeticException si el valor no es un número finito.

Clt

Compara dos valores. Si el primer valor es menor que el segundo, se inserta el valor entero 1 (int32) en la pila de evaluación; en caso contrario, se inserta 0 (int32) en la pila de evaluación.

Clt_Un

Compara los valores sin signo o desordenados value1 y value2. Si value1 es menor que value2, se inserta en la pila de evaluación el valor entero 1 (int32); en caso contrario, se inserta 0 (int32) en la pila de evaluación.

Constrained

Restringe el tipo en el que se realiza una llamada a método virtual.

Conv_I

Convierte el valor situado en la parte superior de la pila de evaluación en native int.

Conv_I1

Convierte el valor que se encuentra en la parte superior de la pila de evaluación en int8 y luego lo extiende (lo rellena) hasta int32.

Conv_I2

Convierte el valor que se encuentra en la parte superior de la pila de evaluación en int16 y luego lo extiende (lo rellena) hasta int32.

Conv_I4

Convierte el valor situado en la parte superior de la pila de evaluación en int32.

Conv_I8

Convierte el valor situado en la parte superior de la pila de evaluación en int64.

Conv_Ovf_I

Convierte el valor con signo situado en la parte superior de la pila de evaluación en native int y produce OverflowException si se produce desbordamiento.

Conv_Ovf_I_Un

Convierte el valor sin signo situado en la parte superior de la pila de evaluación en native int y produce OverflowException si se produce desbordamiento.

Conv_Ovf_I1

Convierte el valor con signo situado en la parte superior de la pila de evaluación en un int8 con signo, lo extiende hasta int32 y produce OverflowException si se produce desbordamiento.

Conv_Ovf_I1_Un

Convierte el valor sin signo situado en la parte superior de la pila de evaluación en un int8 con signo, lo extiende hasta int32 y produce OverflowException si se produce desbordamiento.

Conv_Ovf_I2

Convierte el valor con signo situado en la parte superior de la pila de evaluación en un int16 con signo, lo extiende hasta int32 y produce OverflowException si se produce desbordamiento.

Conv_Ovf_I2_Un

Convierte el valor sin signo situado en la parte superior de la pila de evaluación en un int16 con signo, lo extiende hasta int32 y produce OverflowException si se produce desbordamiento.

Conv_Ovf_I4

Convierte el valor con signo situado en la parte superior de la pila de evaluación en int32 y produce OverflowException si se produce desbordamiento.

Conv_Ovf_I4_Un

Convierte el valor sin signo situado en la parte superior de la pila de evaluación en int32 y produce OverflowException si se produce desbordamiento.

Conv_Ovf_I8

Convierte el valor con signo situado en la parte superior de la pila de evaluación en int64 y produce OverflowException si se produce desbordamiento.

Conv_Ovf_I8_Un

Convierte el valor sin signo situado en la parte superior de la pila de evaluación en int64 y produce OverflowException si se produce desbordamiento.

Conv_Ovf_U

Convierte el valor con signo situado en la parte superior de la pila de evaluación en unsigned native int e inicia OverflowException si se produce desbordamiento.

Conv_Ovf_U_Un

Convierte el valor sin signo situado en la parte superior de la pila de evaluación en unsigned native int y produce OverflowException en caso de desbordamiento.

Conv_Ovf_U1

Convierte el valor con signo situado en la parte superior de la pila de evaluación en unsigned int8, lo extiende hasta int32 y produce OverflowException si se produce desbordamiento.

Conv_Ovf_U1_Un

Convierte el valor sin signo situado en la parte superior de la pila de evaluación en unsigned int8, lo extiende hasta int32 e inicia OverflowException si se produce desbordamiento.

Conv_Ovf_U2

Convierte el valor con signo situado en la parte superior de la pila de evaluación en unsigned int16, lo extiende hasta int32 y produce OverflowException si se produce desbordamiento.

Conv_Ovf_U2_Un

Convierte el valor sin signo situado en la parte superior de la pila de evaluación en unsigned int16, lo extiende hasta int32 e inicia OverflowException si se produce desbordamiento.

Conv_Ovf_U4

Convierte el valor con signo situado en la parte superior de la pila de evaluación en unsigned int32 e inicia OverflowException si se produce desbordamiento.

Conv_Ovf_U4_Un

Convierte el valor sin signo situado en la parte superior de la pila de evaluación en unsigned int32 y produce OverflowException en caso de desbordamiento.

Conv_Ovf_U8

Convierte el valor con signo situado en la parte superior de la pila de evaluación en unsigned int64 e inicia OverflowException si se produce desbordamiento.

Conv_Ovf_U8_Un

Convierte el valor sin signo situado en la parte superior de la pila de evaluación en unsigned int64 y produce OverflowException en caso de desbordamiento.

Conv_R_Un

Convierte el valor entero sin signo situado en la parte superior de la pila de evaluación en float32.

Conv_R4

Convierte el valor situado en la parte superior de la pila de evaluación en float32.

Conv_R8

Convierte el valor situado en la parte superior de la pila de evaluación en float64.

Conv_U

Convierte el valor que se encuentra en la parte superior de la pila de evaluación en unsigned native int y lo extiende hasta native int.

Conv_U1

Convierte el valor que se encuentra en la parte superior de la pila de evaluación en unsigned int8 y lo extiende hasta int32.

Conv_U2

Convierte el valor que se encuentra en la parte superior de la pila de evaluación en unsigned int16 y lo extiende hasta int32.

Conv_U4

Convierte el valor que se encuentra en la parte superior de la pila de evaluación en unsigned int32 y lo extiende hasta int32.

Conv_U8

Convierte el valor que se encuentra en la parte superior de la pila de evaluación en unsigned int64 y lo extiende hasta int64.

Cpblk

Copia un número de bytes especificado de una dirección de origen en una dirección de destino.

Cpobj

Copia el tipo de valor ubicado en la dirección de un objeto (tipo &o native int) en la dirección del objeto de destino (tipo &o native int ).

Div

Divide dos valores e inserta el resultado como punto flotante (de tipo F) o cociente (de tipo int32) en la pila de evaluación.

Div_Un

Divide dos valores enteros sin signo e inserta el resultado (int32) en la pila de evaluación.

Dup

Copia el valor que se encuentra en la parte superior de la pila de evaluación e inserta la copia en la pila de evaluación.

Endfilter

Vuelve a transferir el control de la cláusula filter de una excepción al controlador de excepciones de Common Language Infrastructure (CLI).

Endfinally

Vuelve a transferir el control de la cláusula fault o finally de un bloque de excepción al controlador de excepciones de Common Language Infrastructure (CLI).

Initblk

Inicializa un bloque de memoria especificado en una dirección específica con el tamaño y el valor inicial dados.

Initobj

Inicializa cada uno de los campos del tipo de valor en la dirección especificada en una referencia nula o en un valor 0 del tipo primitivo correspondiente.

Isinst

Comprueba si una referencia a objeto (de tipo O) es una instancia de una clase determinada.

Jmp

Sale del método actual y salta al método especificado.

Ldarg

Carga un argumento (al que hace referencia un valor de índice especificado) en la pila.

Ldarg_0

Carga el argumento que se encuentra en el índice 0 en la pila de evaluación.

Ldarg_1

Carga el argumento que se encuentra en el índice 1 en la pila de evaluación.

Ldarg_2

Carga el argumento que se encuentra en el índice 2 en la pila de evaluación.

Ldarg_3

Carga el argumento que se encuentra en el índice 3 en la pila de evaluación.

Ldarg_S

Carga el argumento (al que hace referencia un índice de forma corta especificado) en la pila de evaluación.

Ldarga

Carga la dirección de un argumento en la pila de evaluación.

Ldarga_S

Carga la dirección de un argumento (forma corta) en la pila de evaluación.

Ldc_I4

Inserta en la pila de evaluación un valor suministrado de tipo int32 como int32.

Ldc_I4_0

Inserta en la pila de evaluación el valor entero 0 como int32.

Ldc_I4_1

Inserta en la pila de evaluación el valor entero 1 como int32.

Ldc_I4_2

Inserta en la pila de evaluación el valor entero 2 como int32.

Ldc_I4_3

Inserta en la pila de evaluación el valor entero 3 como int32.

Ldc_I4_4

Inserta en la pila de evaluación el valor entero 4 como int32.

Ldc_I4_5

Inserta en la pila de evaluación el valor entero 5 como int32.

Ldc_I4_6

Inserta en la pila de evaluación el valor entero 6 como int32.

Ldc_I4_7

Inserta en la pila de evaluación el valor entero 7 como int32.

Ldc_I4_8

Inserta en la pila de evaluación el valor entero 8 como int32.

Ldc_I4_M1

Inserta en la pila de evaluación el valor entero -1 como int32.

Ldc_I4_S

Inserta en la pila de evaluación el valor int8 suministrado como int32 (forma corta).

Ldc_I8

Inserta en la pila de evaluación un valor suministrado de tipo int64 como int64.

Ldc_R4

Inserta en la pila de evaluación un valor suministrado de tipo float32 como tipo F (flotante).

Ldc_R8

Inserta en la pila de evaluación un valor suministrado de tipo float64 como tipo F (flotante).

Ldelem

Carga el elemento que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como el tipo definido en la instrucción.

Ldelem_I

Carga el elemento de tipo native int que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como native int.

Ldelem_I1

Carga el elemento de tipo int8 que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como int32.

Ldelem_I2

Carga el elemento de tipo int16 que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como int32.

Ldelem_I4

Carga el elemento de tipo int32 que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como int32.

Ldelem_I8

Carga el elemento de tipo int64 que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como int64.

Ldelem_R4

Carga el elemento de tipo float32 que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como tipo F (flotante).

Ldelem_R8

Carga el elemento de tipo float64 que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como tipo F (flotante).

Ldelem_Ref

Carga el elemento que contiene una referencia a objeto en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como tipo O (referencia a objeto).

Ldelem_U1

Carga el elemento de tipo unsigned int8 que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como int32.

Ldelem_U2

Carga el elemento de tipo unsigned int16 que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como int32.

Ldelem_U4

Carga el elemento de tipo unsigned int32 que se encuentra en una posición de índice de matriz especificada en la parte superior de la pila de evaluación como int32.

Ldelema

Carga la dirección del elemento de la matriz que se encuentra en un índice de la matriz especificado en la parte superior de la pila de evaluación como tipo & (puntero administrado).

Ldfld

Encuentra el valor de un campo en el objeto cuya referencia se encuentra actualmente en la pila de evaluación.

Ldflda

Busca la dirección de un campo en el objeto cuya referencia se encuentra actualmente en la pila de evaluación.

Ldftn

Inserta en la pila de evaluación un puntero no administrado (de tipo native int) al código nativo que implementa un método específico.

Ldind_I

Carga indirectamente un valor de tipo native int como native int en la pila de evaluación.

Ldind_I1

Carga indirectamente un valor de tipo int8 como int32 en la pila de evaluación.

Ldind_I2

Carga indirectamente un valor de tipo int16 como int32 en la pila de evaluación.

Ldind_I4

Carga indirectamente un valor de tipo int32 como int32 en la pila de evaluación.

Ldind_I8

Carga indirectamente un valor de tipo int64 como int64 en la pila de evaluación.

Ldind_R4

Carga indirectamente un valor de tipo float32 como tipo F (flotante) en la pila de evaluación.

Ldind_R8

Carga indirectamente un valor de tipo float64 como tipo F (flotante) en la pila de evaluación.

Ldind_Ref

Carga indirectamente una referencia a objeto como tipo O (referencia a objeto) en la pila de evaluación.

Ldind_U1

Carga indirectamente un valor de tipo unsigned int8 como int32 en la pila de evaluación.

Ldind_U2

Carga indirectamente un valor de tipo unsigned int16 como int32 en la pila de evaluación.

Ldind_U4

Carga indirectamente un valor de tipo unsigned int32 como int32 en la pila de evaluación.

Ldlen

Inserta en la pila de evaluación el número de elementos de una matriz unidimensional de base cero.

Ldloc

Carga en la pila de evaluación la variable local que se encuentra en un índice específico.

Ldloc_0

Carga en la pila de evaluación la variable local que se encuentra en el índice 0.

Ldloc_1

Carga en la pila de evaluación la variable local que se encuentra en el índice 1.

Ldloc_2

Carga en la pila de evaluación la variable local que se encuentra en el índice 2.

Ldloc_3

Carga en la pila de evaluación la variable local que se encuentra en el índice 3.

Ldloc_S

Carga en la pila de evaluación la variable local que se encuentra en un índice específico (forma corta).

Ldloca

Carga en la pila de evaluación la dirección de la variable local que se encuentra en un índice específico.

Ldloca_S

Carga en la pila de evaluación la dirección de la variable local que se encuentra en un índice específico (forma corta).

Ldnull

Inserta en la pila de evaluación una referencia nula (de tipo O).

Ldobj

Copia en la parte superior de la pila de evaluación el objeto de tipo de valor al que señala una dirección.

Ldsfld

Inserta en la pila de evaluación el valor de un campo estático.

Ldsflda

Inserta en la pila de evaluación la dirección de un campo estático.

Ldstr

Inserta una nueva referencia de objeto a un literal de cadena almacenado en los metadatos.

Ldtoken

Convierte un símbolo (token) de metadatos en su representación en tiempo de ejecución y lo inserta en la pila de evaluación.

Ldvirtftn

Inserta en la pila de evaluación un puntero no administrado (de tipo native int) al código nativo que implementa un método virtual concreto que está asociado al objeto especificado.

Leave

Sale de una región de código protegida y transfiere el control incondicionalmente a una instrucción máquina de destino específica.

Leave_S

Sale de una región de código protegida y transfiere el control incondicionalmente a una instrucción máquina de destino (forma corta).

Localloc

Asigna un número determinado de bytes del bloque de memoria dinámica local e inserta la dirección (un puntero transitorio de tipo *) del primer byte asignado en la pila de evaluación.

Mkrefany

Inserta en la pila de evaluación una referencia con tipo a una instancia de un tipo específico.

Mul

Multiplica dos valores e inserta el resultado en la pila de evaluación.

Mul_Ovf

Multiplica dos valores enteros, realiza una comprobación de desbordamiento e inserta el resultado en la pila de evaluación.

Mul_Ovf_Un

Multiplica dos valores enteros sin signo, realiza una comprobación de desbordamiento e inserta el resultado en la pila de evaluación.

Neg

Convierte un valor en negativo e inserta el resultado en la pila de evaluación.

Newarr

Inserta en la pila de evaluación una referencia de objeto a una nueva matriz unidimensional de base cero cuyos elementos son de un tipo específico.

Newobj

Crea un nuevo objeto o una nueva instancia de un tipo de valor e inserta en la pila de evaluación una referencia a objeto (de tipo O).

Nop

Rellena el espacio si los códigos de operación se han modificado. No se realiza ninguna operación significativa, aunque puede consumirse un ciclo de procesamiento.

Not

Calcula el complemento bit a bit del valor entero que se encuentra en la parte superior de la pila e inserta el resultado, del mismo tipo, en la pila de evaluación.

Or

Calcula el complemento bit a bit de los dos valores enteros situados en la parte superior de la pila e inserta el resultado en la pila de evaluación.

Pop

Quita el valor situado en la parte superior de la pila de evaluación.

Prefix1

Esta es una instrucción reservada.

Prefix2

Esta es una instrucción reservada.

Prefix3

Esta es una instrucción reservada.

Prefix4

Esta es una instrucción reservada.

Prefix5

Esta es una instrucción reservada.

Prefix6

Esta es una instrucción reservada.

Prefix7

Esta es una instrucción reservada.

Prefixref

Esta es una instrucción reservada.

Readonly

Especifica que la operación de dirección de matriz subsiguiente no realiza ninguna comprobación de tipo en tiempo de ejecución y devuelve un puntero administrado cuya mutabilidad está restringida.

Refanytype

Recupera el símbolo (token) de tipo incrustado en una referencia con tipo.

Refanyval

Recupera la dirección (de tipo &) incrustada en una referencia con tipo.

Rem

Divide dos valores e inserta el resultado en la pila de evaluación.

Rem_Un

Divide dos valores sin signo e inserta el resultado en la pila de evaluación.

Ret

Regresa del método actual e inserta un valor devuelto (si existe) desde la pila de evaluación del destinatario de la llamada en la pila de evaluación del llamador.

Rethrow

Vuelve a producir la excepción actual.

Shl

Desplaza un valor entero a la izquierda (en ceros) el número de bits especificado e inserta el resultado en la pila de evaluación.

Shr

Desplaza un valor entero (en signo) a la derecha el número de bits especificado e inserta el resultado en la pila de evaluación.

Shr_Un

Desplaza un valor entero sin signo (en ceros) a la derecha el número de bits especificado e inserta el resultado en la pila de evaluación.

Sizeof

Inserta en la pila de evaluación el tamaño, en bytes, de un tipo de valor suministrado.

Starg

Almacena el valor que se encuentra en la parte superior de la pila de evaluación en la ranura de argumento de una posición de índice especificada.

Starg_S

Almacena el valor que se encuentra en la parte superior de la pila de evaluación en la ranura de argumento de una posición de índice especificada (forma corta).

Stelem

Reemplaza el elemento de matriz que se encuentra en una posición de índice dada por el valor de la pila de evaluación cuyo tipo se especifica en la instrucción.

Stelem_I

Sustituye el elemento de la matriz que se encuentra en una posición de índice determinada por el valor native int en la pila de evaluación.

Stelem_I1

Sustituye el elemento de la matriz que se encuentra en una posición de índice determinada por el valor int8 en la pila de evaluación.

Stelem_I2

Sustituye el elemento de la matriz que se encuentra en una posición de índice determinada por el valor int16 en la pila de evaluación.

Stelem_I4

Sustituye el elemento de la matriz que se encuentra en una posición de índice determinada por el valor int32 en la pila de evaluación.

Stelem_I8

Sustituye el elemento de la matriz que se encuentra en una posición de índice determinada por el valor int64 en la pila de evaluación.

Stelem_R4

Sustituye el elemento de la matriz que se encuentra en una posición de índice determinada por el valor float32 en la pila de evaluación.

Stelem_R8

Sustituye el elemento de la matriz que se encuentra en una posición de índice determinada por el valor float64 en la pila de evaluación.

Stelem_Ref

Sustituye el elemento de la matriz que se encuentra en una posición de índice determinada por el valor de referencia a objeto (de tipo O) en la pila de evaluación.

Stfld

Sustituye por un valor nuevo el valor almacenado en el campo de una referencia a objeto o puntero.

Stind_I

Almacena un valor de tipo native int en una dirección suministrada.

Stind_I1

Almacena un valor de tipo int8 en una dirección suministrada.

Stind_I2

Almacena un valor de tipo int16 en una dirección suministrada.

Stind_I4

Almacena un valor de tipo int32 en una dirección suministrada.

Stind_I8

Almacena un valor de tipo int64 en una dirección suministrada.

Stind_R4

Almacena un valor de tipo float32 en una dirección suministrada.

Stind_R8

Almacena un valor de tipo float64 en una dirección suministrada.

Stind_Ref

Almacena un valor de referencia a objeto en una dirección suministrada.

Stloc

Extrae el valor actual de la parte superior de la pila de evaluación y lo almacena en la lista de variables locales en un índice especificado.

Stloc_0

Extrae el valor actual de la parte superior de la pila de evaluación y lo almacena en la lista de variables locales en el índice 0.

Stloc_1

Extrae el valor actual de la parte superior de la pila de evaluación y lo almacena en la lista de variables locales en el índice 1.

Stloc_2

Extrae el valor actual de la parte superior de la pila de evaluación y lo almacena en la lista de variables locales en el índice 2.

Stloc_3

Extrae el valor actual de la parte superior de la pila de evaluación y lo almacena en la lista de variables locales en el índice 3.

Stloc_S

Extrae el valor actual de la parte superior de la pila de evaluación y lo almacena en la lista de variables locales en index (formato corto).

Stobj

Copia un valor del tipo especificado de la pila de evaluación y lo coloca en una dirección de memoria suministrada.

Stsfld

Sustituye el valor de un campo estático por un valor de la pila de evaluación.

Sub

Resta un valor de otro e inserta el resultado en la pila de evaluación.

Sub_Ovf

Resta un valor entero de otro, realiza una comprobación de desbordamiento e inserta el resultado en la pila de evaluación.

Sub_Ovf_Un

Resta un valor entero sin signo de otro, realiza una comprobación de desbordamiento e inserta el resultado en la pila de evaluación.

Switch

Implementa una tabla de saltos.

Tailcall

Ejecuta una instrucción máquina de llamada a método postfija de tal modo que el marco de pila del método actual se quita antes de que se ejecute la verdadera instrucción máquina de llamada.

Throw

Produce el objeto de excepción que se encuentra actualmente en la pila de evaluación.

Unaligned

Indica que una dirección que se encuentra actualmente en la parte superior de la pila de evaluación puede no estar alineada con el tamaño natural de la instrucción máquina ldind, stind, ldfld, stfld, ldobj, stobj, initblk o cpblk inmediatamente posterior.

Unbox

Convierte la representación de un tipo de valor al que se le ha aplicado la conversión boxing en la forma que tendría al aplicarle la conversión unboxing.

Unbox_Any

Convierte la representación a la que se aplica la conversión boxing de un tipo especificada en la instrucción a su forma de conversión unboxing.

Volatile

Especifica que una dirección que se encuentra actualmente en la parte superior de la pila de evaluación puede ser volátil y los resultados de leer esa ubicación no se pueden almacenar en la caché o no se pueden suprimir múltiples almacenamientos en esa ubicación.

Xor

Calcula la operación XOR bit a bit de los dos valores superiores de la pila de evaluación e inserta el resultado en la pila.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
TakesSingleByteArgument(OpCode)

Devuelve true o false si el código de operación suministrado utiliza un argumento de un solo byte.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a