本文主要是介绍MSIL Instruction Set,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
MSIL Instruction Set
Base Instructions
| Instruction | Description | Stack Transition |
1 | add | add two values, returning a new value | …, value1, value2à…, result |
2 | add.ovf.<signed> | add integer value with overflow check | …, value1, value2à…, result |
3 | and | bitwise AND | …, value1, value2 à…, result |
4 | arglist | get argument list | … à …, argListHandle |
5 | beq.<length> | branch on equal | …, value1, value2 à … |
6 | bge.<length> | branch on greater than or equal to | …, value1, value2 à … |
7 | bge.un.<length> | branch on greater/equal, unsigned or unordered | …, value1, value2 à … |
8 | bgt.<length> | branch on greater than | …, value1, value2 à … |
9 | bgt.un<length> | branch on greater than, unsigned or unordered | …, value1, value2 à … |
10 | ble.<length> | branch on less than or equal to | …, value1, value2 à … |
11 | ble..un<length> | branch on less/equal, unsigned or unordered | …, value1, value2 à … |
12 | blt.<length> | branch on less than | …, value1, value2 à … |
13 | blt.un.<length> | branch on less than, unsigned or unordered | …, value1, value2 à … |
14 | bne.un<length> | branch on not equal or unorded | …, value1, value2 à … |
15 | br.<length> | unconditional branch | …, à … |
16 | break | breakpoint instruction | …, à … |
17 | brfalse.<length> | branch on false, null, or zero | …, value à … |
18 | brtrue.<length> | branch on non-false or non-null | …, value à … |
19 | call | call a method | …, arg1, arg2 … argn à …, retVal (not always returned) |
20 | calli | indirect method call | …, arg1, arg2 … argn, ftn à …, retVal (not always returned) |
21 | ceq | compare equal | …, value1, value2à…, result |
22 | cgt | compare greater than | …, value1, value2à…, result |
23 | cgt.un | compare greater than, unsigned or unordered | …, value1, value2à…, result |
24 | ckfinite | check for a finite real number | …, value à …, value |
25 | clt | compare less than | …, value1, value2à…, result |
26 | clt.un | compare less than, unsigned or unordered | …, value1, value2à…, result |
27 | conv.<to type> | data conversion | …, value à …, result |
28 | conv.ovf<to type> | data conversion with overflow detection | …, value à …, result |
29 | conv.ovf.<to type>.un | unsigned data conversion with overflow detection | …, value à …, result |
30 | cpblk | copy data from memory to memory | …, destaddr, srcaddr, size à … |
31 | div | divide values | …, value1, value2à…, result |
32 | div.un | divide integer values, unsigned | …, value1, value2à…, result |
33 | dup | duplicate the top value of the stack | …, value à …, value, value |
34 | endfilter | end filter clause of SEH | …, value à … |
35 | endfinally | end the finally or fault clause of exception block | … à … |
36 | initblk | initialize a block of memory to a value | …, addr, value, size à … |
37 | jmp | jump to method | … à … |
38 | ldarg.<length> | load argument onto the stack | … à …, value |
39 | ldarga.<length> | load an argument address | …, à …, address of argument number argNum |
40 | ldc.<type> | load numeric constant | … à …, num |
41 | ldftn | load method pointer | … à …, ftn |
42 | ldind.<type> | load value indirect onto the stack | …, addr à …, value |
43 | ldloc | load local variable onto the stack | … à …, value |
44 | ldloca.<length> | load local variable address | … à …, address |
45 | ldnull | load a null pointer | … à …, null value |
46 | leave.<length> | exit a protected region of code | …, à |
47 | localloc | allocate space in the local dynamic memory pool | size à address |
48 | mul | multiply values | …, value1, value2 à …, result |
49 | mul.ovf<type> | multiply integer values with overflow check | …, value1, value2 à …, result |
50 | neg | negate | …, value à …, result |
51 | nop | no operation | …, à …, |
52 | not | bitwise complement | …, value à …, result |
53 | or | bitwise OR | …, value1, value2 à …, result |
54 | pop | remove the top element of the stack | …, value à … |
55 | rem | compute the remainder | …, value1, value2 à …, result |
56 | rem.un | compute integer remainder, unsigned | …, value1, value2 à …, result |
57 | ret | return from method | retVal on callee evaluation stack (not always present) à …, retVal on caller evaluation stack (not always present) |
58 | shl | shift integer left | …, value, shiftAmount à …, result |
59 | shr | shift integer right | …, value, shiftAmount à …, result |
60 | shr.un | shift integer right, unsigned | …, value, shiftAmount à …, result |
61 | starg.<length> | store a value in an argument slot | …, value à …, |
62 | stind.<type> | store value indirect from stack | …, addr, val à … |
63 | stloc | pop value from stack to local variable | …, value à … |
64 | sub | substract numeric values | …, value1, value2 à …, result |
65 | sub.ovf.<type> | substract integer values, checking for overflow | …, value1, value2 à …, result |
66 | switch | table switch on value | …, value à …, |
67 | xor | bitwise XOR | ..., value1, value2 à ..., result |
Object Model Instructions
| Instruction | Description | Stack Transition |
1 | box | convert value type to object reference | …, valueType à …, obj |
2 | callvirt | call a method associated, a runtime, with an object | …, obj, arg1, … argN à …, returnVal (not always returned) |
3 | cast class | cast an object to a class | …, obj à …, obj2 |
4 | cpobj | copy a value type | …, destValObj, srcValObj à …, |
5 | initobj | Initialize a value type | …,addrOfValObj à …, |
6 | isinst | test if an object is is an instance of a class or interface | …, obj à …, result |
7 | ldelem.<type> | load an element fo an array | …, array, index à …, value |
8 | ldelema | load address of an element of an array | …, array, index à …, address |
9 | ldfld | load field of an object | …, obj à …, value |
10 | ldflda | load field address | …, obj à …, address |
11 | ldlen | load the length of an array | …, array à …, length |
12 | ldobj | copy value type to the stack | …, addrOfValObj à …, valObj |
13 | ldsfld | load static field of a class | …, à …, value |
14 | ldsflda | load static field address | …, à …, address |
15 | ldstr | load a literal string | …, à …, string |
16 | ldtoken | load the runtime representation of metadata token | … à …, RuntimeHandle |
17 | ldvirtfn | load a virtual method pointer | … object à …, ftn |
18 | mkrefany | push a typed reference on the stack | …, ptr à …, typedRef |
19 | newarr | Create a zero-base, on-dimensional array | …, numElems à …, array |
20 | newobj | create a new object | …, arg1, … argN à …, obj |
21 | refanytype | load the type out of a typed reference | …, TypedRef à …, type |
22 | refanyval | load the address out of a typed reference | …, TypedRef à …, address |
23 | rethrow | rethrow the current exception | …, à …, |
24 | sizeof | load the size in bytes of a value type | …, à …, size (4 bytes, unsigned) |
25 | stelem.<type> | store an element of an array | …, array, index, value à …, |
26 | stfld | store into a field of an object | …, obj, value à …, |
27 | stobj | store a value type from the stack into memory | …, addr, valObj à …, |
28 | stsfld | store a static field of class | …, val à …, |
29 | throw | throw an exception | …, object à …, |
30 | unbox | convert boxed value type to its raw form |
|
这篇关于MSIL Instruction Set的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!