本文仅仅只是为了方便查找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的值 |
PREVIOUSgit代码版本管理
NEXTopengl基础学习(3)