This is a list of the instructions in the instruction set of the Common Intermediate Language bytecode.
Opcode | Instruction | Description | Type of instruction |
---|---|---|---|
0x58 | add |
Add two values, returning a new value. | Base instruction |
0xD6 |
add.ovf |
Add signed integer values with overflow check. | Base instruction |
0xD7 |
add.ovf.un |
Add unsigned integer values with overflow check. | Base instruction |
0x5F |
and |
Bitwise AND of two integral values, returns an integral value. | Base instruction |
0xFE 0x00 |
arglist |
Return argument list handle for the current method. | Base instruction |
0x3B |
beq <int32 (target)> |
Branch to target if equal. | Base instruction |
0x2E |
beq.s <int8 (target)> |
Branch to target if equal, short form. | Base instruction |
0x3C |
bge <int32 (target)> |
Branch to target if greater than or equal to. | Base instruction |
0x2F |
bge.s <int8 (target)> |
Branch to target if greater than or equal to, short form. | Base instruction |
0x41 |
bge.un <int32 (target)> |
Branch to target if greater than or equal to (unsigned or unordered). | Base instruction |
0x34 |
bge.un.s <int8 (target)> |
Branch to target if greater than or equal to (unsigned or unordered), short form | Base instruction |
0x3D |
bgt <int32 (target)> |
Branch to target if greater than. | Base instruction |
0x30 |
bgt.s <int8 (target)> |
Branch to target if greater than, short form. | Base instruction |
0x42 |
bgt.un <int32 (target)> |
Branch to target if greater than (unsigned or unordered). | Base instruction |
0x35 |
bgt.un.s <int8 (target)> |
Branch to target if greater than (unsigned or unordered), short form. | Base instruction |
0x3E |
ble <int32 (target)> |
Branch to target if less than or equal to. | Base instruction |
0x31 |
ble.s <int8 (target)> |
Branch to target if less than or equal to, short form. | Base instruction |
0x43 |
ble.un <int32 (target)> |
Branch to target if less than or equal to (unsigned or unordered). | Base instruction |
0x36 |
ble.un.s <int8 (target)> |
Branch to target if less than or equal to (unsigned or unordered), short form | Base instruction |
0x3F |
blt <int32 (target)> |
Branch to target if less than. | Base instruction |
0x32 |
blt.s <int8 (target)> |
Branch to target if less than, short form. | Base instruction |
0x44 |
blt.un <int32 (target)> |
Branch to target if less than (unsigned or unordered). | Base instruction |
0x37 |
blt.un.s <int8 (target)> |
Branch to target if less than (unsigned or unordered), short form. | Base instruction |
0x40 |
bne.un <int32 (target)> |
Branch to target if unequal or unordered. | Base instruction |
0x33 |
bne.un.s <int8 (target)> |
Branch to target if unequal or unordered, short form. | Base instruction |
0x8C |
box <typeTok> |
Convert a boxable value to its boxed form | Object model instruction |
0x38 |
br <int32 (target)> |
Branch to target. | Base instruction |
0x2B |
br.s <int8 (target)> |
Branch to target, short form. | Base instruction |
0x01 |
break |
Inform a debugger that a breakpoint has been reached. | Base instruction |
0x39 |
brfalse <int32 (target)> |
Branch to target if value is zero (false). | Base instruction |
0x2C |
brfalse.s <int8 (target)> |
Branch to target if value is zero (false), short form. | Base instruction |
0x3A |
brinst <int32 (target)> |
Branch to target if value is a non-null object reference (alias for brtrue). | Base instruction |
0x2D |
brinst.s <int8 (target)> |
Branch to target if value is a non-null object reference, short form (alias for brtrue.s). | Base instruction |
0x39 |
brnull <int32 (target)> |
Branch to target if value is null (alias for brfalse). | Base instruction |
0x2C |
brnull.s <int8 (target)> |
Branch to target if value is null (alias for brfalse.s), short form. | Base instruction |
0x3A |
brtrue <int32 (target)> |
Branch to target if value is non-zero (true). | Base instruction |
0x2D |
brtrue.s <int8 (target)> |
Branch to target if value is non-zero (true), short form. | Base instruction |
0x39 |
brzero <int32 (target)> |
Branch to target if value is zero (alias for brfalse). | Base instruction |
0x2C |
brzero.s <int8 (target)> |
Branch to target if value is zero (alias for brfalse.s), short form. | Base instruction |
0x28 |
call <method> |
Call method described by method. | Base instruction |
0x29 |
calli <callsitedescr> |
Call method indicated on the stack with arguments described by callsitedescr. | Base instruction |
0x6F |
callvirt <method> |
Call a method associated with an object. | Object model instruction |
0x74 |
castclass <class> |
Cast obj to class. | Object model instruction |
0xFE 0x01 |
ceq |
Push 1 (of type int32) if value1 equals value2, else push 0. | Base instruction |
0xFE 0x02 |
cgt |
Push 1 (of type int32) if value1 > value2, else push 0. | Base instruction |
0xFE 0x03 |
cgt.un |
Push 1 (of type int32) if value1 > value2, unsigned or unordered, else push 0. | Base instruction |
0xC3 |
ckfinite |
Throw ArithmeticException if value is not a finite number. | Base instruction |
0xFE 0x04 |
clt |
Push 1 (of type int32) if value1 < value2, else push 0. | Base instruction |
0xFE 0x05 |
clt.un |
Push 1 (of type int32) if value1 < value2, unsigned or unordered, else push 0. | Base instruction |
0xFE 0x16 |
constrained. <thisType> |
Call a virtual method on a type constrained to be type T | Prefix to instruction |
0xD3 |
conv.i |
Convert to native int, pushing native int on stack. | Base instruction |
0x67 |
conv.i1 |
Convert to int8, pushing int32 on stack. | Base instruction |
0x68 |
conv.i2 |
Convert to int16, pushing int32 on stack. | Base instruction |
0x69 |
conv.i4 |
Convert to int32, pushing int32 on stack. | Base instruction |
0x6A |
conv.i8 |
Convert to int64, pushing int64 on stack. | Base instruction |
0xD4 |
conv.ovf.i |
Convert to a native int (on the stack as native int) and throw an exception on overflow. | Base instruction |
0x8A |
conv.ovf.i.un |
Convert unsigned to a native int (on the stack as native int) and throw an exception on overflow. | Base instruction |
0xB3 |
conv.ovf.i1 |
Convert to an int8 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0x82 |
conv.ovf.i1.un |
Convert unsigned to an int8 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0xB5 |
conv.ovf.i2 |
Convert to an int16 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0x83 |
conv.ovf.i2.un |
Convert unsigned to an int16 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0xB7 |
conv.ovf.i4 |
Convert to an int32 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0x84 |
conv.ovf.i4.un |
Convert unsigned to an int32 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0xB9 |
conv.ovf.i8 |
Convert to an int64 (on the stack as int64) and throw an exception on overflow. | Base instruction |
0x85 |
conv.ovf.i8.un |
Convert unsigned to an int64 (on the stack as int64) and throw an exception on overflow. | Base instruction |
0xD5 |
conv.ovf.u |
Convert to a native unsigned int (on the stack as native int) and throw an exception on overflow. | Base instruction |
0x8B |
conv.ovf.u.un |
Convert unsigned to a native unsigned int (on the stack as native int) and throw an exception on overflow. | Base instruction |
0xB4 |
conv.ovf.u1 |
Convert to an unsigned int8 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0x86 |
conv.ovf.u1.un |
Convert unsigned to an unsigned int8 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0xB6 |
conv.ovf.u2 |
Convert to an unsigned int16 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0x87 |
conv.ovf.u2.un |
Convert unsigned to an unsigned int16 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0xB8 |
conv.ovf.u4 |
Convert to an unsigned int32 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0x88 |
conv.ovf.u4.un |
Convert unsigned to an unsigned int32 (on the stack as int32) and throw an exception on overflow. | Base instruction |
0xBA |
conv.ovf.u8 |
Convert to an unsigned int64 (on the stack as int64) and throw an exception on overflow. | Base instruction |
0x89 |
conv.ovf.u8.un |
Convert unsigned to an unsigned int64 (on the stack as int64) and throw an exception on overflow. | Base instruction |
0x76 |
conv.r.un |
Convert unsigned integer to floating-point, pushing F on stack. | Base instruction |
0x6B |
conv.r4 |
Convert to float32, pushing F on stack. | Base instruction |
0x6C |
conv.r8 |
Convert to float64, pushing F on stack. | Base instruction |
0xE0 |
conv.u |
Convert to native unsigned int, pushing native int on stack. | Base instruction |
0xD2 |
conv.u1 |
Convert to unsigned int8, pushing int32 on stack. | Base instruction |
0xD1 |
conv.u2 |
Convert to unsigned int16, pushing int32 on stack. | Base instruction |
0x6D |
conv.u4 |
Convert to unsigned int32, pushing int32 on stack. | Base instruction |
0x6E |
conv.u8 |
Convert to unsigned int64, pushing int64 on stack. | Base instruction |
0xFE 0x17 |
cpblk |
Copy data from memory to memory. | Base instruction |
0x70 |
cpobj <typeTok> |
Copy a value type from src to dest. | Object model instruction |
0x5B |
div |
Divide two values to return a quotient or floating-point result. | Base instruction |
0x5C |
div.un |
Divide two values, unsigned, returning a quotient. | Base instruction |
0x25 |
dup |
Duplicate the value on the top of the stack. | Base instruction |
0xDC |
endfault |
End fault clause of an exception block. | Base instruction |
0xFE 0x11 |
endfilter |
End an exception handling filter clause. | Base instruction |
0xDC |
endfinally |
End finally clause of an exception block. | Base instruction |
0xFE 0x18 |
initblk |
Set all bytes in a block of memory to a given byte value. | Base instruction |
0xFE 0x15 |
initobj <typeTok> |
Initialize the value at address dest. | Object model instruction |
0x75 |
isinst <class> |
Test if obj is an instance of class, returning null or an instance of that class or interface. | Object model instruction |
0x27 |
jmp <method> |
Exit current method and jump to the specified method. | Base instruction |
0xFE 0x09 |
ldarg <uint16 (num)> |
Load argument numbered num onto the stack. | Base instruction |
0x02 |
ldarg.0 |
Load argument 0 onto the stack. | Base instruction |
0x03 |
ldarg.1 |
Load argument 1 onto the stack. | Base instruction |
0x04 |
ldarg.2 |
Load argument 2 onto the stack. | Base instruction |
0x05 |
ldarg.3 |
Load argument 3 onto the stack. | Base instruction |
0x0E |
ldarg.s <uint8 (num)> |
Load argument numbered num onto the stack, short form. | Base instruction |
0xFE 0x0A |
ldarga <uint16 (argNum)> |
Fetch the address of argument argNum. | Base instruction |
0x0F |
ldarga.s <uint8 (argNum)> |
Fetch the address of argument argNum, short form. | Base instruction |
0x20 |
ldc.i4 <int32 (num)> |
Push num of type int32 onto the stack as int32. | Base instruction |
0x16 |
ldc.i4.0 |
Push 0 onto the stack as int32. | Base instruction |
0x17 |
ldc.i4.1 |
Push 1 onto the stack as int32. | Base instruction |
0x18 |
ldc.i4.2 |
Push 2 onto the stack as int32. | Base instruction |
0x19 |
ldc.i4.3 |
Push 3 onto the stack as int32. | Base instruction |
0x1A |
ldc.i4.4 |
Push 4 onto the stack as int32. | Base instruction |
0x1B |
ldc.i4.5 |
Push 5 onto the stack as int32. | Base instruction |
0x1C |
ldc.i4.6 |
Push 6 onto the stack as int32. | Base instruction |
0x1D |
ldc.i4.7 |
Push 7 onto the stack as int32. | Base instruction |
0x1E |
ldc.i4.8 |
Push 8 onto the stack as int32. | Base instruction |
0x15 |
ldc.i4.m1 |
Push -1 onto the stack as int32. | Base instruction |
0x15 |
ldc.i4.M1 |
Push -1 of type int32 onto the stack as int32 (alias for ldc.i4.m1). | Base instruction |
0x1F |
ldc.i4.s <int8 (num)> |
Push num onto the stack as int32, short form. | Base instruction |
0x21 |
ldc.i8 <int64 (num)> |
Push num of type int64 onto the stack as int64. | Base instruction |
0x22 |
ldc.r4 <float32 (num)> |
Push num of type float32 onto the stack as F. | Base instruction |
0x23 |
ldc.r8 <float64 (num)> |
Push num of type float64 onto the stack as F. | Base instruction |
0xA3 |
ldelem <typeTok> |
Load the element at index onto the top of the stack. | Object model instruction |
0x97 |
ldelem.i |
Load the element with type native int at index onto the top of the stack as a native int. | Object model instruction |
0x90 |
ldelem.i1 |
Load the element with type int8 at index onto the top of the stack as an int32. | Object model instruction |
0x92 |
ldelem.i2 |
Load the element with type int16 at index onto the top of the stack as an int32. | Object model instruction |
0x94 |
ldelem.i4 |
Load the element with type int32 at index onto the top of the stack as an int32. | Object model instruction |
0x96 |
ldelem.i8 |
Load the element with type int64 at index onto the top of the stack as an int64. | Object model instruction |
0x98 |
ldelem.r4 |
Load the element with type float32 at index onto the top of the stack as an F | Object model instruction |
0x99 |
ldelem.r8 |
Load the element with type float64 at index onto the top of the stack as an F. | Object model instruction |
0x9A |
ldelem.ref |
Load the element at index onto the top of the stack as an O. The type of the O is the same as the element type of the array pushed on the CIL stack. | Object model instruction |
0x91 |
ldelem.u1 |
Load the element with type unsigned int8 at index onto the top of the stack as an int32. | Object model instruction |
0x93 |
ldelem.u2 |
Load the element with type unsigned int16 at index onto the top of the stack as an int32. | Object model instruction |
0x95 |
ldelem.u4 |
Load the element with type unsigned int32 at index onto the top of the stack as an int32. | Object model instruction |
0x96 |
ldelem.u8 |
Load the element with type unsigned int64 at index onto the top of the stack as an int64 (alias for ldelem.i8). | Object model instruction |
0x8F |
ldelema <class> |
Load the address of element at index onto the top of the stack. | Object model instruction |
0x7B |
ldfld <field> |
Push the value of field of object (or value type) obj, onto the stack. | Object model instruction |
0x7C |
ldflda <field> |
Push the address of field of object obj on the stack. | Object model instruction |
0xFE 0x06 |
ldftn <method> |
Push a pointer to a method referenced by method, on the stack. | Base instruction |
0x4D |
ldind.i |
Indirect load value of type native int as native int on the stack | Base instruction |
0x46 |
ldind.i1 |
Indirect load value of type int8 as int32 on the stack. | Base instruction |
0x48 |
ldind.i2 |
Indirect load value of type int16 as int32 on the stack. | Base instruction |
0x4A |
ldind.i4 |
Indirect load value of type int32 as int32 on the stack. | Base instruction |
0x4C |
ldind.i8 |
Indirect load value of type int64 as int64 on the stack. | Base instruction |
0x4E |
ldind.r4 |
Indirect load value of type float32 as F on the stack. | Base instruction |
0x4F |
ldind.r8 |
Indirect load value of type float64 as F on the stack. | Base instruction |
0x50 |
ldind.ref |
Indirect load value of type object ref as O on the stack. | Base instruction |
0x47 |
ldind.u1 |
Indirect load value of type unsigned int8 as int32 on the stack | Base instruction |
0x49 |
ldind.u2 |
Indirect load value of type unsigned int16 as int32 on the stack | Base instruction |
0x4B |
ldind.u4 |
Indirect load value of type unsigned int32 as int32 on the stack | Base instruction |
0x4C |
ldind.u8 |
Indirect load value of type unsigned int64 as int64 on the stack (alias for ldind.i8). | Base instruction |
0x8E |
ldlen |
Push the length (of type native unsigned int) of array on the stack. | Object model instruction |
0xFE 0x0C |
ldloc <uint16 (indx)> |
Load local variable of index indx onto stack. | Base instruction |
0x06 |
ldloc.0 |
Load local variable 0 onto stack. | Base instruction |
0x07 |
ldloc.1 |
Load local variable 1 onto stack. | Base instruction |
0x08 |
ldloc.2 |
Load local variable 2 onto stack. | Base instruction |
0x09 |
ldloc.3 |
Load local variable 3 onto stack. | Base instruction |
0x11 |
ldloc.s <uint8 (indx)> |
Load local variable of index indx onto stack, short form. | Base instruction |
0xFE 0x0D |
ldloca <uint16 (indx)> |
Load address of local variable with index indx. | Base instruction |
0x12 |
ldloca.s <uint8 (indx)> |
Load address of local variable with index indx, short form. | Base instruction |
0x14 |
ldnull |
Push a null reference on the stack. | Base instruction |
0x71 |
ldobj <typeTok> |
Copy the value stored at address src to the stack. | Object model instruction |
0x7E |
ldsfld <field> |
Push the value of field on the stack. | Object model instruction |
0x7F |
ldsflda <field> |
Push the address of the static field, field, on the stack. | Object model instruction |
0x72 |
ldstr <string> |
Push a string object for the literal string. | Object model instruction |
0xD0 |
ldtoken <token> |
Convert metadata token to its runtime representation. | Object model instruction |
0xFE 0x07 |
ldvirtftn <method> |
Push address of virtual method on the stack. | Object model instruction |
0xDD |
leave <int32 (target)> |
Exit a protected region of code. | Base instruction |
0xDE |
leave.s <int8 (target)> |
Exit a protected region of code, short form. | Base instruction |
0xFE 0x0F |
localloc |
Allocate space from the local memory pool. | Base instruction |
0xC6 |
mkrefany <class> |
Push a typed reference to ptr of type class onto the stack. | Object model instruction |
0x5A |
mul |
Multiply values. | Base instruction |
0xD8 |
mul.ovf |
Multiply signed integer values. Signed result shall fit in same size | Base instruction |
0xD9 |
mul.ovf.un |
Multiply unsigned integer values. Unsigned result shall fit in same size | Base instruction |
0x65 |
neg |
Negate value. | Base instruction |
0x8D |
newarr <etype> |
Create a new array with elements of type etype. | Object model instruction |
0x73 |
newobj <ctor> |
Allocate an uninitialized object or value type and call ctor. | Object model instruction |
0xFE 0x19 |
no. { typecheck, rangecheck, nullcheck } |
The specified fault check(s) normally performed as part of the execution of the subsequent instruction can/shall be skipped. | Prefix to instruction |
0x00 |
nop |
Do nothing (No operation). | Base instruction |
0x66 |
not |
Bitwise complement (logical not). | Base instruction |
0x60 |
or |
Bitwise OR of two integer values, returns an integer. | Base instruction |
0x26 |
pop |
Pop value from the stack. | Base instruction |
0xFE 0x1E |
readonly. |
Specify that the subsequent array address operation performs no type check at runtime, and that it returns a controlled-mutability managed pointer | Prefix to instruction |
0xFE 0x1D |
refanytype |
Push the type token stored in a typed reference. | Object model instruction |
0xC2 |
refanyval <type> |
Push the address stored in a typed reference. | Object model instruction |
0x5D |
rem |
Remainder when dividing one value by another. | Base instruction |
0x5E |
rem.un |
Remainder when dividing one unsigned value by another. | Base instruction |
0x2A |
ret |
Return from method, possibly with a value. | Base instruction |
0xFE 0x1A |
rethrow |
Rethrow the current exception. | Object model instruction |
0x62 |
shl |
Shift an integer left (shifting in zeros), return an integer. | Base instruction |
0x63 |
shr |
Shift an integer right (shift in sign), return an integer. | Base instruction |
0x64 |
shr.un |
Shift an integer right (shift in zero), return an integer. | Base instruction |
0xFE 0x1C |
sizeof <typeTok> |
Push the size, in bytes, of a type as an unsigned int32. | Object model instruction |
0xFE 0x0B |
starg <uint16 (num)> |
Store value to the argument numbered num. | Base instruction |
0x10 |
starg.s <uint8 (num)> |
Store value to the argument numbered num, short form. | Base instruction |
0xA4 |
stelem <typeTok> |
Replace array element at index with the value on the stack | Object model instruction |
0x9B |
stelem.i |
Replace array element at index with the i value on the stack. | Object model instruction |
0x9C |
stelem.i1 |
Replace array element at index with the int8 value on the stack. | Object model instruction |
0x9D |
stelem.i2 |
Replace array element at index with the int16 value on the stack. | Object model instruction |
0x9E |
stelem.i4 |
Replace array element at index with the int32 value on the stack. | Object model instruction |
0x9F |
stelem.i8 |
Replace array element at index with the int64 value on the stack. | Object model instruction |
0xA0 |
stelem.r4 |
Replace array element at index with the float32 value on the stack. | Object model instruction |
0xA1 |
stelem.r8 |
Replace array element at index with the float64 value on the stack. | Object model instruction |
0xA2 |
stelem.ref |
Replace array element at index with the ref value on the stack. | Object model instruction |
0x7D |
stfld <field> |
Replace the value of field of the object obj with value. | Object model instruction |
0xDF |
stind.i |
Store value of type native int into memory at address | Base instruction |
0x52 |
stind.i1 |
Store value of type int8 into memory at address | Base instruction |
0x53 |
stind.i2 |
Store value of type int16 into memory at address | Base instruction |
0x54 |
stind.i4 |
Store value of type int32 into memory at address | Base instruction |
0x55 |
stind.i8 |
Store value of type int64 into memory at address | Base instruction |
0x56 |
stind.r4 |
Store value of type float32 into memory at address | Base instruction |
0x57 |
stind.r8 |
Store value of type float64 into memory at address | Base instruction |
0x51 |
stind.ref |
Store value of type object ref (type O) into memory at address | Base instruction |
0xFE 0x0E |
stloc <uint16 (indx)> |
Pop a value from stack into local variable indx. | Base instruction |
0x0A |
stloc.0 |
Pop a value from stack into local variable 0. | Base instruction |
0x0B |
stloc.1 |
Pop a value from stack into local variable 1. | Base instruction |
0x0C |
stloc.2 |
Pop a value from stack into local variable 2. | Base instruction |
0x0D |
stloc.3 |
Pop a value from stack into local variable 3. | Base instruction |
0x13 |
stloc.s <uint8 (indx)> |
Pop a value from stack into local variable indx, short form. | Base instruction |
0x81 |
stobj <typeTok> |
Store a value of type typeTok at an address. | Object model instruction |
0x80 |
stsfld <field> |
Replace the value of field with val. | Object model instruction |
0x59 |
sub |
Subtract value2 from value1, returning a new value. | Base instruction |
0xDA |
sub.ovf |
Subtract native int from a native int. Signed result shall fit in same size | Base instruction |
0xDB |
sub.ovf.un |
Subtract native unsigned int from a native unsigned int. Unsigned result shall fit in same size. | Base instruction |
0x45 |
switch <uint32, int32,int32 (t1..tN)> |
Jump to one of n values. | Base instruction |
0xFE 0x14 |
tail. |
Subsequent call terminates current method | Prefix to instruction |
0x7A |
throw |
Throw an exception. | Object model instruction |
0xFE 0x12 |
unaligned. (alignment) |
Subsequent pointer instruction might be unaligned. | Prefix to instruction |
0x79 |
unbox <valuetype> |
Extract a value-type from obj, its boxed representation. | Object model instruction |
0xA5 |
unbox.any <typeTok> |
Extract a value-type from obj, its boxed representation | Object model instruction |
0xFE 0x13 |
volatile. |
Subsequent pointer reference is volatile. | Prefix to instruction |
0x61 |
xor |
Bitwise XOR of integer values, returns an integer. | Base instruction |
参考来源:http://en.wikipedia.org/wiki/List_of_CIL_instructions
参考来源:https://www.cnblogs.com/justinli/p/4041538.html
来源:https://www.cnblogs.com/open-coder/p/12331902.html