日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

IL,Emit之OpCodes说明(备查)

發布時間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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指示當前位于計算堆棧上的地址可能沒有與緊接的?ldindstindldfldstfldldobjstobj、initblk?或?cpblk?指令的自然大小對齊。
Unbox將值類型的已裝箱的表示形式轉換為其未裝箱的形式。
Unbox_Any將指令中指定類型的已裝箱的表示形式轉換成未裝箱形式。
Volatile指定當前位于計算堆棧頂部的地址可以是易失的,并且讀取該位置的結果不能被緩存,或者對該地址的多個存儲區不能被取消。
Xor計算位于計算堆棧頂部的兩個值的按位異或,并且將結果推送到計算堆棧上。

轉載于:https://www.cnblogs.com/BangQ/archive/2011/07/19/2110301.html

總結

以上是生活随笔為你收集整理的IL,Emit之OpCodes说明(备查)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。