IL指令詳細表

雲霏霏發表於2017-04-07

名稱

說明

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

將位於計算堆疊頂部的值轉換為 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,然後將其擴充套件為 native int。

Conv.U1

將位於計算堆疊頂部的值轉換為 unsigned int8,然後將其擴充套件為 int32。

Conv.U2

將位於計算堆疊頂部的值轉換為 unsigned int16,然後將其擴充套件為 int32。

Conv.U4

將位於計算堆疊頂部的值轉換為 unsigned int32,然後將其擴充套件為 int32。

Conv.U8

將位於計算堆疊頂部的值轉換為 unsigned int64,然後將其擴充套件為 int64。

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

將提供的 int8 值作為 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

查詢物件中其引用當前位於計算堆疊的欄位的值。

Ldflda

查詢物件中其引用當前位於計算堆疊的欄位的地址。

Ldftn

將指向實現特定方法的本機程式碼的非託管指標(native int 型別)推送到計算堆疊上。

Ldind.I

將 native int 型別的值作為 native 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

將指向實現與指定物件關聯的特定虛方法的本機程式碼的非託管指標(native 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

用計算堆疊上的 native 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

在所提供的地址儲存 native 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

計算位於計算堆疊頂部的兩個值的按位異或,並且將結果推送到計算堆疊上。

相關文章