OpCodes Klass

Definition

Innehåller fältrepresentationer av msil-instruktionerna (Microsoft Intermediate Language) för utsläpp av klassmedlemmarna ILGenerator (till exempel 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
Arv
OpCodes
Attribut

Exempel

I följande exempel visas konstruktionen av en dynamisk metod som använder ILGenerator för att generera OpCodes till en 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

Kommentarer

En detaljerad beskrivning av medlems opcodes finns i CLI-dokumentationen (Common Language Infrastructure), särskilt "Partition III: CIL Instruction Set" och "Partition II: Metadata Definition and Semantics". Mer information finns i ECMA 335 Common Language Infrastructure (CLI).

Fält

Name Description
Add

Lägger till två värden och push-överför resultatet till utvärderingsstacken.

Add_Ovf

Lägger till två heltal, utför en spillkontroll och push-överför resultatet till utvärderingsstacken.

Add_Ovf_Un

Lägger till två osignerade heltalsvärden, utför en spillkontroll och push-överför resultatet till utvärderingsstacken.

And

Beräknar bitvis OCH för två värden och push-överför resultatet till utvärderingsstacken.

Arglist

Returnerar en ohanterad pekare till argumentlistan för den aktuella metoden.

Beq

Överför kontrollen till en målinstruktion om två värden är lika med.

Beq_S

Överför kontrollen till en målinstruktion (kort formulär) om två värden är lika.

Bge

Överför kontrollen till en målinstruktion om det första värdet är större än eller lika med det andra värdet.

Bge_S

Överför kontrollen till en målinstruktion (kort formulär) om det första värdet är större än eller lika med det andra värdet.

Bge_Un

Överför kontrollen till en målinstruktion om det första värdet är större än det andra värdet, när du jämför osignerade heltalsvärden eller osorterade flyttalsvärden.

Bge_Un_S

Överför kontrollen till en målinstruktion (kort formulär) om det första värdet är större än det andra värdet när du jämför osignerade heltalsvärden eller osorterade flyttalsvärden.

Bgt

Överför kontrollen till en målinstruktion om det första värdet är större än det andra värdet.

Bgt_S

Överför kontrollen till en målinstruktion (kort formulär) om det första värdet är större än det andra värdet.

Bgt_Un

Överför kontrollen till en målinstruktion om det första värdet är större än det andra värdet, när du jämför osignerade heltalsvärden eller osorterade flyttalsvärden.

Bgt_Un_S

Överför kontrollen till en målinstruktion (kort formulär) om det första värdet är större än det andra värdet när du jämför osignerade heltalsvärden eller osorterade flyttalsvärden.

Ble

Överför kontrollen till en målinstruktion om det första värdet är mindre än eller lika med det andra värdet.

Ble_S

Överför kontrollen till en målinstruktion (kort formulär) om det första värdet är mindre än eller lika med det andra värdet.

Ble_Un

Överför kontrollen till en målinstruktion om det första värdet är mindre än eller lika med det andra värdet när du jämför osignerade heltalsvärden eller osorterade flyttalsvärden.

Ble_Un_S

Överför kontrollen till en målinstruktion (kort form) om det första värdet är mindre än eller lika med det andra värdet när du jämför osignerade heltalsvärden eller osorterade flyttalsvärden.

Blt

Överför kontrollen till en målinstruktion om det första värdet är mindre än det andra värdet.

Blt_S

Överför kontrollen till en målinstruktion (kort formulär) om det första värdet är mindre än det andra värdet.

Blt_Un

Överför kontrollen till en målinstruktion om det första värdet är mindre än det andra värdet när du jämför osignerade heltalsvärden eller osorterade flyttalsvärden.

Blt_Un_S

Överför kontrollen till en målinstruktion (kort formulär) om det första värdet är mindre än det andra värdet, när du jämför osignerade heltalsvärden eller osorterade flyttalsvärden.

Bne_Un

Överför kontrollen till en målinstruktion när två osignerade heltalsvärden eller osorterade flyttalsvärden inte är lika med.

Bne_Un_S

Överför kontrollen till en målinstruktion (kort formulär) när två osignerade heltalsvärden eller osorterade flyttalsvärden inte är lika med.

Box

Konverterar en värdetyp till en objektreferens (typ O).

Br

Överför ovillkorligt kontrollen till en målinstruktion.

Br_S

Ovillkorligt överför kontrollen till en målinstruktion (kort formulär).

Break

Signalerar common language infrastructure (CLI) för att informera felsökaren om att en brytpunkt har utlösts.

Brfalse

Överför kontrollen till en målinstruktion om value är false, en nullreferens (Nothing i Visual Basic) eller noll.

Brfalse_S

Överför kontrollen till en målinstruktion om value är false, en nullreferens eller noll.

Brtrue

Överför kontrollen till en målinstruktion om value är true, inte null eller icke-noll.

Brtrue_S

Överför kontrollen till en målinstruktion (kort formulär) om value är true, inte null eller icke-noll.

Call

Anropar metoden som anges av den angivna metodbeskrivningen.

Calli

Anropar den metod som anges i utvärderingsstacken (som en pekare till en startpunkt) med argument som beskrivs av en anropskonvention.

Callvirt

Anropar en sen bindningsmetod för ett objekt och push-överför returvärdet till utvärderingsstacken.

Castclass

Försöker omvandla ett objekt som skickas med referens till den angivna klassen.

Ceq

Jämför två värden. Om de är lika överförs heltalsvärdet 1 (int32) till utvärderingsstacken. annars skickas 0 (int32) till utvärderingsstacken.

Cgt

Jämför två värden. Om det första värdet är större än det andra överförs heltalsvärdet 1 (int32) till utvärderingsstacken. annars skickas 0 (int32) till utvärderingsstacken.

Cgt_Un

Jämför två osignerade eller osorterade värden. Om det första värdet är större än det andra överförs heltalsvärdet 1 (int32) till utvärderingsstacken. annars skickas 0 (int32) till utvärderingsstacken.

Ckfinite

Genererar ArithmeticException om värdet inte är ett begränsat tal.

Clt

Jämför två värden. Om det första värdet är mindre än det andra överförs heltalsvärdet 1 (int32) till utvärderingsstacken. annars skickas 0 (int32) till utvärderingsstacken.

Clt_Un

Jämför de osignerade eller osorterade värdena value1 och value2. Om value1 är mindre än value2överförs heltalsvärdet 1 (int32) till utvärderingsstacken. Annars pushas 0 (int32) till utvärderingsstacken.

Constrained

Begränsar vilken typ av anrop av virtuell metod som görs.

Conv_I

Konverterar värdet ovanpå utvärderingsstacken till native int.

Conv_I1

Konverterar värdet ovanpå utvärderingsstacken till int8och utökar sedan (pads) det till int32.

Conv_I2

Konverterar värdet ovanpå utvärderingsstacken till int16och utökar sedan (pads) det till int32.

Conv_I4

Konverterar värdet ovanpå utvärderingsstacken till int32.

Conv_I8

Konverterar värdet ovanpå utvärderingsstacken till int64.

Conv_Ovf_I

Konverterar det signerade värdet ovanpå utvärderingsstacken till signerat native intoch utlöser OverflowException spill.

Conv_Ovf_I_Un

Konverterar det osignerade värdet ovanpå utvärderingsstacken till signerat native intoch utlöser OverflowException spill.

Conv_Ovf_I1

Konverterar det signerade värdet ovanpå utvärderingsstacken till signerat int8 och utökar det till int32och utlöser OverflowException spill.

Conv_Ovf_I1_Un

Konverterar det osignerade värdet ovanpå utvärderingsstacken till signerat int8 och utökar det till int32, vilket OverflowException utlöser spill.

Conv_Ovf_I2

Konverterar det signerade värdet ovanpå utvärderingsstacken till signerat int16 och utökar det till int32, vilket OverflowException utlöser spill.

Conv_Ovf_I2_Un

Konverterar det osignerade värdet ovanpå utvärderingsstacken till signerat int16 och utökar det till int32, vilket OverflowException utlöser spill.

Conv_Ovf_I4

Konverterar det signerade värdet ovanpå utvärderingsstacken till signerat int32och utlöser OverflowException spill.

Conv_Ovf_I4_Un

Konverterar det osignerade värdet ovanpå utvärderingsstacken till signerat int32och utlöser OverflowException spill.

Conv_Ovf_I8

Konverterar det signerade värdet ovanpå utvärderingsstacken till signerat int64och utlöser OverflowException spill.

Conv_Ovf_I8_Un

Konverterar det osignerade värdet ovanpå utvärderingsstacken till signerat int64och utlöser OverflowException spill.

Conv_Ovf_U

Konverterar det signerade värdet ovanpå utvärderingsstacken till unsigned native intoch genererar OverflowException spill.

Conv_Ovf_U_Un

Konverterar det osignerade värdet ovanpå utvärderingsstacken till unsigned native intoch genererar OverflowException spill.

Conv_Ovf_U1

Konverterar det signerade värdet ovanpå utvärderingsstacken till unsigned int8 och utökar det till int32och utlöser OverflowException spill.

Conv_Ovf_U1_Un

Konverterar det osignerade värdet ovanpå utvärderingsstacken till unsigned int8 och utökar det till int32, vilket OverflowException utlöser spill.

Conv_Ovf_U2

Konverterar det signerade värdet ovanpå utvärderingsstacken till unsigned int16 och utökar det till int32och utlöser OverflowException spill.

Conv_Ovf_U2_Un

Konverterar det osignerade värdet ovanpå utvärderingsstacken till unsigned int16 och utökar det till int32, vilket OverflowException utlöser spill.

Conv_Ovf_U4

Konverterar det signerade värdet ovanpå utvärderingsstacken till unsigned int32och genererar OverflowException spill.

Conv_Ovf_U4_Un

Konverterar det osignerade värdet ovanpå utvärderingsstacken till unsigned int32och genererar OverflowException spill.

Conv_Ovf_U8

Konverterar det signerade värdet ovanpå utvärderingsstacken till unsigned int64och genererar OverflowException spill.

Conv_Ovf_U8_Un

Konverterar det osignerade värdet ovanpå utvärderingsstacken till unsigned int64och genererar OverflowException spill.

Conv_R_Un

Konverterar det osignerade heltalsvärdet ovanpå utvärderingsstacken till float32.

Conv_R4

Konverterar värdet ovanpå utvärderingsstacken till float32.

Conv_R8

Konverterar värdet ovanpå utvärderingsstacken till float64.

Conv_U

Konverterar värdet ovanpå utvärderingsstacken till unsigned native intoch utökar det till native int.

Conv_U1

Konverterar värdet ovanpå utvärderingsstacken till unsigned int8och utökar det till int32.

Conv_U2

Konverterar värdet ovanpå utvärderingsstacken till unsigned int16och utökar det till int32.

Conv_U4

Konverterar värdet ovanpå utvärderingsstacken till unsigned int32och utökar det till int32.

Conv_U8

Konverterar värdet ovanpå utvärderingsstacken till unsigned int64och utökar det till int64.

Cpblk

Kopierar ett angivet antal byte från en källadress till en måladress.

Cpobj

Kopierar värdetypen som finns på adressen för ett objekt (typ &, eller native int) till målobjektets adress (typ &, eller native int).

Div

Delar upp två värden och push-överför resultatet som en flyttal (typ F) eller kvot (typ int32) till utvärderingsstacken.

Div_Un

Delar upp två osignerade heltalsvärden och push-överför resultatet (int32) till utvärderingsstacken.

Dup

Kopierar det aktuella översta värdet i utvärderingsstacken och skickar sedan kopian till utvärderingsstacken.

Endfilter

Överför kontrollen från -satsen i filter ett undantag tillbaka till undantagshanteraren för Common Language Infrastructure (CLI).

Endfinally

Överför kontrollen från fault eller-satsen finally i ett undantagsblock tillbaka till undantagshanteraren för Common Language Infrastructure (CLI).

Initblk

Initierar ett angivet minnesblock vid en specifik adress till en viss storlek och ett initialt värde.

Initobj

Initierar varje fält av värdetypen vid en angiven adress till en nullreferens eller 0 av lämplig primitiv typ.

Isinst

Testar om en objektreferens (typ O) är en instans av en viss klass.

Jmp

Avslutar den aktuella metoden och hoppar till den angivna metoden.

Ldarg

Läser in ett argument (som refereras av ett angivet indexvärde) till stacken.

Ldarg_0

Läser in argumentet vid index 0 till utvärderingsstacken.

Ldarg_1

Läser in argumentet vid index 1 till utvärderingsstacken.

Ldarg_2

Läser in argumentet vid index 2 till utvärderingsstacken.

Ldarg_3

Läser in argumentet vid index 3 till utvärderingsstacken.

Ldarg_S

Läser in argumentet (som refereras av ett angivet kort formulärindex) till utvärderingsstacken.

Ldarga

Läs in en argumentadress till utvärderingsstacken.

Ldarga_S

Läs in en argumentadress i kort form till utvärderingsstacken.

Ldc_I4

Skickar ett angivet värde av typen int32 till utvärderingsstacken som en int32.

Ldc_I4_0

Push-överför heltalsvärdet 0 till utvärderingsstacken som en int32.

Ldc_I4_1

Push-överför heltalsvärdet 1 till utvärderingsstacken som en int32.

Ldc_I4_2

Push-överför heltalsvärdet 2 till utvärderingsstacken som en int32.

Ldc_I4_3

Push-överför heltalsvärdet 3 till utvärderingsstacken som en int32.

Ldc_I4_4

Push-överför heltalsvärdet 4 till utvärderingsstacken som en int32.

Ldc_I4_5

Push-överför heltalsvärdet 5 till utvärderingsstacken som en int32.

Ldc_I4_6

Push-överför heltalsvärdet 6 till utvärderingsstacken som en int32.

Ldc_I4_7

Push-överför heltalsvärdet 7 till utvärderingsstacken som en int32.

Ldc_I4_8

Push-överför heltalsvärdet 8 till utvärderingsstacken som en int32.

Ldc_I4_M1

Push-överför heltalsvärdet för -1 till utvärderingsstacken som en int32.

Ldc_I4_S

Push-överför det angivna int8 värdet till utvärderingsstacken som ett int32kort formulär.

Ldc_I8

Skickar ett angivet värde av typen int64 till utvärderingsstacken som en int64.

Ldc_R4

Skickar ett angivet värde av typen float32 till utvärderingsstacken som typ F (flyttal).

Ldc_R8

Skickar ett angivet värde av typen float64 till utvärderingsstacken som typ F (flyttal).

Ldelem

Läser in elementet vid ett angivet matrisindex överst i utvärderingsstacken som den typ som anges i instruktionen.

Ldelem_I

Läser in elementet med typen native int vid ett angivet matrisindex överst i utvärderingsstacken som en native int.

Ldelem_I1

Läser in elementet med typen int8 vid ett angivet matrisindex överst i utvärderingsstacken som en int32.

Ldelem_I2

Läser in elementet med typen int16 vid ett angivet matrisindex överst i utvärderingsstacken som en int32.

Ldelem_I4

Läser in elementet med typen int32 vid ett angivet matrisindex överst i utvärderingsstacken som en int32.

Ldelem_I8

Läser in elementet med typen int64 vid ett angivet matrisindex överst i utvärderingsstacken som en int64.

Ldelem_R4

Läser in elementet med typen float32 vid ett angivet matrisindex överst i utvärderingsstacken som typ F (flyttal).

Ldelem_R8

Läser in elementet med typen float64 vid ett angivet matrisindex överst i utvärderingsstacken som typ F (flyttal).

Ldelem_Ref

Läser in elementet som innehåller en objektreferens vid ett angivet matrisindex överst i utvärderingsstacken som typ O (objektreferens).

Ldelem_U1

Läser in elementet med typen unsigned int8 vid ett angivet matrisindex överst i utvärderingsstacken som en int32.

Ldelem_U2

Läser in elementet med typen unsigned int16 vid ett angivet matrisindex överst i utvärderingsstacken som en int32.

Ldelem_U4

Läser in elementet med typen unsigned int32 vid ett angivet matrisindex överst i utvärderingsstacken som en int32.

Ldelema

Läser in adressen till matriselementet vid ett angivet matrisindex överst i utvärderingsstacken som typ & (hanterad pekare).

Ldfld

Hittar värdet för ett fält i objektet vars referens för närvarande finns i utvärderingsstacken.

Ldflda

Hittar adressen till ett fält i objektet vars referens för närvarande finns i utvärderingsstacken.

Ldftn

Skickar en ohanterad pekare (typ native int) till den interna koden som implementerar en specifik metod till utvärderingsstacken.

Ldind_I

Läser in ett värde av typen native int som en native int på utvärderingsstacken indirekt.

Ldind_I1

Läser in ett värde av typen int8 som en int32 på utvärderingsstacken indirekt.

Ldind_I2

Läser in ett värde av typen int16 som en int32 på utvärderingsstacken indirekt.

Ldind_I4

Läser in ett värde av typen int32 som en int32 på utvärderingsstacken indirekt.

Ldind_I8

Läser in ett värde av typen int64 som en int64 på utvärderingsstacken indirekt.

Ldind_R4

Läser in ett värde av typen float32 som en typ F (flyttal) till utvärderingsstacken indirekt.

Ldind_R8

Läser in ett värde av typen float64 som en typ F (flyttal) till utvärderingsstacken indirekt.

Ldind_Ref

Läser in en objektreferens som en typ O (objektreferens) till utvärderingsstacken indirekt.

Ldind_U1

Läser in ett värde av typen unsigned int8 som en int32 på utvärderingsstacken indirekt.

Ldind_U2

Läser in ett värde av typen unsigned int16 som en int32 på utvärderingsstacken indirekt.

Ldind_U4

Läser in ett värde av typen unsigned int32 som en int32 på utvärderingsstacken indirekt.

Ldlen

Push-överför antalet element i en nollbaserad, endimensionell matris till utvärderingsstacken.

Ldloc

Läser in den lokala variabeln vid ett specifikt index till utvärderingsstacken.

Ldloc_0

Läser in den lokala variabeln vid index 0 till utvärderingsstacken.

Ldloc_1

Läser in den lokala variabeln vid index 1 till utvärderingsstacken.

Ldloc_2

Läser in den lokala variabeln vid index 2 till utvärderingsstacken.

Ldloc_3

Läser in den lokala variabeln vid index 3 på utvärderingsstacken.

Ldloc_S

Läser in den lokala variabeln vid ett specifikt index till utvärderingsstacken, kort formulär.

Ldloca

Läser in adressen för den lokala variabeln vid ett specifikt index till utvärderingsstacken.

Ldloca_S

Läser in adressen för den lokala variabeln vid ett specifikt index till utvärderingsstacken, kort form.

Ldnull

Skickar en null-referens (typ O) till utvärderingsstacken.

Ldobj

Kopierar värdetypsobjektet som pekas på av en adress överst i utvärderingsstacken.

Ldsfld

Push-överför värdet för ett statiskt fält till utvärderingsstacken.

Ldsflda

Push-överför adressen för ett statiskt fält till utvärderingsstacken.

Ldstr

Push-överför en ny objektreferens till en strängliteral som lagras i metadata.

Ldtoken

Konverterar en metadatatoken till dess körningsrepresentation och push-överför den till utvärderingsstacken.

Ldvirtftn

Skickar en ohanterad pekare (typ native int) till den interna koden som implementerar en viss virtuell metod som är associerad med ett angivet objekt till utvärderingsstacken.

Leave

Avslutar en skyddad kodregion och överför ovillkorligt kontrollen till en specifik målinstruktion.

Leave_S

Avslutar en skyddad kodregion och överför ovillkorligt kontrollen till en målinstruktion (kort formulär).

Localloc

Allokerar ett visst antal byte från den lokala dynamiska minnespoolen och push-överför adressen (en tillfällig pekare, typ *) av den första allokerade byteen till utvärderingsstacken.

Mkrefany

Skickar en skriven referens till en instans av en viss typ till utvärderingsstacken.

Mul

Multiplicerar två värden och push-överför resultatet på utvärderingsstacken.

Mul_Ovf

Multiplicerar två heltalsvärden, utför en spillkontroll och push-överför resultatet till utvärderingsstacken.

Mul_Ovf_Un

Multiplicerar två osignerade heltalsvärden, utför en spillkontroll och push-överför resultatet till utvärderingsstacken.

Neg

Negerar ett värde och push-överför resultatet till utvärderingsstacken.

Newarr

Push-överför en objektreferens till en ny nollbaserad, endimensionell matris vars element är av en specifik typ till utvärderingsstacken.

Newobj

Skapar ett nytt objekt eller en ny instans av en värdetyp och push-överför en objektreferens (typ O) till utvärderingsstacken.

Nop

Fyller utrymme om opcodes korrigeras. Ingen meningsfull åtgärd utförs även om en bearbetningscykel kan användas.

Not

Beräknar det bitvisa komplementet av heltalsvärdet ovanpå stacken och push-överför resultatet till utvärderingsstacken som samma typ.

Or

Beräkna bitvis komplementet av de två heltalsvärdena ovanpå stacken och push-överför resultatet till utvärderingsstacken.

Pop

Tar bort det värde som för närvarande finns ovanpå utvärderingsstacken.

Prefix1

Detta är en reserverad instruktion.

Prefix2

Detta är en reserverad instruktion.

Prefix3

Detta är en reserverad instruktion.

Prefix4

Detta är en reserverad instruktion.

Prefix5

Detta är en reserverad instruktion.

Prefix6

Detta är en reserverad instruktion.

Prefix7

Detta är en reserverad instruktion.

Prefixref

Detta är en reserverad instruktion.

Readonly

Anger att den efterföljande matrisadressåtgärden inte utför någon typkontroll vid körning och att den returnerar en hanterad pekare vars föränderlighet är begränsad.

Refanytype

Hämtar typtoken som är inbäddad i en typreferens.

Refanyval

Hämtar adressen (typ &) som är inbäddad i en typad referens.

Rem

Delar upp två värden och push-överför resten till utvärderingsstacken.

Rem_Un

Delar upp två osignerade värden och push-överför resten till utvärderingsstacken.

Ret

Returnerar från den aktuella metoden och push-överför ett returvärde (om det finns) från anroparens utvärderingsstack till anroparens utvärderingsstack.

Rethrow

Återväxlar det aktuella undantaget.

Shl

Flyttar ett heltalsvärde till vänster (i nollor) med ett angivet antal bitar och push-överför resultatet till utvärderingsstacken.

Shr

Flyttar ett heltalsvärde (i tecken) till höger med ett angivet antal bitar och push-överför resultatet till utvärderingsstacken.

Shr_Un

Flyttar ett osignerat heltalsvärde (i nollor) till höger med ett angivet antal bitar och push-överför resultatet till utvärderingsstacken.

Sizeof

Push-överför storleken i byte av en angiven värdetyp till utvärderingsstacken.

Starg

Lagrar värdet ovanpå utvärderingsstacken i argumentfacket vid ett angivet index.

Starg_S

Lagrar värdet ovanpå utvärderingsstacken i argumentfacket i ett angivet index, kort formulär.

Stelem

Ersätter matriselementet vid ett angivet index med värdet i utvärderingsstacken, vars typ anges i instruktionen.

Stelem_I

Ersätter matriselementet vid ett angivet index med native int värdet i utvärderingsstacken.

Stelem_I1

Ersätter matriselementet vid ett angivet index med int8 värdet i utvärderingsstacken.

Stelem_I2

Ersätter matriselementet vid ett angivet index med int16 värdet i utvärderingsstacken.

Stelem_I4

Ersätter matriselementet vid ett angivet index med int32 värdet i utvärderingsstacken.

Stelem_I8

Ersätter matriselementet vid ett angivet index med int64 värdet i utvärderingsstacken.

Stelem_R4

Ersätter matriselementet vid ett angivet index med float32 värdet i utvärderingsstacken.

Stelem_R8

Ersätter matriselementet vid ett angivet index med float64 värdet i utvärderingsstacken.

Stelem_Ref

Ersätter matriselementet vid ett angivet index med objektets referensvärde (typ O) i utvärderingsstacken.

Stfld

Ersätter värdet som lagras i fältet för en objektreferens eller pekare med ett nytt värde.

Stind_I

Lagrar ett värde av typen native int på en angiven adress.

Stind_I1

Lagrar ett värde av typen int8 på en angiven adress.

Stind_I2

Lagrar ett värde av typen int16 på en angiven adress.

Stind_I4

Lagrar ett värde av typen int32 på en angiven adress.

Stind_I8

Lagrar ett värde av typen int64 på en angiven adress.

Stind_R4

Lagrar ett värde av typen float32 på en angiven adress.

Stind_R8

Lagrar ett värde av typen float64 på en angiven adress.

Stind_Ref

Lagrar ett objektreferensvärde på en angiven adress.

Stloc

Visar det aktuella värdet överst i utvärderingsstacken och lagrar det i den lokala variabellistan i ett angivet index.

Stloc_0

Visar det aktuella värdet överst i utvärderingsstacken och lagrar det i den lokala variabellistan vid index 0.

Stloc_1

Visar det aktuella värdet överst i utvärderingsstacken och lagrar det i den lokala variabellistan vid index 1.

Stloc_2

Visar det aktuella värdet överst i utvärderingsstacken och lagrar det i den lokala variabellistan vid index 2.

Stloc_3

Visar det aktuella värdet överst i utvärderingsstacken och lagrar det i den lokala variabellistan vid index 3.

Stloc_S

Visar det aktuella värdet överst i utvärderingsstacken och lagrar det i den lokala variabellistan i index (kort formulär).

Stobj

Kopierar ett värde av en angiven typ från utvärderingsstacken till en angiven minnesadress.

Stsfld

Ersätter värdet för ett statiskt fält med ett värde från utvärderingsstacken.

Sub

Subtraherar ett värde från ett annat och push-överför resultatet till utvärderingsstacken.

Sub_Ovf

Subtraherar ett heltalsvärde från ett annat, utför en spillkontroll och push-överför resultatet till utvärderingsstacken.

Sub_Ovf_Un

Subtraherar ett osignerat heltalsvärde från ett annat, utför en spillkontroll och push-överför resultatet till utvärderingsstacken.

Switch

Implementerar en hopptabell.

Tailcall

Utför en postfixad metodanropsinstruktion så att den aktuella metodens stackram tas bort innan den faktiska anropsinstruktionen körs.

Throw

Genererar undantagsobjektet som för närvarande finns i utvärderingsstacken.

Unaligned

Anger att en adress som för närvarande finns ovanpå utvärderingsstacken kanske inte är justerad till den naturliga storleken på följande ldind, , ldfldstind, stfld, ldobj, stobj, initblkeller cpblk instruktion.

Unbox

Konverterar den boxade representationen av en värdetyp till dess oboxade formulär.

Unbox_Any

Konverterar den boxade representationen av en typ som anges i instruktionen till dess oboxade formulär.

Volatile

Anger att en adress som för närvarande finns ovanpå utvärderingsstacken kan vara instabil och att resultatet av att läsa den platsen inte kan cachelagras eller att flera butiker till den platsen inte kan ignoreras.

Xor

Beräknar bitvis XOR för de två översta värdena i utvärderingsstacken och push-överför resultatet till utvärderingsstacken.

Metoder

Name Description
Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
TakesSingleByteArgument(OpCode)

Returnerar sant eller falskt om det angivna opcode-värdet tar ett argument med en enda byte.

ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)

Gäller för