部分CIL 操做碼數組
操做碼 做用spa
add, sub, mul, div, rem 用於兩個數加減乘除求模對象
add, or, not, xor 用於在兩個值上進行二進制操做索引
ceq, cgt, clt 用不一樣的方法比較兩個在棧上的值,ceq:是否相等;cgt:是否大約;clt:是否小於內存
box, unbox 在引用類型和值類型之間轉換rem
ret 退出方法和返回一個值字符串
beq, bgt, ble, blt, switch 控制方法中的條件分支,beg:若是相等就停止到代碼標籤;bgt:若是大於就停止到代碼標籤;it
ble:若是小於等於就停止到代碼標籤;blt:若是小於就停止到代碼標籤;泛型
全部的分支控制操做碼都須要給出一個CIL代碼標籤做爲條件爲真的跳轉目的變量
br.s (無條件)停止到代碼標籤
call 調用一個成員
nearer, newobj 在內存中建立一個新的數組或新的對象類型
主要的入棧CIL操做碼 (ld 加載)
操做碼 做用
ldarg (及多個變化形式) 加載方法的參數到棧中。除了泛型ldarg(須要一個索引做爲參數),還有後其餘不少的變化形式。
eg. 有個數字後綴的ldarg操做碼來指定須要加載的參數。同時還有不少ldarg的變化形式容許加載
指定的數據類型(ldarg_i4, 加載int32)和值(ldarg_i4_5 加載一個值爲5的int32)
ldc (及多個變化形式) 加載一個常數到棧中
ldfld (及多個變化形式) 加載一個對象實例的成員到棧中
ldloc (及多個變化形式) 加載一個本地變量到棧中
ldobj 得到一個堆對象的全部數據,並將它們放置到棧中
ldstr 加載一個字符串數據到棧中
主要的彈出棧操做碼 (st 存儲)
操做碼 做用
pop 刪除當前棧頂的值,可是並不影響存儲的值
starg 存儲棧頂的值到給出方法的參數,根據索引肯定這個參數
stloc (及多個變化形式) 彈出當前棧頂的值並存儲在一個本地變量列表中,根據因此肯定這個參數
stobj 從棧中複製一個特定的類型到指定的內存地址
stfld 用從棧中得到的值替換對象成員的值