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 |
Преобразует тип значения в ссылку на объект (тип |
| Br |
Безоговорочно передает управление целевой инструкции. |
| Br_S |
Безусловно передает управление целевой инструкции (короткая форма). |
| Break |
Сигнализирует инфраструктуре общего языка (CLI), чтобы сообщить отладчику о том, что точка останова была сбита. |
| Brfalse |
Передает управление целевой инструкцией, если |
| Brfalse_S |
Передает элемент управления целевой инструкции, если |
| Brtrue |
Передача элемента управления в целевую инструкцию, если |
| Brtrue_S |
Передача элемента управления в целевую инструкцию (короткая форма), если |
| Call |
Вызывает метод, указанный дескриптором переданного метода. |
| Calli |
Вызывает метод, указанный в стеке оценки (в качестве указателя на точку входа) с аргументами, описанными в соглашении о вызове. |
| Callvirt |
Вызывает метод с поздней привязкой к объекту, принудив возвращаемое значение в стек вычислений. |
| Castclass |
Пытается привести объект, передаваемый по ссылке на указанный класс. |
| Ceq |
Сравнивает два значения. Если они равны, целочисленное значение 1 |
| Cgt |
Сравнивает два значения. Если первое значение больше второго, целочисленное значение 1 |
| Cgt_Un |
Сравнивает два неподписанных или неупорядоченных значения. Если первое значение больше второго, целочисленное значение 1 |
| Ckfinite |
Вызывает, ArithmeticException если значение не является конечным числом. |
| Clt |
Сравнивает два значения. Если первое значение меньше второго, целочисленное значение 1 |
| Clt_Un |
Сравнивает неподписанные или неупорядоченные значения |
| Constrained |
Ограничивает тип, в котором выполняется вызов виртуального метода. |
| Conv_I |
Преобразует значение в верхней части стека |
| Conv_I1 |
Преобразует значение в верхней части стека |
| Conv_I2 |
Преобразует значение в верхней части стека |
| Conv_I4 |
Преобразует значение в верхней части стека |
| Conv_I8 |
Преобразует значение в верхней части стека |
| Conv_Ovf_I |
Преобразует подписанное значение поверх стека оценки в подписанный |
| Conv_Ovf_I_Un |
Преобразует значение без знака на вершине стека оценки в подписанный |
| Conv_Ovf_I1 |
Преобразует подписанное значение поверх стека вычислений в подписанный |
| Conv_Ovf_I1_Un |
Преобразует неподписаемое значение поверх стека оценки в подписанный |
| Conv_Ovf_I2 |
Преобразует подписанное значение на вершине стека оценки в подписанный |
| Conv_Ovf_I2_Un |
Преобразует неподписаемое значение поверх стека оценки в подписанный |
| Conv_Ovf_I4 |
Преобразует подписанное значение поверх стека оценки в подписанный |
| Conv_Ovf_I4_Un |
Преобразует значение без знака на вершине стека оценки в подписанный |
| Conv_Ovf_I8 |
Преобразует подписанное значение поверх стека оценки в подписанный |
| Conv_Ovf_I8_Un |
Преобразует значение без знака на вершине стека оценки в подписанный |
| Conv_Ovf_U |
Преобразует подписанное значение на вершине стека |
| Conv_Ovf_U_Un |
Преобразует значение без знака в верхней части стека |
| Conv_Ovf_U1 |
Преобразует подписанное значение поверх стека |
| Conv_Ovf_U1_Un |
Преобразует значение без знака на вершине стека |
| Conv_Ovf_U2 |
Преобразует подписанное значение поверх стека |
| Conv_Ovf_U2_Un |
Преобразует значение без знака на вершине стека |
| Conv_Ovf_U4 |
Преобразует подписанное значение на вершине стека |
| Conv_Ovf_U4_Un |
Преобразует значение без знака в верхней части стека |
| Conv_Ovf_U8 |
Преобразует подписанное значение на вершине стека |
| Conv_Ovf_U8_Un |
Преобразует значение без знака в верхней части стека |
| Conv_R_Un |
Преобразует целое число без знака в верхней части стека |
| Conv_R4 |
Преобразует значение в верхней части стека |
| Conv_R8 |
Преобразует значение в верхней части стека |
| Conv_U |
Преобразует значение поверх стека |
| Conv_U1 |
Преобразует значение поверх стека |
| Conv_U2 |
Преобразует значение поверх стека |
| Conv_U4 |
Преобразует значение поверх стека |
| Conv_U8 |
Преобразует значение поверх стека |
| Cpblk |
Копирует указанное число байтов из исходного адреса в целевой адрес. |
| Cpobj |
Копирует тип значения, расположенный по адресу объекта (типа |
| Div |
Делит два значения и отправляет результат в стек вычислений в виде с плавающей запятой (тип |
| Div_Un |
Делит два целочисленных значения без знака и отправляет результат ( |
| Dup |
Копирует текущее самое верхнее значение в стеке вычислений, а затем отправляет копию в стек оценки. |
| Endfilter |
Передает контроль из |
| Endfinally |
Передает управление из |
| Initblk |
Инициализирует указанный блок памяти с определенным адресом заданного размера и начального значения. |
| Initobj |
Инициализирует каждое поле типа значения по указанному адресу с пустой ссылкой или 0 соответствующего примитивного типа. |
| Isinst |
Проверяет, является ли ссылка на объект (тип |
| Jmp |
Завершает текущий метод и переходит к указанному методу. |
| Ldarg |
Загружает аргумент (на который ссылается указанное значение индекса) в стек. |
| Ldarg_0 |
Загружает аргумент по индексу 0 в стек вычислений. |
| Ldarg_1 |
Загружает аргумент по индексу 1 в стек вычислений. |
| Ldarg_2 |
Загружает аргумент по индексу 2 в стек вычислений. |
| Ldarg_3 |
Загружает аргумент по индексу 3 в стек вычислений. |
| Ldarg_S |
Загружает аргумент (на который ссылается указанный короткий индекс формы) в стек вычислений. |
| Ldarga |
Загрузите адрес аргумента в стек вычислений. |
| Ldarga_S |
Загрузите адрес аргумента в краткой форме в стек вычислений. |
| Ldc_I4 |
Отправляет предоставленное значение типа |
| Ldc_I4_0 |
Отправляет целочисленное значение 0 в стек вычислений |
| Ldc_I4_1 |
Отправляет целочисленное значение 1 в стек вычислений |
| Ldc_I4_2 |
Отправляет целочисленное значение 2 в стек вычислений |
| Ldc_I4_3 |
Отправляет целочисленное значение 3 в стек вычислений |
| Ldc_I4_4 |
Отправляет целочисленное значение 4 в стек вычислений |
| Ldc_I4_5 |
Отправляет целочисленное значение 5 в стек вычислений |
| Ldc_I4_6 |
Отправляет целочисленное значение 6 в стек вычислений |
| Ldc_I4_7 |
Отправляет целочисленное значение 7 в стек вычислений |
| Ldc_I4_8 |
Отправляет целочисленное значение 8 в стек вычислений |
| Ldc_I4_M1 |
Отправляет целочисленное значение -1 в стек вычислений |
| Ldc_I4_S |
Отправляет предоставленное |
| Ldc_I8 |
Отправляет предоставленное значение типа |
| Ldc_R4 |
Отправляет предоставленное значение типа в стек вычислений в виде типа |
| Ldc_R8 |
Отправляет предоставленное значение типа в стек вычислений в виде типа |
| Ldelem |
Загружает элемент по указанному индексу массива в верхней части стека оценки в качестве типа, указанного в инструкции. |
| Ldelem_I |
Загружает элемент с типом |
| Ldelem_I1 |
Загружает элемент с типом |
| Ldelem_I2 |
Загружает элемент с типом |
| Ldelem_I4 |
Загружает элемент с типом |
| Ldelem_I8 |
Загружает элемент с типом |
| Ldelem_R4 |
Загружает элемент с типом |
| Ldelem_R8 |
Загружает элемент с типом |
| Ldelem_Ref |
Загружает элемент, содержащий ссылку на объект по указанному индексу массива, в верхней части стека оценки в виде типа |
| Ldelem_U1 |
Загружает элемент с типом |
| Ldelem_U2 |
Загружает элемент с типом |
| Ldelem_U4 |
Загружает элемент с типом |
| Ldelema |
Загружает адрес элемента массива по указанному индексу массива в верхней части стека оценки в виде типа |
| Ldfld |
Находит значение поля в объекте, ссылка на который находится в стеке вычислений. |
| Ldflda |
Находит адрес поля в объекте, ссылка на который находится в стеке вычислений. |
| Ldftn |
Отправляет неуправляемый указатель (тип |
| Ldind_I |
Загружает значение типа |
| Ldind_I1 |
Загружает значение типа |
| Ldind_I2 |
Загружает значение типа |
| Ldind_I4 |
Загружает значение типа |
| Ldind_I8 |
Загружает значение типа |
| Ldind_R4 |
Загружает значение типа в виде типа |
| Ldind_R8 |
Загружает значение типа в виде типа |
| Ldind_Ref |
Загружает ссылку на объект как тип |
| Ldind_U1 |
Загружает значение типа |
| Ldind_U2 |
Загружает значение типа |
| Ldind_U4 |
Загружает значение типа |
| Ldlen |
Отправляет количество элементов одномерного массива на стек вычислений. |
| Ldloc |
Загружает локальную переменную по определенному индексу в стек вычислений. |
| Ldloc_0 |
Загружает локальную переменную по индексу 0 в стек вычислений. |
| Ldloc_1 |
Загружает локальную переменную по индексу 1 в стек вычислений. |
| Ldloc_2 |
Загружает локальную переменную по индексу 2 в стек вычислений. |
| Ldloc_3 |
Загружает локальную переменную по индексу 3 в стек вычислений. |
| Ldloc_S |
Загружает локальную переменную по определенному индексу в стек вычислений, короткую форму. |
| Ldloca |
Загружает адрес локальной переменной по определенному индексу в стек вычислений. |
| Ldloca_S |
Загружает адрес локальной переменной по определенному индексу в стек вычислений, короткую форму. |
| Ldnull |
Отправляет ссылку null (тип |
| Ldobj |
Копирует объект типа значения, на который указывает адрес в верхней части стека оценки. |
| Ldsfld |
Отправляет значение статического поля в стек вычислений. |
| Ldsflda |
Отправляет адрес статического поля в стек вычислений. |
| Ldstr |
Отправляет ссылку на новый объект в строковый литерал, хранящийся в метаданных. |
| Ldtoken |
Преобразует маркер метаданных в представление среды выполнения, принудив его к стеку оценки. |
| Ldvirtftn |
Отправляет неуправляемый указатель (тип |
| Leave |
Завершает защищенный регион кода, безоговорочно передавая управление определенной целевой инструкции. |
| Leave_S |
Завершает защищенный регион кода, безоговорочно передавая контроль в целевую инструкцию (короткая форма). |
| Localloc |
Выделяет определенное количество байтов из локального пула динамической памяти и отправляет адрес (временный указатель, тип |
| Mkrefany |
Отправляет типизированные ссылки на экземпляр определенного типа в стек вычислений. |
| Mul |
Умножает два значения и отправляет результат в стек вычислений. |
| Mul_Ovf |
Умножает два целочисленных значения, выполняет проверку переполнения и отправляет результат в стек вычислений. |
| Mul_Ovf_Un |
Умножает два целочисленных значения без знака, выполняет проверку переполнения и отправляет результат в стек оценки. |
| Neg |
Отрицает значение и отправляет результат в стек вычислений. |
| Newarr |
Отправляет ссылку на объект на новый одномерный массив, элементы которого имеют определенный тип в стек оценки. |
| Newobj |
Создает новый объект или новый экземпляр типа значения, принудив ссылку на объект (тип |
| 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 |
Заменяет элемент массива в заданном индексе |
| Stelem_I1 |
Заменяет элемент массива в заданном индексе |
| Stelem_I2 |
Заменяет элемент массива в заданном индексе |
| Stelem_I4 |
Заменяет элемент массива в заданном индексе |
| Stelem_I8 |
Заменяет элемент массива в заданном индексе |
| Stelem_R4 |
Заменяет элемент массива в заданном индексе |
| Stelem_R8 |
Заменяет элемент массива в заданном индексе |
| Stelem_Ref |
Заменяет элемент массива в заданном индексе значением ссылок объекта (тип |
| Stfld |
Заменяет значение, хранящееся в поле ссылки на объект или указатель на новое значение. |
| Stind_I |
Сохраняет значение типа |
| Stind_I1 |
Сохраняет значение типа |
| Stind_I2 |
Сохраняет значение типа |
| Stind_I4 |
Сохраняет значение типа |
| Stind_I8 |
Сохраняет значение типа |
| Stind_R4 |
Сохраняет значение типа |
| Stind_R8 |
Сохраняет значение типа |
| Stind_Ref |
Сохраняет значение ссылки на объект по указанному адресу. |
| Stloc |
Отображает текущее значение из верхней части стека оценки и сохраняет его в списке локальных переменных по указанному индексу. |
| Stloc_0 |
Отображает текущее значение из верхней части стека оценки и сохраняет его в списке локальных переменных по индексу 0. |
| Stloc_1 |
Отображает текущее значение из верхней части стека оценки и сохраняет его в списке локальных переменных по индексу 1. |
| Stloc_2 |
Отображает текущее значение из верхней части стека оценки и сохраняет его в списке локальных переменных по индексу 2. |
| Stloc_3 |
Отображает текущее значение из верхней части стека оценки и сохраняет его в списке локальных переменных по индексу 3. |
| Stloc_S |
Отображает текущее значение из верхней части стека оценки и сохраняет его в списке |
| Stobj |
Копирует значение указанного типа из стека оценки в предоставленный адрес памяти. |
| Stsfld |
Заменяет значение статического поля значением из стека оценки. |
| Sub |
Вычитает одно значение из другого и отправляет результат в стек вычислений. |
| Sub_Ovf |
Вычитает одно целочисленное значение из другого, выполняет проверку переполнения и отправляет результат в стек оценки. |
| Sub_Ovf_Un |
Вычитает одно целое число без знака из другого, выполняет проверку переполнения и отправляет результат в стек оценки. |
| Switch |
Реализует таблицу переходов. |
| Tailcall |
Выполняет инструкцию вызова послефиксированного метода, чтобы кадр стека текущего метода был удален до выполнения фактической инструкции вызова. |
| Throw |
Создает объект исключения в настоящее время в стеке вычислений. |
| Unaligned |
Указывает, что адрес, расположенный на вершине стека оценки, может не соответствовать естественному размеру немедленно следующего |
| Unbox |
Преобразует прямоугольное представление типа значения в его распаковку формы. |
| Unbox_Any |
Преобразует прямоугольное представление типа, указанного в инструкции, в его несоотделенные формы. |
| Volatile |
Указывает, что адрес в настоящее время на вершине стека оценки может быть переменным, и результаты чтения этого расположения не могут быть кэшированы или что несколько хранилищ в этом расположении не могут быть отключены. |
| Xor |
Вычисляет побитовый XOR верхних двух значений в стеке вычислений, принудив результат к стеку оценки. |
Методы
| Имя | Описание |
|---|---|
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| TakesSingleByteArgument(OpCode) |
Возвращает значение true или false, если указанный opcode принимает один байтовый аргумент. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |