msil 指令說明

公共字段
  Add 将两个值相加并将结果推送到计算堆栈上。
  Add_Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上。
  Add_Ovf_Un 将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算堆栈上。
  And 计算两个值的位 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 无条件地将控制转移到目标指令。
  Break 向公共语言结构 (CLI) 发出信号以通知调试器已撞上了一个断点。
  Brfalse 如果 value 为 false、空引用(Visual Basic 中的 Nothing)或零,则将控制转移到目标指令。
  Brfalse_S 如果 value 为 false、空引用或零,则将控制转移到目标指令。
  Brtrue 如果 value 为 true、非空或非零,则将控制转移到目标指令。
  Brtrue_S 如果 value 为 true、非空或非零,则将控制转移到目标指令(短格式)。
  Br_S 无条件地将控制转移到目标指令(短格式)。

  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) 推送到计算堆栈上。
 Conv_I 将位于计算堆栈顶部的值转换为 natural int。
 Conv_I1 将位于计算堆栈顶部的值转换为 int8,然后将其扩展(填充)为 int32。
 Conv_I2 将位于计算堆栈顶部的值转换为 int16,然后将其扩展(填充)为 int32。
 Conv_I4 将位于计算堆栈顶部的值转换为 int32。
 Conv_I8 将位于计算堆栈顶部的值转换为 int64。
 Conv_Ovf_I 将位于计算堆栈顶部的有符号值转换为有符号 natural 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_I_Un 将位于计算堆栈顶部的无符号值转换为有符号 natural int,并在溢出时引发OverflowException。
 Conv_Ovf_U 将位于计算堆栈顶部的有符号值转换为 unsigned natural 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_Ovf_U_Un 将位于计算堆栈顶部的无符号值转换为 unsigned natural int,并在溢出时引发
