. NET Framework intermediate language IL instruction Daquan

Source: Internet
Author: User
Tags bitwise mul volatile
Il is an abbreviation for the intermediate language (intermediate Language) in the. NET Framework. Use. NET Framework provides a compiler that can directly compile the source program into an. exe or. dll file, but the program code compiled at this point is not a machine code that the CPU can execute directly, but rather an intermediate-language Il (intermediate Language) code.

Name Description
Add Adds two values and pushes the result onto the evaluation stack.
add.ovf Adds two integers, performs an overflow check, and pushes the result onto the evaluation stack.
Add.Ovf.Un Adds the two unsigned integer values, performs an overflow check, and pushes the results onto the evaluation stack.
and Calculates the bitwise "and" of two values and pushes the result onto the evaluation stack.
Arglist Returns an unmanaged pointer to the parameter list of the current method.
Beq If two values are equal, the control is transferred to the target instruction.
Beq.s If two values are equal, the control is transferred to the target instruction (short form).
Bge Transfers control to a target instruction if the first value is greater than or equal to the second value.
Bge.s If the first value is greater than or equal to the second value, the control is transferred to the target instruction (short form).
bge.un When comparing unsigned integer values or unordered floating-point values, transfers control to a target instruction if the first value is greater than the second value.
Bge.un.s When comparing unsigned integer values or unordered floating-point values, transfers control to the target instruction (short form) if the first value is greater than the second value.
Bgt Transfers control to a target instruction if the first value is greater than the second value.
Bgt.s If the first value is greater than the second value, the control is transferred to the target instruction (short form).
bgt.un When comparing unsigned integer values or unordered floating-point values, transfers control to a target instruction if the first value is greater than the second value.
Bgt.un.s When comparing unsigned integer values or unordered floating-point values, transfers control to the target instruction (short form) if the first value is greater than the second value.
Ble Transfers control to a target instruction if the first value is less than or equal to the second value.
Ble.s If the first value is less than or equal to the second value, the control is transferred to the target instruction (short form).
ble.un When comparing unsigned integer values or unordered floating-point values, transfers control to a target instruction if the first value is less than or equal to the second value.
Ble.un.s When comparing unsigned integer values or unordered floating-point values, transfers control to the target instruction (short form) if the first value is less than or equal to the second value.
Blt Transfers control to a target instruction if the first value is less than the second value.
Blt.s If the first value is less than the second value, the control is transferred to the target instruction (short form).
blt.un When comparing unsigned integer values or unordered floating-point values, transfers control to a target instruction if the first value is less than the second value.
Blt.un.s When comparing unsigned integer values or unordered floating-point values, transfers control to the target instruction (short form) if the first value is less than the second value.
bne.un Transfers control to a target instruction when two unsigned integer values or unordered floating-point values are not equal.
Bne.un.s Transfers control to a target instruction (short form) when two unsigned integer values or unordered floating-point values are not equal.
Box Converts a value class to an object reference (O type).
Br The control is unconditionally transferred to the target instruction.
Br.s The control is unconditionally transferred to the target instruction (short form).
Break Signals the common language structure (CLI) to inform the debugger that a breakpoint has been hit.
Brfalse If value is false, a null reference (Nothing in Visual Basic), or 0, the control is transferred to the target instruction.
Brfalse.s If value is false, a null reference, or 0, the control is transferred to the target instruction.
Brtrue If value is true, non-null, or nonzero, the control is transferred to the target instruction.
Brtrue.s If value is true, non-null, or nonzero, the control is transferred to the target instruction (short form).
Pager Invokes the method indicated by the method specifier passed.
Calli Calls the method indicated on the evaluation stack, as a pointer to the entry point, by the parameters described by the calling convention.
Callvirt Calls a late-bound method on an object and pushes the return value onto the evaluation stack.
Castclass Attempts to convert the object passed by reference to the specified class.
Ceq Comparison of two values. If the two values are equal, the integer value 1 (Int32) is pushed onto the evaluation stack, otherwise 0 (int32) is pushed onto the evaluation stack.
Cgt Comparison of two values. If the first value is greater than the second value, the integer value 1 (Int32) is pushed onto the evaluation stack, whereas 0 (int32) is pushed onto the evaluation stack.
cgt.un Compares two unsigned or unordered values. If the first value is greater than the second value, the integer value 1 (Int32) is pushed onto the evaluation stack, whereas 0 (int32) is pushed onto the evaluation stack.
Ckfinite If the value is not a finite number, ArithmeticException is raised.
Clt Comparison of two values. If the first value is less than the second value, the integer value 1 (Int32) is pushed onto the evaluation stack, whereas 0 (int32) is pushed onto the evaluation stack.
clt.un Compare unsigned or unordered values value1 and value2. If value1 is less than value2, the integer value 1 (Int32) is pushed onto the evaluation stack, whereas 0 (int32) is pushed onto the evaluation stack.
Constrained Constrains the type on which to make a virtual method call.
Conv.i Converts the value at the top of the evaluation stack to native int.
Conv.i1 Convert the value at the top of the evaluation stack to int8, and then expand (populate) it to Int32.
Conv.i2 Convert the value at the top of the evaluation stack to int16, and then expand (populate) it to Int32.
Conv.i4 Converts the value at the top of the evaluation stack to int32.
Conv.i8 Converts the value at the top of the evaluation stack to int64.
Conv.ovf.i Converts the signed value at the top of the evaluation stack to a signed native int and throws a overflowexception on overflow.
conv.ovf.i.un Converts the unsigned value at the top of the evaluation stack to a signed native int and throws a overflowexception on overflow.
Conv.Ovf.I1 Converts the signed value at the top of the evaluation stack to a signed int8 and expands it to Int32, and throws OverflowException on overflow.
Conv.Ovf.I1.Un Converts the unsigned value at the top of the evaluation stack to a signed int8 and expands it to Int32, and throws OverflowException on overflow.
Conv.Ovf.I2 Converts the signed value at the top of the evaluation stack to a signed int16 and expands it to Int32, and throws OverflowException on overflow.
Conv.Ovf.I2.Un Converts the unsigned value at the top of the evaluation stack to a signed int16 and expands it to Int32, and throws OverflowException on overflow.
Conv.Ovf.I4 Converts the signed value at the top of the evaluation stack to a signed int32 and throws a OverflowException on overflow.
Conv.Ovf.I4.Un Converts the unsigned value at the top of the evaluation stack to a signed int32 and throws a OverflowException on overflow.
Conv.Ovf.I8 Converts the signed value at the top of the evaluation stack to a signed int64 and throws a overflowexception on overflow.
Conv.Ovf.I8.Un Converts the unsigned value at the top of the evaluation stack to a signed int64 and throws a overflowexception on overflow.
Conv.ovf.u Converts the signed value at the top of the evaluation stack to unsigned native int and throws a overflowexception on overflow.
conv.ovf.u.un Converts the unsigned value at the top of the evaluation stack to unsigned native int and throws a overflowexception on overflow.
Conv.Ovf.U1 Converts the signed value at the top of the evaluation stack to unsigned int8 and expands it to Int32, and raises overflowexception on overflow.
Conv.Ovf.U1.Un Converts the unsigned value at the top of the evaluation stack to unsigned int8 and expands it to Int32, and raises overflowexception on overflow.
Conv.Ovf.U2 Converts the signed value at the top of the evaluation stack to unsigned int16 and expands it to Int32, and raises overflowexception on overflow.
Conv.Ovf.U2.Un Converts the unsigned value at the top of the evaluation stack to unsigned int16 and expands it to Int32, and raises overflowexception on overflow.
Conv.Ovf.U4 Converts the signed value at the top of the evaluation stack to unsigned int32 and raises overflowexception on overflow.
Conv.Ovf.U4.Un Converts the unsigned value at the top of the evaluation stack to unsigned int32 and raises overflowexception on overflow.
Conv.Ovf.U8 Converts the signed value at the top of the evaluation stack to unsigned int64 and raises overflowexception on overflow.
Conv.Ovf.U8.Un Converts the unsigned value at the top of the evaluation stack to unsigned int64 and raises overflowexception on overflow.
conv.r.un Converts the unsigned integer value at the top of the evaluation stack to float32.
Conv.r4 Converts the value at the top of the evaluation stack to float32.
Conv.r8 Converts the value at the top of the evaluation stack to float64.
Conv.u Convert the value at the top of the evaluation stack to unsigned native int, and then extend it to native Int.
Conv.u1 Convert the value at the top of the evaluation stack to unsigned int8, and then extend it to Int32.
Conv.u2 Convert the value at the top of the evaluation stack to unsigned int16, and then extend it to Int32.
Conv.u4 Convert the value at the top of the evaluation stack to unsigned int32, and then extend it to Int32.
Conv.u8 Convert the value at the top of the evaluation stack to unsigned int64, and then extend it to int64.
Cpblk Copies the specified number of bytes from the source address to the destination address.
Cpobj Copy the value type that is located at the address of the object (&, *, or native int) to the address of the target object (&, * or native int type).
P Divides two values and pushes the result as floating point (type F) or quotient (int32 type) onto the evaluation stack.
p.un Divides two unsigned integer values and pushes the result (int32) onto the evaluation stack.
Dup Copies the current topmost value on the evaluation stack, and then pushes the copy onto the evaluation stack.
Endfilter Shifts control from the filter clause of the exception back to the common language structure (CLI) exception handler.
endfinally Transfers control from the fault or finally clause of the exception block back to the common language structure (CLI) exception handler.
Initblk Initializes the specified block of memory at a specific address to the given size and initial value.
Initobj Initializes each field of the value type at the specified address to a null reference or 0 of the appropriate primitive type.
Isinst Tests whether the object reference (O type) is an instance of a particular class.
Jmp Exits the current method and jumps to the specified method.
Ldarg Loads a parameter (referenced by the specified index value) onto the stack.
ldarg.0 Loads a parameter with index 0 onto the evaluation stack.
Ldarg.1 Loads a parameter with index 1 onto the evaluation stack.
Ldarg.2 Loads a parameter with index 2 onto the evaluation stack.
Ldarg.3 Loads a parameter with index 3 onto the evaluation stack.
Ldarg.s Loads a parameter (referenced by a specified short-form index) onto the evaluation stack.
Ldarga Loads the parameter address onto the evaluation stack.
Ldarga.s Loads the parameter address on the evaluation stack in a short format.
Ldc.i4 Pushes the value of the provided Int32 type as int32 onto the evaluation stack.
ldc.i4.0 Pushes an integer value of 0 onto the evaluation stack as a int32.
ldc.i4.1 Pushes an integer value of 1 onto the evaluation stack as a int32.
ldc.i4.2 Pushes an integer value of 2 onto the evaluation stack as a int32.
ldc.i4.3 Pushes an integer value of 3 onto the evaluation stack as a int32.
ldc.i4.4 Pushes an integer value of 4 onto the evaluation stack as a int32.
ldc.i4.5 Pushes an integer value of 5 onto the evaluation stack as a int32.
ldc.i4.6 Pushes an integer value of 6 onto the evaluation stack as a int32.
ldc.i4.7 Pushes an integer value of 7 onto the evaluation stack as a int32.
ldc.i4.8 Pushes an integer value of 8 onto the evaluation stack as a int32.
Ldc.I4.M1 Pushes an integer value of 1 as a int32 onto the evaluation stack.
Ldc.i4.s Pushes the supplied int8 value onto the evaluation stack as a int32 (short form).
Ldc.i8 Pushes the value of the provided int64 type as int64 onto the evaluation stack.
Ldc.r4 Pushes the value of the supplied float32 type to the evaluation stack as an F (float) type.
Ldc.r8 Pushes the value of the supplied float64 type to the evaluation stack as an F (float) type.
Ldelem Loads the elements in the specified array index to the top of the evaluation stack, as specified in the directive.
Ldelem.i Loads an element of type native int at the specified array index as native int onto the top of the evaluation stack.
Ldelem.i1 Loads an element of type int8 at the specified array index as int32 to the top of the evaluation stack.
Ldelem.i2 Loads an element of type Int16 at the specified array index as int32 to the top of the evaluation stack.
Ldelem.i4 Loads an element of type int32 at the specified array index as int32 to the top of the evaluation stack.
Ldelem.i8 Loads an element of type int64 at the specified array index as int64 to the top of the evaluation stack.
Ldelem.r4 Loads an element of type float32 at the specified array index into the top of the evaluation stack as an F type (float).
Ldelem.r8 Loads an element of type float64 at the specified array index into the top of the evaluation stack as an F type (float).
Ldelem.ref Loads the element that contains the object reference at the specified array index as an O type (object reference) to the top of the evaluation stack.
Ldelem.u1 Loads an element of type unsigned int8 at the specified array index as int32 to the top of the evaluation stack.
Ldelem.u2 Loads an element of type unsigned int16 at the specified array index as int32 to the top of the evaluation stack.
Ldelem.u4 Loads an element of type unsigned int32 at the specified array index as int32 to the top of the evaluation stack.
Ldelema Loads the address of the array element at the specified array index as the & type (managed pointer) to the top of the evaluation stack.
Ldfld Finds the value of the field in the object whose reference is currently on the evaluation stack.
Ldflda Finds the address of an object whose reference is currently on the evaluation stack's field.
ldftn Pushes an unmanaged pointer (native int type) that points to the native code that implements a particular method onto the evaluation stack.
Ldind.i Loads a value of type native int as a native int onto the evaluation stack indirectly.
Ldind.i1 The value of the int8 type is indirectly loaded on the evaluation stack as a int32.
Ldind.i2 The value of the Int16 type is indirectly loaded on the evaluation stack as a int32.
Ldind.i4 The value of the Int32 type is indirectly loaded on the evaluation stack as a int32.
Ldind.i8 The value of the int64 type is indirectly loaded on the evaluation stack as a int64.
Ldind.r4 The value of type float32 is indirectly loaded on the evaluation stack as an F (float) type.
Ldind.r8 The value of type float64 is indirectly loaded on the evaluation stack as an F (float) type.
Ldind.ref The object reference is indirectly loaded onto the evaluation stack as an O (object reference) type.
Ldind.u1 The value of the unsigned int8 type is indirectly loaded on the evaluation stack as int32.
Ldind.u2 The value of the unsigned int16 type is indirectly loaded on the evaluation stack as int32.
Ldind.u4 The value of the unsigned int32 type is indirectly loaded on the evaluation stack as int32.
Ldlen Pushes the number of elements of a zero-based, one-dimensional array onto the evaluation stack.
Ldloc Loads the local variable at the specified index onto the evaluation stack.
ldloc.0 Loads the local variable at index 0 onto the evaluation stack.
Ldloc.1 Loads the local variable at index 1 onto the evaluation stack.
Ldloc.2 Loads the local variable at index 2 onto the evaluation stack.
Ldloc.3 Loads the local variable at index 3 onto the evaluation stack.
Ldloc.s Loads a local variable at a specific index onto the evaluation stack (short form).
Ldloca Loads the address of a local variable at a specific index onto the evaluation stack.
Ldloca.s Loads the address of a local variable at a specific index onto the evaluation stack (short form).
Ldnull Pushes a null reference (O type) onto the evaluation stack.
Ldobj Copy the value-type object that the address points to the top of the evaluation stack.
Ldsfld Pushes the value of a static field onto the evaluation stack.
Ldsflda Pushes the address of a static field onto the evaluation stack.
Ldstr Pushes a new object reference to a string stored in metadata.
Ldtoken Converts a metadata token to its run-time representation and pushes it onto the evaluation stack.
ldvirtftn Pushes an unmanaged pointer (native int type) to the native code that implements the specific virtual method associated with the specified object onto the evaluation stack.
Leave Exits a protected area of code and unconditionally transfers control to a specific target directive.
Leave.s Exits the protected area of code and unconditionally transfers control to the target instruction (abbreviated form).
Localloc Allocates a specific number of bytes from a local dynamic memory pool and pushes the address (transient pointer, * type) of the first allocated byte onto the evaluation stack.
Mkrefany Pushes a typed reference to a particular type instance onto the evaluation stack.
Mul Multiplies two values and pushes the result onto the evaluation stack.
mul.ovf Multiplies two integer values, performs an overflow check, and pushes the result onto the evaluation stack.
Mul.Ovf.Un Multiplies two unsigned integer values, performs an overflow check, and pushes the result onto the evaluation stack.
Neg Performs a negation on a value and pushes the result onto the evaluation stack.
Newarr Pushes an object reference to a new zero-based, one-dimensional array whose elements belong to a particular type, onto the evaluation stack.
Newobj Creates a new object or new instance of a value type and pushes an object reference (type O) onto the evaluation stack.
Nop If the opcode is patched, the space is populated. Although the processing cycle may be consumed, no meaningful action is performed.
Not Computes the bitwise complement of the top integer value of the stack and pushes the result onto the evaluation stack as the same type.
Or Calculates the bitwise complement of the two integer values at the top of the stack and pushes the results onto the evaluation stack.
Pop Removes the value currently on top of the evaluation stack.
Prefix1 Infrastructure. This instruction is a reserved instruction.
Prefix2 Infrastructure. This instruction is a reserved instruction.
Prefix3 Infrastructure. This instruction is a reserved instruction.
Prefix4 Infrastructure. This instruction is a reserved instruction.
Prefix5 Infrastructure. This instruction is a reserved instruction.
Prefix6 Infrastructure. This instruction is a reserved instruction.
Prefix7 Infrastructure. This instruction is a reserved instruction.
Prefixref Infrastructure. This instruction is a reserved instruction.
Readonly Specifies that the subsequent array address operation does not perform a type check at run time, and returns a managed pointer that is subject to variability.
Refanytype Retrieves a type tag embedded within a typed reference.
Refanyval Retrieves an address (& type) embedded within a typed reference.
Rem Divides two values and pushes the remainder onto the evaluation stack.
rem.un Divides two unsigned values and pushes the remainder onto the evaluation stack.
Ret Returns from the current method and pushes the return value (if present) from the caller's evaluation stack onto the callee's evaluation stack.
Rethrow Throws the current exception again.
Shl Shifts the integer value to the left (filled with 0) by the specified number of digits and pushes the result onto the evaluation stack.
Shr Shifts the integer value to the right (reserved symbol) by the specified number of digits and pushes the result onto the evaluation stack.
shr.un Shifts the unsigned integer value right (populated with 0) by the specified number of digits and pushes the result onto the evaluation stack.
Sizeof Pushes the size of the provided value type (in bytes) onto the evaluation stack.
Starg Stores the value at the top of the evaluation stack in the parameter slot at the specified index.
Starg.s Stores the value at the top of the evaluation stack in the parameter slot at the specified index (short form).
Stelem Replaces the array element at the given index with the value from the evaluation stack, and its type is specified in the directive.
Stelem.i Replaces the array element at the given index with the native int value on the evaluation stack.
Stelem.i1 Replaces the array element at the given index with the int8 value on the evaluation stack.
Stelem.i2 Replaces the array element at the given index with the Int16 value on the evaluation stack.
Stelem.i4 Replaces the array element at the given index with the int32 value on the evaluation stack.
Stelem.i8 Replaces the array element at the given index with the int64 value on the evaluation stack.
Stelem.r4 Replaces the array element at the given index with the float32 value on the evaluation stack.
Stelem.r8 Replaces the array element at the given index with the Float64 value on the evaluation stack.
Stelem.ref Replaces the array element at the given index with the object ref value (O type) on the evaluation stack.
Stfld Replace the value stored in the field of the object reference or pointer with the new value.
Stind.i Stores the value of type native int at the provided address.
Stind.i1 Stores the value of the int8 type at the provided address.
Stind.i2 Stores the value of the Int16 type at the provided address.
Stind.i4 Stores the value of the Int32 type at the provided address.
Stind.i8 Stores the value of the int64 type at the provided address.
Stind.r4 Stores the value of the float32 type at the provided address.
Stind.r8 Stores the value of the Float64 type at the provided address.
Stind.ref Stores the object reference value at the provided address.
Stloc POPs the current value from the top of the evaluation stack and stores it in the list of local variables at the specified index.
stloc.0 POPs the current value from the top of the evaluation stack and stores it in the local variable list at index 0.
Stloc.1 POPs the current value from the top of the evaluation stack and stores it in the local variable list at index 1.
Stloc.2 POPs the current value from the top of the evaluation stack and stores it in the local variable list at index 2.
Stloc.3 POPs the current value from the top of the evaluation stack and stores it in the local variable list at index 3.
Stloc.s POPs the current value from the top of the evaluation stack and stores it in the local variable list at index (short form).
Stobj Copies the value of the specified type from the evaluation stack to the provided memory address.
Stsfld Replace the value of the static field with the value from the evaluation stack.
Sub Subtracts a value from another value and pushes the result onto the evaluation stack.
sub.ovf Subtracts an integer value from another value, performs an overflow check, and pushes the result onto the evaluation stack.
Sub.Ovf.Un Subtracts an unsigned integer value from another value, performs an overflow check, and pushes the result onto the evaluation stack.
Switch Implement a jump table.
Tailcall A method invocation instruction that executes the suffix to remove the stack frame of the current method before executing the actual calling instruction.
Throw Throws the exception object that is currently on the evaluation stack.
Unaligned Indicates that the address currently on the evaluation stack may not be aligned with the natural size of the immediately ldind, stind, ldfld, stfld, ldobj, stobj, initblk, or cpblk directives.
Unbox Converts the boxed representation of a value type to its unboxed form.
Unbox.any Converts the boxed representation of a specified type in an instruction to an unboxed form.
Volatile Specifies that the address currently on top of the evaluation stack can be volatile, and that the result of reading that location cannot be cached, or that multiple stores of that address cannot be canceled.
Xor Calculates the bitwise XOR of the two values at the top of the evaluation stack and pushes the results onto the evaluation stack.

Summarize

This is just to give you a summary of the IL instructions, no detailed explanation. The Ancients Cloud: water to take a mouthful of drink, the road to step after step, the pace of big easy to pull the eggs, slowly. Although the content is less, but there will be the next article. The next article or will write some basic instructions IL, I will combine my own understanding, as far as possible to write a bit more popular, so that people easier to understand.

The above is. NET Framework intermediate language IL instruction Daquan content, more related content please pay attention to topic.alibabacloud.com (www.php.cn)!

  • Related Article

    Contact Us

    The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

    If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.