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