OpCodes Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Poskytuje reprezentaci polí pokynů jazyka MSIL (Microsoft Intermediate Language) pro emise ILGenerator členy třídy (například 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
- Dědičnost
-
OpCodes
- Atributy
Příklady
Následující příklad ukazuje konstrukci dynamické metody pomocí ILGenerator generovat OpCodes
do 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
Poznámky
Podrobný popis členů opcode najdete v dokumentaci k Common Language Infrastructure (CLI), zejména "Partition III: CIL Instruction Set" a "Partition II: Metadata Definition and Smantics". Další informace najdete v tématu ECMA 335 Common Language Infrastructure (CLI).
Pole
Add |
Přidá dvě hodnoty a nasdílí výsledek do zásobníku vyhodnocení. |
Add_Ovf |
Přidá dvě celá čísla, provede kontrolu přetečení a nasdílí výsledek do zásobníku vyhodnocení. |
Add_Ovf_Un |
Přidá dvě celočíselné hodnoty bez znaménka, provede kontrolu přetečení a nasdílí výsledek do zásobníku vyhodnocení. |
And |
Vypočítá bitovou hodnotu AND dvou hodnot a nasdílí výsledek do zásobníku vyhodnocení. |
Arglist |
Vrátí nespravovaný ukazatel na seznam argumentů aktuální metody. |
Beq |
Přenese řízení na cílovou instrukci, pokud jsou dvě hodnoty stejné. |
Beq_S |
Převede řízení na cílovou instrukci (krátký formulář), pokud jsou dvě hodnoty stejné. |
Bge |
Převede řízení na cílovou instrukci, pokud je první hodnota větší nebo rovna druhé hodnotě. |
Bge_S |
Převede řízení na cílovou instrukci (krátký formulář), pokud je první hodnota větší nebo rovna druhé hodnotě. |
Bge_Un |
Převede ovládací prvek na cílovou instrukci, pokud je první hodnota větší než druhá hodnota, při porovnávání nepodepsaných celočíselné hodnoty nebo neuspořádané hodnoty float. |
Bge_Un_S |
Převede ovládací prvek na cílovou instrukci (krátký formulář), pokud je první hodnota větší než druhá hodnota, při porovnávání nepodepsaných celočíselné hodnoty nebo neuspořádané hodnoty float. |
Bgt |
Převede řízení na cílovou instrukci, pokud je první hodnota větší než druhá hodnota. |
Bgt_S |
Převede řízení na cílovou instrukce (krátký formulář), pokud je první hodnota větší než druhá hodnota. |
Bgt_Un |
Převede ovládací prvek na cílovou instrukci, pokud je první hodnota větší než druhá hodnota, při porovnávání nepodepsaných celočíselné hodnoty nebo neuspořádané hodnoty float. |
Bgt_Un_S |
Převede ovládací prvek na cílovou instrukci (krátký formulář), pokud je první hodnota větší než druhá hodnota, při porovnávání nepodepsaných celočíselné hodnoty nebo neuspořádané plovoucí hodnoty. |
Ble |
Převede řízení na cílovou instrukci, pokud je první hodnota menší nebo rovna druhé hodnotě. |
Ble_S |
Převede řízení na cílovou instrukci (krátký formulář), pokud je první hodnota menší nebo rovna druhé hodnotě. |
Ble_Un |
Převede ovládací prvek na cílovou instrukci, pokud je první hodnota menší nebo rovna druhé hodnotě, při porovnávání nepřiřazených celočíselné hodnoty nebo neuspořádané plovoucí hodnoty. |
Ble_Un_S |
Převede ovládací prvek na cílovou instrukci (krátký formulář), pokud je první hodnota menší nebo rovna druhé hodnotě, při porovnávání neznamovaných celočíselné hodnoty nebo neuspořádané plovoucí hodnoty. |
Blt |
Převede řízení na cílovou instrukci, pokud je první hodnota menší než druhá hodnota. |
Blt_S |
Převede ovládací prvek na cílovou instrukci (krátký formulář), pokud je první hodnota menší než druhá hodnota. |
Blt_Un |
Převede ovládací prvek na cílovou instrukci, pokud je první hodnota menší než druhá hodnota při porovnávání celočíselné hodnoty bez znaménka nebo neuspořádané hodnoty float. |
Blt_Un_S |
Převede ovládací prvek na cílovou instrukci (krátký formulář), pokud je první hodnota menší než druhá hodnota, při porovnávání nepodepsaných celočíselné hodnoty nebo neuspořádané hodnoty float. |
Bne_Un |
Převede řízení na cílovou instrukci, pokud nejsou stejné dvě celočíselné hodnoty bez znaménka nebo neuspořádané hodnoty float. |
Bne_Un_S |
Převede ovládací prvek na cílovou instrukce (krátký formulář), pokud nejsou stejné dvě celočíselné hodnoty bez znaménka nebo neuspořádané hodnoty float. |
Box |
Převede typ hodnoty na odkaz na objekt (typ |
Br |
Bezpodmínečně přenáší kontrolu na cílovou instrukce. |
Br_S |
Bezpodmínečně přenese kontrolu na cílovou instrukce (krátký formulář). |
Break |
Signalizuje common language infrastructure (CLI) informovat ladicí program, že došlo k přerušení bodu. |
Brfalse |
Přenese řízení na cílovou instrukci, pokud |
Brfalse_S |
Přenese řízení na cílovou instrukci, pokud |
Brtrue |
Převede řízení na cílovou instrukci, pokud |
Brtrue_S |
Převede ovládací prvek na cílovou instrukci (krátký formulář), pokud |
Call |
Volá metodu označenou předanou popisovačem metody. |
Calli |
Volá metodu uvedenou ve zkušebním zásobníku (jako ukazatel na vstupní bod) s argumenty popsanými v konvenci volání. |
Callvirt |
Volá metodu s pozdní vazbou na objekt a nasdílí návratovou hodnotu do zkušebního zásobníku. |
Castclass |
Pokusí se přetypovat objekt předaný odkazem na zadanou třídu. |
Ceq |
Porovná dvě hodnoty. Pokud jsou stejné, celočíselná hodnota 1 |
Cgt |
Porovná dvě hodnoty. Pokud je první hodnota větší než druhá, celočíselná hodnota 1 |
Cgt_Un |
Porovná dvě nepodepsané nebo neuspořádané hodnoty. Pokud je první hodnota větší než druhá, celočíselná hodnota 1 |
Ckfinite |
ArithmeticException Vyvolá, pokud hodnota není konečné číslo. |
Clt |
Porovná dvě hodnoty. Pokud je první hodnota menší než druhá, celočíselná hodnota 1 |
Clt_Un |
Porovná nepodepsané nebo neuspořádané hodnoty |
Constrained |
Omezuje typ, na kterém se provádí volání virtuální metody. |
Conv_I |
Převede hodnotu nad zkušební zásobník na |
Conv_I1 |
Převede hodnotu nad zkušební zásobník na |
Conv_I2 |
Převede hodnotu nad zkušební zásobník na |
Conv_I4 |
Převede hodnotu nad zkušební zásobník na |
Conv_I8 |
Převede hodnotu nad zkušební zásobník na |
Conv_Ovf_I |
Převede podepsanou hodnotu v horní části zkušebního zásobníku na podepsanou |
Conv_Ovf_I_Un |
Převede nepodepsanou hodnotu v horní části zkušebního zásobníku na podepsanou |
Conv_Ovf_I1 |
Převede podepsanou hodnotu nad zkušební zásobník na podepsanou |
Conv_Ovf_I1_Un |
Převede nepodepsanou hodnotu nad zkušební zásobník na podepsanou |
Conv_Ovf_I2 |
Převede podepsanou hodnotu v horní části zkušebního zásobníku na podepsanou |
Conv_Ovf_I2_Un |
Převede nepodepsanou hodnotu nad zkušební zásobník na podepsanou |
Conv_Ovf_I4 |
Převede podepsanou hodnotu v horní části zkušebního zásobníku na podepsanou |
Conv_Ovf_I4_Un |
Převede nepodepsanou hodnotu v horní části zkušebního zásobníku na podepsanou |
Conv_Ovf_I8 |
Převede podepsanou hodnotu v horní části zkušebního zásobníku na podepsanou |
Conv_Ovf_I8_Un |
Převede nepodepsanou hodnotu v horní části zkušebního zásobníku na podepsanou |
Conv_Ovf_U |
Převede podepsanou hodnotu nad zkušebním zásobníkem na |
Conv_Ovf_U_Un |
Převede nepodepsanou hodnotu nad zásobníkem vyhodnocení na |
Conv_Ovf_U1 |
Převede podepsanou hodnotu nad zásobníkem vyhodnocení na |
Conv_Ovf_U1_Un |
Převede nepodepsanou hodnotu nad zásobníkem |
Conv_Ovf_U2 |
Převede podepsanou hodnotu nad zásobníkem vyhodnocení na |
Conv_Ovf_U2_Un |
Převede nepodepsanou hodnotu nad zásobníkem |
Conv_Ovf_U4 |
Převede podepsanou hodnotu nad zkušebním zásobníkem na |
Conv_Ovf_U4_Un |
Převede nepodepsanou hodnotu nad zásobníkem vyhodnocení na |
Conv_Ovf_U8 |
Převede podepsanou hodnotu nad zkušebním zásobníkem na |
Conv_Ovf_U8_Un |
Převede nepodepsanou hodnotu nad zásobníkem vyhodnocení na |
Conv_R_Un |
Převede celočíselnou hodnotu bez znaménka nad zkušební zásobník na |
Conv_R4 |
Převede hodnotu nad zkušební zásobník na |
Conv_R8 |
Převede hodnotu nad zkušební zásobník na |
Conv_U |
Převede hodnotu nad zkušební zásobník na |
Conv_U1 |
Převede hodnotu nad zkušební zásobník na |
Conv_U2 |
Převede hodnotu nad zkušební zásobník na |
Conv_U4 |
Převede hodnotu nad zkušební zásobník na |
Conv_U8 |
Převede hodnotu nad zkušební zásobník na |
Cpblk |
Zkopíruje zadaný počet bajtů ze zdrojové adresy na cílovou adresu. |
Cpobj |
Zkopíruje typ hodnoty umístěný na adrese objektu (typ |
Div |
Rozdělí dvě hodnoty a výsledek nasdílí jako plovoucí desetinu (typ |
Div_Un |
Rozdělí dvě celočíselné hodnoty bez znaménka a nasdílí výsledek ( |
Dup |
Zkopíruje aktuální nejvyšší hodnotu ve zkušebním zásobníku a potom nasdílí kopii do zkušebního zásobníku. |
Endfilter |
Přenese řízení z |
Endfinally |
Přenese řízení z |
Initblk |
Inicializuje zadaný blok paměti na konkrétní adresu na danou velikost a počáteční hodnotu. |
Initobj |
Inicializuje každé pole typu hodnoty na zadanou adresu na odkaz null nebo 0 z příslušného primitivního typu. |
Isinst |
Testuje, zda je odkaz na objekt (typ |
Jmp |
Ukončí aktuální metodu a přeskočí na zadanou metodu. |
Ldarg |
Načte argument (odkazovaný zadanou hodnotou indexu) do zásobníku. |
Ldarg_0 |
Načte argument na index 0 do zkušebního zásobníku. |
Ldarg_1 |
Načte argument na index 1 do zkušebního zásobníku. |
Ldarg_2 |
Načte argument na index 2 do zkušebního zásobníku. |
Ldarg_3 |
Načte argument v indexu 3 do zásobníku vyhodnocení. |
Ldarg_S |
Načte argument (odkazovaný zadaným krátkým indexem formuláře) do zásobníku vyhodnocení. |
Ldarga |
Načtěte adresu argumentu do zásobníku vyhodnocení. |
Ldarga_S |
Načtěte adresu argumentu ve krátké podobě do zásobníku vyhodnocení. |
Ldc_I4 |
Vloží zadanou hodnotu typu |
Ldc_I4_0 |
Nasdílí celočíselnou hodnotu 0 do vyhodnocovacího zásobníku |
Ldc_I4_1 |
Nasdílí celočíselnou hodnotu 1 do vyhodnocovacího zásobníku |
Ldc_I4_2 |
Nasdílí celočíselnou hodnotu 2 do vyhodnocovacího zásobníku |
Ldc_I4_3 |
Nasdílí celočíselnou hodnotu 3 do vyhodnocovacího zásobníku |
Ldc_I4_4 |
Nasdílí celočíselnou hodnotu 4 do vyhodnocovacího zásobníku |
Ldc_I4_5 |
Nasdílí celočíselnou hodnotu 5 do vyhodnocovacího zásobníku |
Ldc_I4_6 |
Nasdílí celočíselnou hodnotu 6 do vyhodnocovacího zásobníku |
Ldc_I4_7 |
Nasdílí celočíselnou hodnotu 7 do vyhodnocovacího zásobníku |
Ldc_I4_8 |
Nasdílí celočíselnou hodnotu 8 do vyhodnocovacího zásobníku |
Ldc_I4_M1 |
Nasdílí celočíselnou hodnotu -1 do zkušebního zásobníku |
Ldc_I4_S |
Vloží zadanou |
Ldc_I8 |
Vloží zadanou hodnotu typu |
Ldc_R4 |
Vloží zadanou hodnotu typu |
Ldc_R8 |
Vloží zadanou hodnotu typu |
Ldelem |
Načte prvek do zadaného indexu pole do horní části zkušebního zásobníku jako typ zadaný v instrukcích. |
Ldelem_I |
Načte prvek s typem |
Ldelem_I1 |
Načte prvek s typem |
Ldelem_I2 |
Načte prvek s typem |
Ldelem_I4 |
Načte prvek s typem |
Ldelem_I8 |
Načte prvek s typem |
Ldelem_R4 |
Načte prvek s typem |
Ldelem_R8 |
Načte prvek s typem |
Ldelem_Ref |
Načte element obsahující odkaz na objekt v zadaném indexu pole na začátek zkušebního zásobníku jako typ |
Ldelem_U1 |
Načte prvek s typem |
Ldelem_U2 |
Načte prvek s typem |
Ldelem_U4 |
Načte prvek s typem |
Ldelema |
Načte adresu prvku pole v zadaném indexu pole na začátek zkušebního zásobníku jako typ |
Ldfld |
Vyhledá hodnotu pole v objektu, jehož odkaz je aktuálně v zásobníku vyhodnocení. |
Ldflda |
Vyhledá adresu pole v objektu, jehož odkaz je aktuálně ve zkušebním zásobníku. |
Ldftn |
Odešle nespravovaný ukazatel (typ |
Ldind_I |
Načte hodnotu typu |
Ldind_I1 |
Načte hodnotu typu |
Ldind_I2 |
Načte hodnotu typu |
Ldind_I4 |
Načte hodnotu typu |
Ldind_I8 |
Načte hodnotu typu |
Ldind_R4 |
Načte hodnotu typu |
Ldind_R8 |
Načte hodnotu typu |
Ldind_Ref |
Načte odkaz na objekt jako typ |
Ldind_U1 |
Načte hodnotu typu |
Ldind_U2 |
Načte hodnotu typu |
Ldind_U4 |
Načte hodnotu typu |
Ldlen |
Nasdílí počet prvků jednorozměrného pole založeného na nule do zásobníku vyhodnocení. |
Ldloc |
Načte místní proměnnou na určitý index do zásobníku vyhodnocení. |
Ldloc_0 |
Načte místní proměnnou na index 0 do zásobníku vyhodnocení. |
Ldloc_1 |
Načte místní proměnnou na index 1 do zásobníku vyhodnocení. |
Ldloc_2 |
Načte místní proměnnou na index 2 do zkušebního zásobníku. |
Ldloc_3 |
Načte místní proměnnou v indexu 3 do zkušebního zásobníku. |
Ldloc_S |
Načte místní proměnnou v určitém indexu do zkušebního zásobníku krátký formulář. |
Ldloca |
Načte adresu místní proměnné na určitý index do zkušebního zásobníku. |
Ldloca_S |
Načte adresu místní proměnné na určitý index do zkušebního zásobníku, krátkého formuláře. |
Ldnull |
Vloží odkaz null (typ |
Ldobj |
Zkopíruje objekt typu hodnoty, na který odkazuje adresa na začátek zkušebního zásobníku. |
Ldsfld |
Nasdílí hodnotu statického pole do zásobníku vyhodnocení. |
Ldsflda |
Nasdílí adresu statického pole do zásobníku vyhodnocení. |
Ldstr |
Nasdílí nový objekt odkaz na řetězcový literál uložený v metadatech. |
Ldtoken |
Převede token metadat na reprezentaci modulu runtime a nasdílí ho do zásobníku vyhodnocení. |
Ldvirtftn |
Odešle nespravovaný ukazatel (typ |
Leave |
Ukončí chráněnou oblast kódu a bezpodmínečně převede kontrolu na konkrétní cílovou instrukci. |
Leave_S |
Ukončí chráněnou oblast kódu a bezpodmínečně převede kontrolu na cílovou instrukci (krátký formulář). |
Localloc |
Přidělí určitý počet bajtů z místního fondu dynamické paměti a odešle adresu (přechodný ukazatel, typ |
Mkrefany |
Nasdílí typový odkaz na instanci konkrétního typu do zásobníku vyhodnocení. |
Mul |
Vynásobí dvě hodnoty a nasdílí výsledek do zásobníku vyhodnocení. |
Mul_Ovf |
Vynásobí dvě celočíselné hodnoty, provede kontrolu přetečení a nasdílí výsledek do zásobníku vyhodnocení. |
Mul_Ovf_Un |
Vynásobí dvě celočíselné hodnoty bez znaménka, provede kontrolu přetečení a nasdílí výsledek do zásobníku vyhodnocení. |
Neg |
Neguje hodnotu a nasdílí výsledek do zásobníku vyhodnocení. |
Newarr |
Nasdílí odkaz na objekt do nového jednorozměrného pole založeného na nule, jehož prvky jsou specifického typu do zásobníku vyhodnocení. |
Newobj |
Vytvoří nový objekt nebo novou instanci typu hodnoty, nasdílí odkaz na objekt (typ |
Nop |
Vyplní mezeru, pokud jsou opcode opraveny. Žádná smysluplná operace se neprovádí, i když je možné spotřebovat cyklus zpracování. |
Not |
Vypočítá bitový doplněk celočíselné hodnoty nad zásobníkem a nasdílí výsledek do zkušebního zásobníku jako stejný typ. |
Or |
Výpočet bitového doplňku dvou celočíselné hodnoty nad zásobníkem a nasdílí výsledek do zkušebního zásobníku. |
Pop |
Odebere hodnotu, která je aktuálně nad zkušebním zásobníkem. |
Prefix1 |
Toto je rezervovaná instrukce. |
Prefix2 |
Toto je rezervovaná instrukce. |
Prefix3 |
Toto je rezervovaná instrukce. |
Prefix4 |
Toto je rezervovaná instrukce. |
Prefix5 |
Toto je rezervovaná instrukce. |
Prefix6 |
Toto je rezervovaná instrukce. |
Prefix7 |
Toto je rezervovaná instrukce. |
Prefixref |
Toto je rezervovaná instrukce. |
Readonly |
Určuje, že následující operace maticové adresy neprovádí žádnou kontrolu typu za běhu a že vrací spravovaný ukazatel, jehož ztlumitelnost je omezena. |
Refanytype |
Načte token typu vložený do typového odkazu. |
Refanyval |
Načte adresu (typ |
Rem |
Rozdělí dvě hodnoty a nasdílí zbytek do zásobníku vyhodnocení. |
Rem_Un |
Rozdělí dvě nepodepsané hodnoty a zbytek nasdílí do zkušebního zásobníku. |
Ret |
Vrátí se z aktuální metody a nasdílí návratovou hodnotu (pokud je k dispozici) ze zásobníku vyhodnocení volané do zásobníku vyhodnocení volajícího. |
Rethrow |
Znovu načítá aktuální výjimku. |
Shl |
Posune celočíselnou hodnotu doleva (v nulech) o zadaný počet bitů a nasdílí výsledek do vyhodnocovacího zásobníku. |
Shr |
Posune celočíselnou hodnotu (znaménko) doprava zadaným počtem bitů a nasdílí výsledek do zásobníku vyhodnocení. |
Shr_Un |
Posune celočíselnou hodnotu bez znaménka (v nulech) doprava zadaným počtem bitů a nasdílí výsledek do zásobníku vyhodnocení. |
Sizeof |
Nasdílí velikost zadaného typu hodnoty v bajtech do zásobníku vyhodnocení. |
Starg |
Uloží hodnotu nad zásobník vyhodnocení v slotu argumentů v zadaném indexu. |
Starg_S |
Uloží hodnotu nad zásobník vyhodnocení v slotu argumentů v zadaném indexu ve krátkém formátu. |
Stelem |
Nahradí maticový prvek v daném indexu hodnotou ve zkušebním zásobníku, jehož typ je zadán v pokynu. |
Stelem_I |
Nahradí maticový prvek v daném indexu |
Stelem_I1 |
Nahradí maticový prvek v daném indexu |
Stelem_I2 |
Nahradí maticový prvek v daném indexu |
Stelem_I4 |
Nahradí maticový prvek v daném indexu |
Stelem_I8 |
Nahradí maticový prvek v daném indexu |
Stelem_R4 |
Nahradí maticový prvek v daném indexu |
Stelem_R8 |
Nahradí maticový prvek v daném indexu |
Stelem_Ref |
Nahradí maticový prvek v daném indexu hodnotou ref objektu (typ |
Stfld |
Nahradí hodnotu uloženou v poli odkazu na objekt nebo ukazatel novou hodnotou. |
Stind_I |
Uloží hodnotu typu |
Stind_I1 |
Uloží hodnotu typu |
Stind_I2 |
Uloží hodnotu typu |
Stind_I4 |
Uloží hodnotu typu |
Stind_I8 |
Uloží hodnotu typu |
Stind_R4 |
Uloží hodnotu typu |
Stind_R8 |
Uloží hodnotu typu |
Stind_Ref |
Uloží hodnotu odkazu na objekt na zadanou adresu. |
Stloc |
Zobrazí aktuální hodnotu z horní části zkušebního zásobníku a uloží ji do seznamu místních proměnných v zadaném indexu. |
Stloc_0 |
Zobrazí aktuální hodnotu z horní části zkušebního zásobníku a uloží ji do seznamu místních proměnných na indexu 0. |
Stloc_1 |
Zobrazí aktuální hodnotu z horní části zkušebního zásobníku a uloží ji do seznamu místních proměnných na indexu 1. |
Stloc_2 |
Zobrazí aktuální hodnotu z horní části zkušebního zásobníku a uloží ji do seznamu místních proměnných na indexu 2. |
Stloc_3 |
Zobrazí aktuální hodnotu z horní části zkušebního zásobníku a uloží ji do seznamu místních proměnných v indexu 3. |
Stloc_S |
Zobrazí aktuální hodnotu z horní části zkušebního zásobníku a uloží ji do seznamu místních proměnných v |
Stobj |
Zkopíruje hodnotu zadaného typu ze zásobníku vyhodnocení do zadané adresy paměti. |
Stsfld |
Nahradí hodnotu statického pole hodnotou ze zkušebního zásobníku. |
Sub |
Odečte jednu hodnotu od druhé a výsledek nasdílí do zásobníku vyhodnocení. |
Sub_Ovf |
Odečte jednu celočíselnou hodnotu od druhé, provede kontrolu přetečení a výsledek nasdílí do zásobníku vyhodnocení. |
Sub_Ovf_Un |
Odečte jednu celočíselnou hodnotu bez znaménka od jiného, provede kontrolu přetečení a výsledek nasdílí do zásobníku vyhodnocení. |
Switch |
Implementuje přeskakovací tabulku. |
Tailcall |
Provede pofixovanou pokyn k volání metody, aby byl před provedením skutečné instrukce volání odebrán rámec zásobníku aktuální metody. |
Throw |
Vyvolá objekt výjimky aktuálně ve zkušebním zásobníku. |
Unaligned |
Označuje, že adresa, která je aktuálně na vrcholu zásobníku hodnocení, nemusí být zarovnaná k přirozené velikosti bezprostředně následující |
Unbox |
Převede krabicové vyjádření typu hodnoty na jeho unboxed form. |
Unbox_Any |
Převede krabicovou reprezentaci typu zadaného v instrukci na jeho unboxed form. |
Volatile |
Určuje, že adresa, která je aktuálně na vrcholu zkušebního zásobníku, může být nestálá a výsledky čtení tohoto umístění nelze uložit do mezipaměti nebo že více úložišť do tohoto umístění nelze potlačit. |
Xor |
Vypočítá bitovou hodnotu XOR prvních dvou hodnot v zásobníku vyhodnocení a nasdílí výsledek do zásobníku vyhodnocení. |
Metody
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
GetType() |
Type Získá aktuální instanci. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří použádnou kopii aktuálního souboru Object. (Zděděno od Object) |
TakesSingleByteArgument(OpCode) |
Vrátí hodnotu true nebo false, pokud zadaný opcode přebírá jeden bajtový argument. |
ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |