IL,Emit之OpCodes说明(备查)

原文地址:点击打开链接

名称说明
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、空引用或零,则将控制转移到目标指令。
Brtrue如果 value 为 true、非空或非零,则将控制转移到目标指令。
Brtrue_S如果 value 为 true、非空或非零,则将控制转移到目标指令(短格式)。
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将位于计算堆栈顶部的值转换为 natural int。
Conv_I1将位于计算堆栈顶部的值转换为 int8,然后将其扩展(填充)为 int32。
Conv_I2将位于计算堆栈顶部的值转换为 int16,然后将其扩展(填充)为 int32。
Conv_I4将位于计算堆栈顶部的值转换为 int32。
Conv_I8将位于计算堆栈顶部的值转换为 int64。
Conv_Ovf_I将位于计算堆栈顶部的有符号值转换为有符号 natural int,并在溢出时引发 OverflowException
Conv_Ovf_I_Un将位于计算堆栈顶部的无符号值转换为有符号 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_U将位于计算堆栈顶部的有符号值转换为 unsigned natural int,并在溢出时引发 OverflowException。
Conv_Ovf_U_Un将位于计算堆栈顶部的无符号值转换为 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_R_Un将位于计算堆栈顶部的无符号整数值转换为 float32。
Conv_R4将位于计算堆栈顶部的值转换为 float32。
Conv_R8将位于计算堆栈顶部的值转换为 float64。
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将参数(由指定索引值引用)加载到堆栈上。
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将提供的 int8 值作为 int32 推送到计算堆栈上(短格式)。
Ldc_I8将所提供的 int64 类型的值作为 int64 推送到计算堆栈上。
Ldc_R4将所提供的 float32 类型的值作为 F (float) 类型推送到计算堆栈上。
Ldc_R8将所提供的 float64 类型的值作为 F (float) 类型推送到计算堆栈上。
Ldelem按照指令中指定的类型,将指定数组索引中的元素加载到计算堆栈的顶部。
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 加载到计算堆栈的顶部。
Ldelema将位于指定数组索引的数组元素的地址作为 & 类型(托管指针)加载到计算堆栈的顶部。
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将指定索引处的局部变量加载到计算堆栈上。
Ldloc_0将索引 0 处的局部变量加载到计算堆栈上。
Ldloc_1将索引 1 处的局部变量加载到计算堆栈上。
Ldloc_2将索引 2 处的局部变量加载到计算堆栈上。
Ldloc_3将索引 3 处的局部变量加载到计算堆栈上。
Ldloc_S将特定索引处的局部变量加载到计算堆栈上(短格式)。
Ldloca将位于特定索引处的局部变量的地址加载到计算堆栈上。
Ldloca_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移除当前位于计算堆栈顶部的值。
Prefix1此指令为保留指令。
Prefix2此指令为保留指令。
Prefix3此指令为保留指令
Prefix4此指令为保留指令。
Prefix5此指令为保留指令。
Prefix6此指令为保留指令。
Prefix7此指令为保留指令
Prefixref此指令为保留指令。
Readonly指定后面的数组地址操作在运行时不执行类型检查,并且返回可变性受限的托管指针。
Refanytype检索嵌入在类型化引用内的类型标记。
Refanyval检索嵌入在类型化引用内的地址(& 类型)。
Rem将两个值相除并将余数推送到计算堆栈上。
Rem_Un将两个无符号值相除并将余数推送到计算堆栈上
Ret从当前方法返回,并将返回值(如果存在)从调用方的计算堆栈推送到被调用方的计算堆栈上
Rethrow再次引发当前异常。
Shl将整数值左移(用零填充)指定的位数,并将结果推送到计算堆栈上。
Shr将整数值右移(保留符号)指定的位数,并将结果推送到计算堆栈上。
Shr_Un将无符号整数值右移(用零填充)指定的位数,并将结果推送到计算堆栈上。
Sizeof将提供的值类型的大小(以字节为单位)推送到计算堆栈上。
Starg将位于计算堆栈顶部的值存储到位于指定索引的参数槽中。
Starg_S将位于计算堆栈顶部的值存储在参数槽中的指定索引处(短格式)。
Stelem用计算堆栈中的值替换给定索引处的数组元素,其类型在指令中指定。
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将值类型的已装箱的表示形式转换为其未装箱的形式。
Unbox_Any将指令中指定类型的已装箱的表示形式转换成未装箱形式。
Volatile指定当前位于计算堆栈顶部的地址可以是易失的,并且读取该位置的结果不能被缓存,或者对该地址的多个存储区不能被取消。
Xor计算位于计算堆栈顶部的两个值的按位异或,并且将结果推送到计算堆栈上。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值