OpCodes Класс

Определение

Предоставляет представления полей инструкций по Microsoft промежуточному языку (MSIL) для выбросов членами класса ILGenerator (например, 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
Наследование
OpCodes
Атрибуты

Примеры

В следующем примере показано построение динамического метода, используемого для ILGenerator отправки OpCodes в объект 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

Комментарии

Подробное описание опкодов членов см. в документации по инфраструктуре общего языка (CLI), особенно "Набор инструкций Partition III: CIL" и "Partition II: Metadata Definition and Semantics". Дополнительные сведения см. в статье ECMA 335 Common Language Infrastructure (CLI).

Поля

Имя Описание
Add

Добавляет два значения и отправляет результат в стек вычислений.

Add_Ovf

Добавляет два целых числа, выполняет проверку переполнения и отправляет результат в стек оценки.

Add_Ovf_Un

Добавляет два целочисленных значения без знака, выполняет проверку переполнения и отправляет результат в стек вычислений.

And

Вычисляет побитовое ЗНАЧЕНИЕ И из двух значений и отправляет результат в стек вычислений.

Arglist

Возвращает неуправляемый указатель на список аргументов текущего метода.

Beq

Передает управление целевой инструкции, если два значения равны.

Beq_S

Передает элемент управления в целевую инструкцию (короткая форма), если два значения равны.

Bge

Передает управление целевой инструкции, если первое значение больше или равно второму значению.

Bge_S

Передает элемент управления в целевую инструкцию (короткая форма), если первое значение больше или равно второму значению.

Bge_Un

Передает управление целевой инструкции, если первое значение больше второго значения, при сравнении незначенных целых значений или неупорядоченных значений с плавающей запятой.

Bge_Un_S

Передает управление целевой инструкции (короткой форме), если первое значение больше второго значения, при сравнении незначенных целых значений или неупорядоченных значений с плавающей запятой.

Bgt

Передает управление целевой инструкции, если первое значение больше второго значения.

Bgt_S

Передает управление целевой инструкции (короткой форме), если первое значение больше второго значения.

Bgt_Un

Передает управление целевой инструкции, если первое значение больше второго значения, при сравнении незначенных целых значений или неупорядоченных значений с плавающей запятой.

Bgt_Un_S

Передает управление целевой инструкции (короткой форме), если первое значение больше второго значения, при сравнении незначенных целых значений или неупорядоченных значений с плавающей запятой.

Ble

Передает управление целевой инструкции, если первое значение меньше или равно второму значению.

Ble_S

Передает элемент управления целевой инструкции (короткая форма), если первое значение меньше или равно второму значению.

Ble_Un

Передает управление целевой инструкцией, если первое значение меньше или равно второму значению, при сравнении незначенных целых значений или неупорядоченных значений с плавающей запятой.

Ble_Un_S

Передает контроль в целевую инструкцию (короткая форма), если первое значение меньше или равно второму значению, при сравнении незначенных целых значений или неупорядоченных значений с плавающей запятой.

Blt

Передает управление целевой инструкции, если первое значение меньше второго значения.

Blt_S

Передает управление целевой инструкции (короткой форме), если первое значение меньше второго значения.

Blt_Un

Передает управление целевой инструкцией, если первое значение меньше второго, при сравнении незначенных целых значений или неупорядоченных значений с плавающей запятой.

Blt_Un_S

Передает элемент управления целевой инструкции (короткой форме), если первое значение меньше второго значения, при сравнении незначенных целых значений или неупорядоченных значений с плавающей запятой.

Bne_Un

Передает управление целевой инструкции, если два незначенных целочисленных значения или неупорядоченные значения с плавающей запятой не равны.

Bne_Un_S

Передает управление целевой инструкции (короткой форме), если два незначенных целочисленных значения или неупорядоченные значения с плавающей запятой не равны.

Box

Преобразует тип значения в ссылку на объект (тип O).

Br

Безоговорочно передает управление целевой инструкции.

Br_S

Безусловно передает управление целевой инструкции (короткая форма).

Break

Сигнализирует инфраструктуре общего языка (CLI), чтобы сообщить отладчику о том, что точка останова была сбита.

Brfalse

Передает управление целевой инструкцией, если value имеет значение false, пустая ссылка (Nothing в Visual Basic) или ноль.

Brfalse_S

Передает элемент управления целевой инструкции, если value имеет значение falseNULL или ноль.

Brtrue

Передача элемента управления в целевую инструкцию, если value не имеет trueзначения NULL или ненулевых значений.

Brtrue_S

Передача элемента управления в целевую инструкцию (короткая форма), если value не имеет trueзначения NULL или ненулевых значений.

Call

Вызывает метод, указанный дескриптором переданного метода.

Calli

Вызывает метод, указанный в стеке оценки (в качестве указателя на точку входа) с аргументами, описанными в соглашении о вызове.

Callvirt

Вызывает метод с поздней привязкой к объекту, принудив возвращаемое значение в стек вычислений.

Castclass

Пытается привести объект, передаваемый по ссылке на указанный класс.

Ceq

Сравнивает два значения. Если они равны, целочисленное значение 1 (int32) передается в стек оценки; в противном случае 0 (int32) отправляется в стек оценки.

Cgt

Сравнивает два значения. Если первое значение больше второго, целочисленное значение 1 (int32) передается в стек оценки; в противном случае 0 (int32) отправляется в стек оценки.

Cgt_Un

Сравнивает два неподписанных или неупорядоченных значения. Если первое значение больше второго, целочисленное значение 1 (int32) передается в стек оценки; в противном случае 0 (int32) отправляется в стек оценки.

Ckfinite

Вызывает, ArithmeticException если значение не является конечным числом.

Clt

Сравнивает два значения. Если первое значение меньше второго, целочисленное значение 1 (int32) отправляется в стек вычислений; в противном случае 0 (int32) отправляется в стек оценки.

Clt_Un

Сравнивает неподписанные или неупорядоченные значения value1 и value2. Если value1 значение меньше value2, то целочисленное значение 1 (int32) передается в стек вычислений; в противном случае 0 (int32) передается в стек оценки.

Constrained

Ограничивает тип, в котором выполняется вызов виртуального метода.

Conv_I

Преобразует значение в верхней части стека native intоценки.

Conv_I1

Преобразует значение в верхней части стека int8оценки, а затем расширяет его (панели) на int32.

Conv_I2

Преобразует значение в верхней части стека int16оценки, а затем расширяет его (панели) на int32.

Conv_I4

Преобразует значение в верхней части стека int32оценки.

Conv_I8

Преобразует значение в верхней части стека int64оценки.

Conv_Ovf_I

Преобразует подписанное значение поверх стека оценки в подписанный native int, вызывая OverflowException переполнение.

Conv_Ovf_I_Un

Преобразует значение без знака на вершине стека оценки в подписанный native int, вызывая OverflowException переполнение.

Conv_Ovf_I1

Преобразует подписанное значение поверх стека вычислений в подписанный int8 и расширяет его до int32, вызывая OverflowException переполнение.

Conv_Ovf_I1_Un

Преобразует неподписаемое значение поверх стека оценки в подписанный int8 и расширяет его до int32, вызывая OverflowException переполнение.

Conv_Ovf_I2

Преобразует подписанное значение на вершине стека оценки в подписанный int16 и расширяя его до int32, вызывая OverflowException переполнение.

Conv_Ovf_I2_Un

Преобразует неподписаемое значение поверх стека оценки в подписанный int16 и расширяет его до int32, вызывая OverflowException переполнение.

Conv_Ovf_I4

Преобразует подписанное значение поверх стека оценки в подписанный int32, вызывая OverflowException переполнение.

Conv_Ovf_I4_Un

Преобразует значение без знака на вершине стека оценки в подписанный int32, вызывая OverflowException переполнение.

Conv_Ovf_I8

Преобразует подписанное значение поверх стека оценки в подписанный int64, вызывая OverflowException переполнение.

Conv_Ovf_I8_Un

Преобразует значение без знака на вершине стека оценки в подписанный int64, вызывая OverflowException переполнение.

Conv_Ovf_U

Преобразует подписанное значение на вершине стека unsigned native intоценки, вызывая переполнение OverflowException .

Conv_Ovf_U_Un

Преобразует значение без знака в верхней части стека unsigned native intоценки, вызывая OverflowException переполнение.

Conv_Ovf_U1

Преобразует подписанное значение поверх стека unsigned int8 оценки и расширяет его до int32, вызывая OverflowException переполнение.

Conv_Ovf_U1_Un

Преобразует значение без знака на вершине стека unsigned int8 оценки и расширяет его до int32, вызывая OverflowException переполнение.

Conv_Ovf_U2

Преобразует подписанное значение поверх стека unsigned int16 оценки и расширяет его до int32, вызывая OverflowException переполнение.

Conv_Ovf_U2_Un

Преобразует значение без знака на вершине стека unsigned int16 оценки и расширяет его до int32, вызывая OverflowException переполнение.

Conv_Ovf_U4

Преобразует подписанное значение на вершине стека unsigned int32оценки, вызывая переполнение OverflowException .

Conv_Ovf_U4_Un

Преобразует значение без знака в верхней части стека unsigned int32оценки, вызывая OverflowException переполнение.

Conv_Ovf_U8

Преобразует подписанное значение на вершине стека unsigned int64оценки, вызывая переполнение OverflowException .

Conv_Ovf_U8_Un

Преобразует значение без знака в верхней части стека unsigned int64оценки, вызывая OverflowException переполнение.

Conv_R_Un

Преобразует целое число без знака в верхней части стека float32оценки.

Conv_R4

Преобразует значение в верхней части стека float32оценки.

Conv_R8

Преобразует значение в верхней части стека float64оценки.

Conv_U

Преобразует значение поверх стека unsigned native intоценки и расширяет его в native int.

Conv_U1

Преобразует значение поверх стека unsigned int8оценки и расширяет его в int32.

Conv_U2

Преобразует значение поверх стека unsigned int16оценки и расширяет его в int32.

Conv_U4

Преобразует значение поверх стека unsigned int32оценки и расширяет его в int32.

Conv_U8

Преобразует значение поверх стека unsigned int64оценки и расширяет его в int64.

Cpblk

Копирует указанное число байтов из исходного адреса в целевой адрес.

Cpobj

Копирует тип значения, расположенный по адресу объекта (типа &или) в адрес целевого объекта (типаnative int& или).native int

Div

Делит два значения и отправляет результат в стек вычислений в виде с плавающей запятой (тип F) или кворот (тип int32).

Div_Un

Делит два целочисленных значения без знака и отправляет результат (int32) в стек вычислений.

Dup

Копирует текущее самое верхнее значение в стеке вычислений, а затем отправляет копию в стек оценки.

Endfilter

Передает контроль из filter предложения исключения обратно в обработчик исключений (CLI).

Endfinally

Передает управление из fault или finally предложения блока исключений обратно в обработчик исключений (CLI).

Initblk

Инициализирует указанный блок памяти с определенным адресом заданного размера и начального значения.

Initobj

Инициализирует каждое поле типа значения по указанному адресу с пустой ссылкой или 0 соответствующего примитивного типа.

Isinst

Проверяет, является ли ссылка на объект (тип O) экземпляром определенного класса.

Jmp

Завершает текущий метод и переходит к указанному методу.

Ldarg

Загружает аргумент (на который ссылается указанное значение индекса) в стек.

Ldarg_0

Загружает аргумент по индексу 0 в стек вычислений.

Ldarg_1

Загружает аргумент по индексу 1 в стек вычислений.

Ldarg_2

Загружает аргумент по индексу 2 в стек вычислений.

Ldarg_3

Загружает аргумент по индексу 3 в стек вычислений.

Ldarg_S

Загружает аргумент (на который ссылается указанный короткий индекс формы) в стек вычислений.

Ldarga

Загрузите адрес аргумента в стек вычислений.

Ldarga_S

Загрузите адрес аргумента в краткой форме в стек вычислений.

Ldc_I4

Отправляет предоставленное значение типа int32 в стек вычислений в виде int32.

Ldc_I4_0

Отправляет целочисленное значение 0 в стек вычислений int32в виде.

Ldc_I4_1

Отправляет целочисленное значение 1 в стек вычислений int32в виде.

Ldc_I4_2

Отправляет целочисленное значение 2 в стек вычислений int32в виде.

Ldc_I4_3

Отправляет целочисленное значение 3 в стек вычислений int32в виде.

Ldc_I4_4

Отправляет целочисленное значение 4 в стек вычислений int32в виде.

Ldc_I4_5

Отправляет целочисленное значение 5 в стек вычислений int32в виде.

Ldc_I4_6

Отправляет целочисленное значение 6 в стек вычислений int32в виде.

Ldc_I4_7

Отправляет целочисленное значение 7 в стек вычислений int32в виде.

Ldc_I4_8

Отправляет целочисленное значение 8 в стек вычислений int32в виде.

Ldc_I4_M1

Отправляет целочисленное значение -1 в стек вычислений int32в виде.

Ldc_I4_S

Отправляет предоставленное int8 значение в стек оценки в виде короткой int32формы.

Ldc_I8

Отправляет предоставленное значение типа int64 в стек вычислений в виде int64.

Ldc_R4

Отправляет предоставленное значение типа в стек вычислений в виде типа float32F (float).

Ldc_R8

Отправляет предоставленное значение типа в стек вычислений в виде типа float64F (float).

Ldelem

Загружает элемент по указанному индексу массива в верхней части стека оценки в качестве типа, указанного в инструкции.

Ldelem_I

Загружает элемент с типом native int по указанному индексу массива в верхней части стека оценки в виде native int.

Ldelem_I1

Загружает элемент с типом int8 по указанному индексу массива в верхней части стека оценки в виде int32.

Ldelem_I2

Загружает элемент с типом int16 по указанному индексу массива в верхней части стека оценки в виде int32.

Ldelem_I4

Загружает элемент с типом int32 по указанному индексу массива в верхней части стека оценки в виде int32.

Ldelem_I8

Загружает элемент с типом int64 по указанному индексу массива в верхней части стека оценки в виде int64.

Ldelem_R4

Загружает элемент с типом float32 по указанному индексу массива в верхней части стека оценки в виде типа F (float).

Ldelem_R8

Загружает элемент с типом float64 по указанному индексу массива в верхней части стека оценки в виде типа F (float).

Ldelem_Ref

Загружает элемент, содержащий ссылку на объект по указанному индексу массива, в верхней части стека оценки в виде типа O (ссылка на объект).

Ldelem_U1

Загружает элемент с типом unsigned int8 по указанному индексу массива в верхней части стека оценки в виде int32.

Ldelem_U2

Загружает элемент с типом unsigned int16 по указанному индексу массива в верхней части стека оценки в виде int32.

Ldelem_U4

Загружает элемент с типом unsigned int32 по указанному индексу массива в верхней части стека оценки в виде int32.

Ldelema

Загружает адрес элемента массива по указанному индексу массива в верхней части стека оценки в виде типа & (управляемый указатель).

Ldfld

Находит значение поля в объекте, ссылка на который находится в стеке вычислений.

Ldflda

Находит адрес поля в объекте, ссылка на который находится в стеке вычислений.

Ldftn

Отправляет неуправляемый указатель (тип native int) в машинный код, реализующий определенный метод в стек вычислений.

Ldind_I

Загружает значение типа native int в виде native int косвенного стека вычислений.

Ldind_I1

Загружает значение типа int8 в int32 виде косвенного стека вычислений.

Ldind_I2

Загружает значение типа int16 в int32 виде косвенного стека вычислений.

Ldind_I4

Загружает значение типа int32 в int32 виде косвенного стека вычислений.

Ldind_I8

Загружает значение типа int64 в int64 виде косвенного стека вычислений.

Ldind_R4

Загружает значение типа в виде типа float32F (float) в стек вычислений косвенно.

Ldind_R8

Загружает значение типа в виде типа float64F (float) в стек вычислений косвенно.

Ldind_Ref

Загружает ссылку на объект как тип O (ссылку на объект) в стек вычислений косвенно.

Ldind_U1

Загружает значение типа unsigned int8 в int32 виде косвенного стека вычислений.

Ldind_U2

Загружает значение типа unsigned int16 в int32 виде косвенного стека вычислений.

Ldind_U4

Загружает значение типа unsigned int32 в int32 виде косвенного стека вычислений.

Ldlen

Отправляет количество элементов одномерного массива на стек вычислений.

Ldloc

Загружает локальную переменную по определенному индексу в стек вычислений.

Ldloc_0

Загружает локальную переменную по индексу 0 в стек вычислений.

Ldloc_1

Загружает локальную переменную по индексу 1 в стек вычислений.

Ldloc_2

Загружает локальную переменную по индексу 2 в стек вычислений.

Ldloc_3

Загружает локальную переменную по индексу 3 в стек вычислений.

Ldloc_S

Загружает локальную переменную по определенному индексу в стек вычислений, короткую форму.

Ldloca

Загружает адрес локальной переменной по определенному индексу в стек вычислений.

Ldloca_S

Загружает адрес локальной переменной по определенному индексу в стек вычислений, короткую форму.

Ldnull

Отправляет ссылку null (тип O) в стек вычислений.

Ldobj

Копирует объект типа значения, на который указывает адрес в верхней части стека оценки.

Ldsfld

Отправляет значение статического поля в стек вычислений.

Ldsflda

Отправляет адрес статического поля в стек вычислений.

Ldstr

Отправляет ссылку на новый объект в строковый литерал, хранящийся в метаданных.

Ldtoken

Преобразует маркер метаданных в представление среды выполнения, принудив его к стеку оценки.

Ldvirtftn

Отправляет неуправляемый указатель (тип native int) в машинный код, реализующий конкретный виртуальный метод, связанный с указанным объектом, в стек вычислений.

Leave

Завершает защищенный регион кода, безоговорочно передавая управление определенной целевой инструкции.

Leave_S

Завершает защищенный регион кода, безоговорочно передавая контроль в целевую инструкцию (короткая форма).

Localloc

Выделяет определенное количество байтов из локального пула динамической памяти и отправляет адрес (временный указатель, тип *) первого выделенного байта в стек вычислений.

Mkrefany

Отправляет типизированные ссылки на экземпляр определенного типа в стек вычислений.

Mul

Умножает два значения и отправляет результат в стек вычислений.

Mul_Ovf

Умножает два целочисленных значения, выполняет проверку переполнения и отправляет результат в стек вычислений.

Mul_Ovf_Un

Умножает два целочисленных значения без знака, выполняет проверку переполнения и отправляет результат в стек оценки.

Neg

Отрицает значение и отправляет результат в стек вычислений.

Newarr

Отправляет ссылку на объект на новый одномерный массив, элементы которого имеют определенный тип в стек оценки.

Newobj

Создает новый объект или новый экземпляр типа значения, принудив ссылку на объект (тип O) в стек вычислений.

Nop

Заполняет пространство, если исправлены коды опкодов. Не выполняется значимая операция, хотя можно использовать цикл обработки.

Not

Вычисляет побитовое дополнение целочисленного значения поверх стека и отправляет результат в стек вычислений как тот же тип.

Or

Вычисляет побитовое дополнение двух целочисленных значений на вершине стека и отправляет результат в стек вычислений.

Pop

Удаляет значение, которое сейчас находится на вершине стека оценки.

Prefix1

Это зарезервированная инструкция.

Prefix2

Это зарезервированная инструкция.

Prefix3

Это зарезервированная инструкция.

Prefix4

Это зарезервированная инструкция.

Prefix5

Это зарезервированная инструкция.

Prefix6

Это зарезервированная инструкция.

Prefix7

Это зарезервированная инструкция.

Prefixref

Это зарезервированная инструкция.

Readonly

Указывает, что следующая операция адреса массива не выполняет проверку типа во время выполнения и возвращает управляемый указатель, мутируемость которого ограничена.

Refanytype

Извлекает маркер типа, внедренный в типизированный справочник.

Refanyval

Извлекает адрес (тип &), внедренный в типизированный справочник.

Rem

Делит два значения и отправляет оставшуюся часть в стек вычислений.

Rem_Un

Делит два неподписанных значения и отправляет оставшуюся часть в стек вычислений.

Ret

Возвращается из текущего метода, принудив возвращаемое значение (если присутствует) из стека оценки вызываемого объекта в стек оценки вызывающего объекта.

Rethrow

Повторно создает текущее исключение.

Shl

Сдвигает целочисленное значение влево (в нулях) по указанному числу битов, принудив результат к стеку оценки.

Shr

Сдвигает целочисленное значение (в знаке) вправо по указанному числу битов, принудив результат к стеку оценки.

Shr_Un

Сдвигает целое число без знака (в нулях) вправо по указанному количеству битов, принудив результат к стеку оценки.

Sizeof

Отправляет размер в байтах указанного типа значения в стек вычислений.

Starg

Сохраняет значение поверх стека оценки в слоте аргументов по указанному индексу.

Starg_S

Сохраняет значение поверх стека оценки в слоте аргументов по указанному индексу, короткой форме.

Stelem

Заменяет элемент массива в заданном индексе значением в стеке вычислений, тип которого указан в инструкции.

Stelem_I

Заменяет элемент массива в заданном индексе native int значением в стеке вычислений.

Stelem_I1

Заменяет элемент массива в заданном индексе int8 значением в стеке вычислений.

Stelem_I2

Заменяет элемент массива в заданном индексе int16 значением в стеке вычислений.

Stelem_I4

Заменяет элемент массива в заданном индексе int32 значением в стеке вычислений.

Stelem_I8

Заменяет элемент массива в заданном индексе int64 значением в стеке вычислений.

Stelem_R4

Заменяет элемент массива в заданном индексе float32 значением в стеке вычислений.

Stelem_R8

Заменяет элемент массива в заданном индексе float64 значением в стеке вычислений.

Stelem_Ref

Заменяет элемент массива в заданном индексе значением ссылок объекта (тип O) в стеке вычислений.

Stfld

Заменяет значение, хранящееся в поле ссылки на объект или указатель на новое значение.

Stind_I

Сохраняет значение типа native int по указанному адресу.

Stind_I1

Сохраняет значение типа int8 по указанному адресу.

Stind_I2

Сохраняет значение типа int16 по указанному адресу.

Stind_I4

Сохраняет значение типа int32 по указанному адресу.

Stind_I8

Сохраняет значение типа int64 по указанному адресу.

Stind_R4

Сохраняет значение типа float32 по указанному адресу.

Stind_R8

Сохраняет значение типа float64 по указанному адресу.

Stind_Ref

Сохраняет значение ссылки на объект по указанному адресу.

Stloc

Отображает текущее значение из верхней части стека оценки и сохраняет его в списке локальных переменных по указанному индексу.

Stloc_0

Отображает текущее значение из верхней части стека оценки и сохраняет его в списке локальных переменных по индексу 0.

Stloc_1

Отображает текущее значение из верхней части стека оценки и сохраняет его в списке локальных переменных по индексу 1.

Stloc_2

Отображает текущее значение из верхней части стека оценки и сохраняет его в списке локальных переменных по индексу 2.

Stloc_3

Отображает текущее значение из верхней части стека оценки и сохраняет его в списке локальных переменных по индексу 3.

Stloc_S

Отображает текущее значение из верхней части стека оценки и сохраняет его в списке index локальных переменных (короткая форма).

Stobj

Копирует значение указанного типа из стека оценки в предоставленный адрес памяти.

Stsfld

Заменяет значение статического поля значением из стека оценки.

Sub

Вычитает одно значение из другого и отправляет результат в стек вычислений.

Sub_Ovf

Вычитает одно целочисленное значение из другого, выполняет проверку переполнения и отправляет результат в стек оценки.

Sub_Ovf_Un

Вычитает одно целое число без знака из другого, выполняет проверку переполнения и отправляет результат в стек оценки.

Switch

Реализует таблицу переходов.

Tailcall

Выполняет инструкцию вызова послефиксированного метода, чтобы кадр стека текущего метода был удален до выполнения фактической инструкции вызова.

Throw

Создает объект исключения в настоящее время в стеке вычислений.

Unaligned

Указывает, что адрес, расположенный на вершине стека оценки, может не соответствовать естественному размеру немедленно следующегоldind, , stind, ldfldstfldldobjstobjinitblkили cpblk инструкции.

Unbox

Преобразует прямоугольное представление типа значения в его распаковку формы.

Unbox_Any

Преобразует прямоугольное представление типа, указанного в инструкции, в его несоотделенные формы.

Volatile

Указывает, что адрес в настоящее время на вершине стека оценки может быть переменным, и результаты чтения этого расположения не могут быть кэшированы или что несколько хранилищ в этом расположении не могут быть отключены.

Xor

Вычисляет побитовый XOR верхних двух значений в стеке вычислений, принудив результат к стеку оценки.

Методы

Имя Описание
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
TakesSingleByteArgument(OpCode)

Возвращает значение true или false, если указанный opcode принимает один байтовый аргумент.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к