OpCodes Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Содержит поля, предоставляющие инструкции языка 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 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
Комментарии
Подробное описание кодов операций членов см. в документации по общеязыковой инфраструктуре (CLI), в частности в разделах Partition III: CIL Instruction Set (Раздел III: набор инструкций CIL) и Partition II: Metadata Definition and Semantics (Раздел III: набор инструкций CIL) и Partition II: Metadata Definition and Semantics (Раздел II: определение и семантика метаданных). Дополнительные сведения см. в статье 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 |
Помещает в стек вычислений пустую ссылку (тип |
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 |
Заменяет элемент массива с заданным индексом на значение object 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 |
Вычисляет побитовое исключающее ИЛИ двух верхних значений в стеке вычислений и помещает результат обратно в стек. |
Методы
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
TakesSingleByteArgument(OpCode) |
Возвращает true или false, в зависимости от того, принимает ли заданный код операции однобайтовый аргумент. |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |