IL 指令记录

本文仅仅只是为了方便查找IL 指令记录

名称 说明
Add 将两个值相加并将结果推送到计算堆栈上
Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上
Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算堆栈上
And 计算两个值的按位“与”并将结果推送到计算堆栈上
Arglist 返回指向当前方法的参数列表的非托管指针
Beq 如果两个值相等,则将控制转移到目标指令
Beq.S 如果两个值相等,则将控制转移到目标指令(短格式)
Bge 如果第一个值大于或等于第二个值,则将控制转移到目标指令
Bge.S 如果第一个值大于或等于第二个值,则将控制转移到目标指令(短格式)
Bge.Un 当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令
Bge.Un.S 当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令(短格式)
Bgt 如果第一个值大于第二个值,则将控制转移到目标指令
Bgt.S 如果第一个值大于第二个值,则将控制转移到目标指令(短格式)
Bgt.Un 当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令
Bgt.Un.S 当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令(短格式)
Ble 如果第一个值小于或等于第二个值,则将控制转移到目标指令
Ble.S 如果第一个值小于或等于第二个值,则将控制转移到目标指令(短格式)
Ble.Un 当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于或等于第二个值,则将控制转移到目标指令
Ble.Un.S 当比较无符号整数值或不可排序的浮点值时,如果第一个值小于或等于第二个值,则将控制权转移到目标指令(短格式)
Blt 如果第一个值小于第二个值,则将控制转移到目标指令
Blt.S 如果第一个值小于第二个值,则将控制转移到目标指令(短格式)
Blt.Un 当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于第二个值,则将控制转移到目标指令
Blt.Un.S 当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于第二个值,则将控制转移到目标指令(短格式)
Bne.Un 当两个无符号整数值或不可排序的浮点型值不相等时,将控制转移到目标指令
Bne.Un.S 当两个无符号整数值或不可排序的浮点型值不相等时,将控制转移到目标指令(短格式)
Box 将值类转换为对象引用(O 类型)
Br 无条件地将控制转移到目标指令
Br.S 无条件地将控制转移到目标指令(短格式)
Break 向公共语言结构 (CLI) 发出信号以通知调试器已撞上了一个断点
Brfalse 如果 value 为 false、空引用(Visual Basic 中的 Nothing)或零,则将控制转移到目标指令
Brfalse.S 如果 value 为 false、空引用或零,则将控制转移到目标指令(短格式)
brinst 如果 value 为 true、非空或非零,则将控制转移到目标指令(Brtrue)
brinst.s 如果 value 为 true、非空或非零,则将控制转移到目标指令(短格式)(Brtrue.S )
brnull 如果 value 为 false、空引用或零,则将控制转移到目标指令(Brfalse)
brnull.s 如果 value 为 false、空引用或零,则将控制转移到目标指令(短格式)(Brfalse.s)
Brtrue 如果 value 为 true、非空或非零,则将控制转移到目标指令
Brtrue.S 如果 value 为 true、非空或非零,则将控制转移到目标指令(短格式)
brzero 如果value为0,则将控制转移到目标指令
brzero.s 如果value为0,则将控制转移到目标指令(短格式)
Call 调用由传递的方法说明符指示的方法
Calli 通过调用约定描述的参数调用在计算堆栈上指示的方法(作为指向入口点的指针)
Callvirt 调用对象关联的方法,并且将返回值推送到计算堆栈上
Castclass 尝试将引用传递的对象转换为指定的类
Ceq 比较两个值。如果这两个值相等,则将整数值 1 (int32) 推送到计算堆栈上;否则,将 0 (int32) 推送到计算堆栈上
Cgt 比较两个值。如果第一个值大于第二个值,则将整数值 1 (int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上
Cgt.Un 比较两个无符号的或不可排序的值。如果第一个值大于第二个值,则将整数值 1 (int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上
Ckfinite 如果值不是有限数,则引发 ArithmeticException
Clt 比较两个值。如果第一个值小于第二个值,则将整数值 1 (int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上
Clt.Un 比较无符号的或不可排序的值 value1 和 value2。如果 value1 小于 value2,则将整数值 1 (int32 ) 推送到计算堆栈上;反之,将 0 ( int32 ) 推送到计算堆栈上
Constrained 约束要对其进行虚方法调用的类型
Conv.I 将位于计算堆栈顶部的值转换为 native int
Conv.I1 将位于计算堆栈顶部的值转换为 int8,然后将其扩展(填充)为 int32
Conv.I2 将位于计算堆栈顶部的值转换为 int16,然后将其扩展(填充)为 int32
Conv.I4 将位于计算堆栈顶部的值转换为 int32
Conv.I8 将位于计算堆栈顶部的值转换为 int64
Conv.Ovf.I 将位于计算堆栈顶部的有符号值转换为有符号 native int,并在溢出时引发 OverflowException
Conv.Ovf.I.Un 将位于计算堆栈顶部的无符号值转换为有符号 native int,并在溢出时引发 OverflowException
Conv.Ovf.I1 将位于计算堆栈顶部的有符号值转换为有符号 int8 并将其扩展为 int32,并在溢出时引发 OverflowException
Conv.Ovf.I1.Un 将位于计算堆栈顶部的无符号值转换为有符号 int8 并将其扩展为 int32,并在溢出时引发 OverflowException
Conv.Ovf.I2 将位于计算堆栈顶部的有符号值转换为有符号 int16 并将其扩展为 int32,并在溢出时引发 OverflowException
Conv.Ovf.I2.Un 将位于计算堆栈顶部的无符号值转换为有符号 int16 并将其扩展为 int32,并在溢出时引发 OverflowException
Conv.Ovf.I4 将位于计算堆栈顶部的有符号值转换为有符号 int32,并在溢出时引发 OverflowException
Conv.Ovf.I4.Un 将位于计算堆栈顶部的无符号值转换为有符号 int32,并在溢出时引发 OverflowException
Conv.Ovf.I8 将位于计算堆栈顶部的有符号值转换为有符号 int64,并在溢出时引发 OverflowException
Conv.Ovf.I8.Un 将位于计算堆栈顶部的无符号值转换为有符号 int64,并在溢出时引发 OverflowException
Conv.Ovf.U 将位于计算堆栈顶部的有符号值转换为 unsigned native int,并在溢出时引发 OverflowException
Conv.Ovf.U.Un 将位于计算堆栈顶部的无符号值转换为 unsigned native int,并在溢出时引发 OverflowException
Conv.Ovf.U1 将位于计算堆栈顶部的有符号值转换为 unsigned int8 并将其扩展为 int32,并在溢出时引发 OverflowException
Conv.Ovf.U1.Un 将位于计算堆栈顶部的无符号值转换为 unsigned int8 并将其扩展为 int32,并在溢出时引发 OverflowException
Conv.Ovf.U2 将位于计算堆栈顶部的有符号值转换为 unsigned int16 并将其扩展为 int32,并在溢出时引发 OverflowException
Conv.Ovf.U2.Un 将位于计算堆栈顶部的无符号值转换为 unsigned int16 并将其扩展为 int32,并在溢出时引发 OverflowException
Conv.Ovf.U4 将位于计算堆栈顶部的有符号值转换为 unsigned int32,并在溢出时引发 OverflowException
Conv.Ovf.U4.Un 将位于计算堆栈顶部的无符号值转换为 unsigned int32,并在溢出时引发 OverflowException
Conv.Ovf.U8 将位于计算堆栈顶部的有符号值转换为 unsigned int64,并在溢出时引发 OverflowException
Conv.Ovf.U8.Un 将位于计算堆栈顶部的无符号值转换为 unsigned int64,并在溢出时引发 OverflowException
Conv.R.Un 将位于计算堆栈顶部的无符号整数值转换为 float32
Conv.R4 将位于计算堆栈顶部的值转换为 float32
Conv.R8 将位于计算堆栈顶部的值转换为 float64
Conv.U 将位于计算堆栈顶部的值转换为 unsigned native int, 然后将其扩展为 uint32
Conv.U1 将位于计算堆栈顶部的值转换为 unsigned int8,然后将其扩展为 uint32
Conv.U2 将位于计算堆栈顶部的值转换为 unsigned int16,然后将其扩展为 uint32
Conv.U4 将位于计算堆栈顶部的值转换为 unsigned int32,然后将其扩展为 uint32
Conv.U8 将位于计算堆栈顶部的值转换为 unsigned int64,然后将其扩展为 uint64
Cpblk 从源地址复制指定数目的字节到目标地址
Cpobj 将位于对象(&、* 或 native int 类型)地址的值类型复制到目标对象(&、* 或 native int 类型)的地址
div 将两个值相除并将结果作为浮点(F 类型)或商(int32 类型)推送到计算堆栈上
div.un 两个无符号整数值相除并将结果 ( int32 ) 推送到计算堆栈上
Dup 复制计算堆栈上当前最顶端的值,然后将副本推送到计算堆栈上
Endfilter 将控制从异常的 filter 子句转移回公共语言结构 (CLI) 异常处理程序
endfinally 将控制从异常块的 fault 或 finally 子句转移回公共语言结构 (CLI) 异常处理程序
Initblk 将位于特定地址的内存的指定块初始化为给定大小和初始值
Initobj 将位于指定地址的值类型的每个字段初始化为空引用或适当的基元类型的 0
Isinst 测试对象引用(O 类型)是否为特定类的实例
Jmp 退出当前方法并跳至指定方法
Ldarg 将参数(由指定索引值引用)加载到堆栈上
Ldarg.0 将索引为 0 的参数加载到计算堆栈上
Ldarg.1 将索引为 1 的参数加载到计算堆栈上
Ldarg.2 将索引为 2 的参数加载到计算堆栈上
Ldarg.3 将索引为 3 的参数加载到计算堆栈上
Ldarg.S 将参数(由指定的短格式索引引用)加载到计算堆栈上(短格式)
Ldarga 将参数地址加载到计算堆栈上
Ldarga.S 将参数地址加载到计算堆栈上(短格式)
Ldc.I4 将所提供的 int32 类型的值作为 int32 推送到计算堆栈上
Ldc.I4.0 将整数值 0 作为 int32 推送到计算堆栈上
Ldc.I4.1 将整数值 1 作为 int32 推送到计算堆栈上
Ldc.I4.2 将整数值 2 作为 int32 推送到计算堆栈上
Ldc.I4.3 将整数值 3 作为 int32 推送到计算堆栈上
Ldc.I4.4 将整数值 4 作为 int32 推送到计算堆栈上
Ldc.I4.5 将整数值 5 作为 int32 推送到计算堆栈上
Ldc.I4.6 将整数值 6 作为 int32 推送到计算堆栈上
Ldc.I4.7 将整数值 7 作为 int32 推送到计算堆栈上
Ldc.I4.8 将整数值 8 作为 int32 推送到计算堆栈上
Ldc.I4.m1 将整数值 -1 作为 int32 推送到计算堆栈上
ldc.i4.s 将所提供的 int32 类型的值作为 int32 推送到计算堆栈上(短格式)
Ldc.I8 所提供的 int64 类型的值作为 int64 推送到计算堆栈上
Ldc.R4 将所提供的 float32 类型的值作为 F (float) 类型推送到计算堆栈上
Ldc.R8 将所提供的 float64 类型的值作为 F (float) 类型推送到计算堆栈上
Ldelem 按照指令中指定的类型,将指定数组索引中的元素加载到计算堆栈的顶部
Ldelem.I 将位于指定数组索引处的 native int 类型的元素作为 native int 加载到计算堆栈的顶部
Ldelem.I1 将位于指定数组索引处的 int8 类型的元素作为 int32 加载到计算堆栈的顶部
Ldelem.I2 将位于指定数组索引处的 int16 类型的元素作为 int32 加载到计算堆栈的顶部
Ldelem.I4 将位于指定数组索引处的 int32 类型的元素作为 int32 加载到计算堆栈的顶部
Ldelem.I8 将位于指定数组索引处的 int64 类型的元素作为 int64 加载到计算堆栈的顶部
Ldelem.R4 将位于指定数组索引处的 float32 类型的元素作为 F 类型(浮点型)加载到计算堆栈的顶部
Ldelem.R8 将位于指定数组索引处的 float64 类型的元素作为 F 类型(浮点型)加载到计算堆栈的顶部
Ldelem.Ref 将位于指定数组索引处的包含对象引用的元素作为 O 类型(对象引用)加载到计算堆栈的顶部
Ldelem.U1 将位于指定数组索引处的 unsigned int8 类型的元素作为 int32 加载到计算堆栈的顶部
Ldelem.U2 将位于指定数组索引处的 unsigned int16 类型的元素作为 int32 加载到计算堆栈的顶部
Ldelem.U4 将位于指定数组索引处的 unsigned int32 类型的元素作为 int32 加载到计算堆栈的顶部
Ldelema 将位于指定数组索引的数组元素的地址作为 & 类型(托管指针)加载到计算堆栈的顶部
修正  
Ldfld 将对象的file成员放置在堆栈中
ldflda 将对象的file成员的地址放置在堆栈中
ldftn 将有method引用的方法指针放置在堆栈中
ldind.i 间接加载native int 的数据并且以 native int类型放置到堆栈中
ldind.i1 间接加载int8的数据并且以 int32类型放置到堆栈中
ldind.i2 间接加载int16的数据并且以 int32类型放置到堆栈中
ldind.i3 间接加载int32的数据并且以 int32类型放置到堆栈中
ldind.i4 间接加载int64的数据并且以 int64类型放置到堆栈中
ldind.r4 间接加载float32的数据并且以 F 类型放置到堆栈中
ldind.r8 间接加载float64的数据并且以 F 类型放置到堆栈中
ldind.ref 间接加载 O 的对象引用并且以 O 类型放置到堆栈中
ldind.u1 间接加载uint8的数据并且以 int32类型放置到堆栈中
ldind.u2 间接加载uint16的数据并且以 int32类型放置到堆栈中
ldind.u4 间接加载uint32的数据并且以 int32类型放置到堆栈中
ldind.u8 间接加载uint64的数据并且以 int64类型放置到堆栈中
ldlen 将数组的长度(uint)放置在堆栈中
ldloc 加载指定下标的本地变量到堆栈中
ldloc.0 加载本地变量 0 到堆栈中
ldloc.1 加载本地变量 1 到堆栈中
ldloc.2 加载本地变量 2 到堆栈中
ldloc.3 加载本地变量 3 到堆栈中
ldloc.s 加载指定下标的本地变量到堆栈中 (短格式)
ldloca 加载指定下标的本地变量地址到堆栈中
ldloca.s 加载指定下标的本地变量地址到堆栈中(短格式)
ldnull 加载空引用到堆栈中
ldobj 复制地址上的值到堆栈中
ldsfld 复制静态file的值到堆栈中
ldsflda 复制静态file的地址到堆栈中
ldstr 将string放置在堆栈中
ldtoken 将metadata token转换成运行时的表示
ldvirtftn 将虚函数的地址推入堆栈
leave 退出代码的受保护区域
leave.s 退出代码的受保护区域(短格式)
localloc 从本地内存池中申请空间
mkrefany Push a typed reference to ptr of type class onto the stack
mul 乘积
mul.ovf 乘积, 并在溢出时引发 OverflowException
mul.ovf.un 无符号数据乘积, 并在溢出时引发 OverflowException
neg 取反值
newarr 创建指定元素类型的数组
newobj 创建指定类型的对象
nop 无处理
not 逻辑not
or 逻辑or
pop 从堆栈中弹出值
readonly 声明一个连续的数组在运行时无须检查类型,并返回可控的托管指针
refanytype Push the type token stored in a typed reference
refanyval Push the address stored in a typed reference
rem 余数
rem.un 无符号整数除以两个数的余数
ret 返回
rethrow 返回当前异常
shl 无符号左移,(«)
shr 右移,(»)
shr.un 无符号右移,(»)
sizeof 长度
starg 将值存到下标为num的参数列表中
starg.s 将值存到下标为num的参数列表中(短格式)
stelem 将栈顶的值替换数组index的值
stelem.i 将栈顶的int值替换数组index的值
stelem.i1 将栈顶的int8值替换数组index的值
stelem.i2 将栈顶的int16值替换数组index的值
stelem.i4 将栈顶的int32值替换数组index的值
stelem.i8 将栈顶的int64值替换数组index的值
stelem.r4 将栈顶的float32值替换数组index的值
stelem.r8 将栈顶的float64值替换数组index的值
stelem.ref 将栈顶的对象引用替换数组index的值
stfld 替换对象field的值
stind.i 将int值存到内存地址
stind.i1 将int8值存到内存地址
stind.i2 将int16值存到内存地址
stind.i4 将int32值存到内存地址
stind.i8 将int64值存到内存地址
stind.r4 将float32值存到内存地址
stind.r8 将float64值存到内存地址
stind.ref 将对象的引用存到内存地址
stloc 弹出栈顶的值,赋值到本地变量index
stloc.1 弹出栈顶的值,赋值到本地变量1
stloc.2 弹出栈顶的值,赋值到本地变量2
stloc.3 弹出栈顶的值,赋值到本地变量3
stloc.s 弹出栈顶的值,赋值到本地变量index(短格式)
stobj Store a value of type typeTok at an address
stsfld 替换静态field的值
sub
sub.ovf 减,并在溢出时引发 OverflowException
sub.ovf.un 无符号减,并在溢出时引发 OverflowException
switch 跳进指定分支
tail 方法终止
throw 抛出异常
unaligned 指针未对齐
unbox 拆箱
unbox.any 拆箱
volatile volatile声明的指针
xor 返回整数的按位xor的值