OverflowException。
 Conv_R4 将位于计算堆栈顶部的值转换为 float32。
 Conv_R8 将位于计算堆栈顶部的值转换为 float64。
 Conv_R_Un 将位于计算堆栈顶部的无符号整数值转换为 float32。
 Conv_U 将位于计算堆栈顶部的值转换为 unsigned natural int,然后将其扩展为 natural int。
 Conv_U1 将位于计算堆栈顶部的值转换为 unsigned int8,然后将其扩展为 int32。
 Conv_U2 将位于计算堆栈顶部的值转换为 unsigned int16,然后将其扩展为 int32。
 Conv_U4 将位于计算堆栈顶部的值转换为 unsigned int32,然后将其扩展为 int32。
 Conv_U8 将位于计算堆栈顶部的值转换为 unsigned int64,然后将其扩展为 int64。
 Cpblk 将指定数目的字节从源地址复制到目标地址。
 Cpobj 将位于对象(&、* 或 natural int 类型)地址的值类型复制到目标对象(&、* 或 natural int 类型)的地址。

 Div 将两个值相除并将结果作为浮点(F 类型)或商(int32 类型)推送到计算堆栈上。
 Div_Un 两个无符号整数值相除并将结果 (int32) 推送到计算堆栈上。
 Dup 复制计算堆栈上当前最顶端的值,然后将副本推送到计算堆栈上。
 
  Endfilter 将控制从异常的 filter 子句转移回公共语言结构 (CLI) 异常处理程序。
  Endfinally 将控制从异常块的 fault 或 finally 子句转移回公共语言结构 (CLI) 异常处理程序。

  Initblk 将位于特定地址的内存的指定块初始化为给定大小和初始值。
  Initobj 将位于指定地址的对象的所有字段初始化为空引用或适当的基元类型的 0。
  Isinst 测试对象引用(O 类型)是否为特定类的实例。

  Jmp 退出当前方法并跳至指定方法。

  Ldarg 将参数(由指定索引值引用)加载到堆栈上。
  Ldarga 将参数地址加载到计算堆栈上。
  Ldarga_S 以短格式将参数地址加载到计算堆栈上。
  Ldarg_0 将索引为 0 的参数加载到计算堆栈上。
  Ldarg_1 将索引为 1 的参数加载到计算堆栈上。
  Ldarg_2 将索引为 2 的参数加载到计算堆栈上。
 Ldarg_3 将索引为 3 的参数加载到计算堆栈上。
  Ldarg_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 将提供的 int8 值作为 int32 推送到计算堆栈上(短格式)。
  Ldc_I8 将所提供的 int64 类型的值作为 int64 推送到计算堆栈上。
  Ldc_R4 将所提供的 float32 类型的值作为 F (float) 类型推送到计算堆栈上。
  Ldc_R8 将所提供的 float64 类型的值作为 F (float) 类型推送到计算堆栈上。
  Ldelema 将位于指定数组索引的数组元素的地址作为 & 类型(托管指针)加载到计算堆栈的顶部。
  Ldelem_I 将位于指定数组索引处的 natural int 类型的元素作为 natural 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 加载到计算堆栈的顶部。
  Ldfld 查找对象中其引用当前位于计算堆栈的字段的值。
  Ldflda 查找对象中其引用当前位于计算堆栈的字段的地址。
  Ldftn 将指向实现特定方法的本机代码的非托管指针(natural int 类型)推送到计算堆栈上。
  Ldind_I 将 natural int 类型的值作为 natural int 间接加载到计算堆栈上。
  Ldind_I1 将 int8 类型的值作为 int32 间接加载到计算堆栈上。
  Ldind_I2 将 int16 类型的值作为 int32 间接加载到计算堆栈上。
  Ldind_I4 将 int32 类型的值作为 int32 间接加载到计算堆栈上。
  Ldind_I8 将 int64 类型的值作为 int64 间接加载到计算堆栈上。
  Ldind_R4 将 float32 类型的值作为 F (float) 类型间接加载到计算堆栈上。
  Ldind_R8 将 float64 类型的值作为 F (float) 类型间接加载到计算堆栈上。
  Ldind_Ref 将对象引用作为 O(对象引用)类型间接加载到计算堆栈上。
  Ldind_U1 将 unsigned int8 类型的值作为 int32 间接加载到计算堆栈上。
  Ldind_U2 将 unsigned int16 类型的值作为 int32 间接加载到计算堆栈上。
  Ldind_U4 将 unsigned int32 类型的值作为 int32 间接加载到计算堆栈上。
  Ldlen 将从零开始的、一维数组的元素的数目推送到计算堆栈上。
  Ldloc 将指定索引处的局部变量加载到计算堆栈上。
  Ldloca 将位于特定索引处的局部变量的地址加载到计算堆栈上。
  Ldloca_S 将位于特定索引处的局部变量的地址加载到计算堆栈上(短格式)。
  Ldloc_0 将索引 0 处的局部变量加载到计算堆栈上。
  Ldloc_1 将索引 1 处的局部变量加载到计算堆栈上。
  Ldloc_2 将索引 2 处的局部变量加载到计算堆栈上。
  Ldloc_3 将索引 3 处的局部变量加载到计算堆栈上。
  Ldloc_S 将特定索引处的局部变量加载到计算堆栈上(短格式)。
  Ldnull 将空引用(O 类型)推送到计算堆栈上。
  Ldobj 将地址指向的值类型对象复制到计算堆栈的顶部。
  Ldsfld 将静态字段的值推送到计算堆栈上。
  Ldsflda 将静态字段的地址推送到计算堆栈上。
  Ldstr 推送对元数据中存储的字符串的新对象引用。
  Ldtoken 将元数据标记转换为其运行时表示形式,并将其推送到计算堆栈上。
  Ldvirtftn 将指向实现与指定对象关联的特定虚方法的本机代码的非托管指针(natural int 类型)推送到计算堆栈上。
  Leave 退出受保护的代码区域,无条件将控制转移到特定目标指令。
  Leave_S 退出受保护的代码区域,无条件将控制转移到目标指令(短格式)。
  Localloc 从本地动态内存池分配特定数目的字节并将第一个分配的字节的地址(瞬态指针,* 类型)推送到计算堆栈上。
 Mkrefany 将对特定类型实例的类型化引用推送到计算堆栈上。 
 Mul 将两个值相乘并将结果推送到计算堆栈上。
 Mul_Ovf 将两个整数值相乘,执行溢出检查,并将结果推送到计算堆栈上。
 Mul_Ovf_Un 将两个无符号整数值相乘,执行溢出检查,并将结果推送到计算堆栈上。

 Neg 对一个值执行求反并将结果推送到计算堆栈上。
 Newarr 将对新的从零开始的一维数组(其元素属于特定类型)的对象引用推送到计算堆栈上。
 Newobj 创建一个值类型的新对象或新实例,并将对象引用(O 类型)推送到计算堆栈上。
 Nop 如果修补操作码,则填充空间。尽管可能消耗处理周期,但未执行任何有意义的操作。
 Not 计算堆栈顶部整数值的按位求补并将结果作为相同的类型推送到计算堆栈上。

 or 计算位于堆栈顶部的两个整数值的按位求补并将结果推送到计算堆栈上。

 Pop 移除当前位于计算堆栈顶部的值。

 Refanytype 检索嵌入在类型化引用内的类型标记。
 Refanyval 检索嵌入在类型化引用内的地址(& 类型)。
 Rem 将两个值相除并将余数推送到计算堆栈上。
 Rem_Un 将两个无符号值相除并将余数推送到计算堆栈上。
 Ret 从当前方法返回,并将返回值(如果存在)从调用方的计算堆栈推送到被调用方的计算堆栈上。
 Rethrow 再次引发当前异常。

 Shl 将整数值左移(用零填充)指定的位数,并将结果推送到计算堆栈上。
 Shr 将整数值右移(保留符号)指定的位数,并将结果推送到计算堆栈上。
 Shr_Un 将无符号整数值右移(用零填充)指定的位数,并将结果推送到计算堆栈上。
 Sizeof 将提供的值类型的大小(以字节为单位)推送到计算堆栈上。
 Starg 将位于计算堆栈顶部的值存储到位于指定索引的参数槽中。
 Starg_S 将位于计算堆栈顶部的值存储在参数槽中的指定索引处(短格式)。
 Stelem_I 用计算堆栈上的 natural int 值替换给定索引处的数组元素。
 Stelem_I1 用计算堆栈上的 int8 值替换给定索引处的数组元素。
 Stelem_I2 用计算堆栈上的 int16 值替换给定索引处的数组元素。
 Stelem_I4 用计算堆栈上的 int32 值替换给定索引处的数组元素。
 Stelem_I8 用计算堆栈上的 int64 值替换给定索引处的数组元素。
 Stelem_R4 用计算堆栈上的 float32 值替换给定索引处的数组元素。
 Stelem_R8 用计算堆栈上的 float64 值替换给定索引处的数组元素。
 Stelem_Ref 用计算堆栈上的对象 ref 值(O 类型)替换给定索引处的数组元素。
 Stfld 用新值替换在对象引用或指针的字段中存储的值。
 Stind_I 在所提供的地址存储 natural int 类型的值。
 Stind_I1 在所提供的地址存储 int8 类型的值。
 Stind_I2 在所提供的地址存储 int16 类型的值。
 Stind_I4 在所提供的地址存储 int32 类型的值。
 Stind_I8 在所提供的地址存储 int64 类型的值。
 Stind_R4 在所提供的地址存储 float32 类型的值。
 Stind_R8 在所提供的地址存储 float64 类型的值。
 Stind_Ref 存储所提供地址处的对象引用值。
 Stloc 从计算堆栈的顶部弹出当前值并将其存储到指定索引处的局部变量列表中。
 Stloc_0 从计算堆栈的顶部弹出当前值并将其存储到索引 0 处的局部变量列表中。
 Stloc_1 从计算堆栈的顶部弹出当前值并将其存储到索引 1 处的局部变量列表中。
 Stloc_2 从计算堆栈的顶部弹出当前值并将其存储到索引 2 处的局部变量列表中。
 Stloc_3 从计算堆栈的顶部弹出当前值并将其存储到索引 3 处的局部变量列表中。
 Stloc_S 从计算堆栈的顶部弹出当前值并将其存储在局部变量列表中的 index 处(短格式)。
 Stobj 将指定类型的值从计算堆栈复制到所提供的内存地址中。
 Stsfld 用来自计算堆栈的值替换静态字段的值。
 Sub 从其他值中减去一个值并将结果推送到计算堆栈上。
 Sub_Ovf 从另一值中减去一个整数值,执行溢出检查,并且将结果推送到计算堆栈上。
 Sub_Ovf_Un 从另一值中减去一个无符号整数值,执行溢出检查,并且将结果推送到计算堆栈上。
 Switch 实现跳转表。

 Tailcall 执行后缀的方法调用指令,以便在执行实际调用指令前移除当前方法的堆栈帧。
 Throw 引发当前位于计算堆栈上的异常对象。

  Unaligned 指示当前位于计算堆栈上的地址可能没有与紧接的 ldind、stind、ldfld、stfld、ldobj、stobj、initblk 或 cpblk 指令的自然大小对齐。
  Unbox 将值类型的已装箱的表示形式转换为其未装箱的形式。

  Volatile 指定当前位于计算堆栈顶部的地址可以是易失的,并且读取该位置的结果不能被缓存,或者对该地址的多个存储区不能被取消。

  Xor 计算位于计算堆栈顶部的两个值的按位异或,并且将结果推送到计算堆栈上。

公共方法
  Equals(从 Object 继承) 已重载。确定两个 Object 实例是否相等。
  GetHashCode(从 Object 继承) 用作特定类型的哈希函数,适合在哈希算法和数据结构(如哈希表)中使用。
  GetType(从 Object 继承) 获取当前实例的 Type。
  TakesSingleByteArgument 如果提供的操作码采用单字节参数则返回真或假。
  ToString(从 Object 继承) 返回表示当前 Object 的 String。

受保护的方法
  Finalize(从 Object 继承) 已重写。允许 Object 在“垃圾回收”回收 Object 之前尝试释放资源并执行其他清理操作。在 C# 和 C++ 中,使用析构函数语法来表示终结程序。
 MemberwiseClone(从 Object 继承) 创建当前 Object 的浅表副本。 

轉自:http://blog.csdn.net/timewolf/archive/2006/07/28/991630.aspx
原文地址:https://www.cnblogs.com/scottckt/p/1162826.html