CIL部分语法

摘选自:http://dotnet.mblogger.cn/sumtec/posts/193.aspx

ldloc的意思是把局部变量压到堆栈里面,后面的.0表示第零个局部变量(也就是a了);add则把栈顶的两个元素弹出来并且相加,结果压到堆栈顶上;stloc则把栈顶的内容弹出来,保存到局部变量当中。现在应该看出来了,ld就是load的缩写,st是store的缩写,loc是local。那么还有没有其他的呢?大家可以看一下下面的表:

主要操作操作数范围/条件操作数类型操作数
缩写全称含义缩写全称含义缩写全称含义缩写全称含义
ldload将操作数压到堆栈当中,相当于:
push ax
argargument参数??操作数中的数值.0?第零个参数 *
.1?第一个参数
.2? 第二个参数
.3?第三个参数
.s xx(short)参数xx
aaddress操作数的地址只有 .s xx,参见ldarg.s
loclocal局部变量参见ldarg
fldfield字段(类的全局变量)参见ldargxx?xx字段,eg:
ldfld xx
cconst常量.i4int 4 bytesC#里面的int,其他的类型例如short需要通过conv转换.m1minus 1-1
.0?0
.1?1
 ……
.8 8
.s(short)后面跟一个字节以内的整型数值(有符号的)
??后面跟四个字节的整型数值
.i8int 8 bytesC#里面的long??后面跟八个字节的整型数值
.r4real 4 bytesC#里面的float??后面跟四个字节的浮点数值
.r8real 8 bytesC#里面的double??后面跟八个字节的浮点数值
nullnull空值(也就是0)??????
ststore将堆栈内容弹出到操作数中,相当于:
pop ax
参见ld **
convconvert数值类型转换,仅仅用纯粹的数值类型间的转换,例如int/float等???.i1int 1 bytesC#里面的sbyte???
.i2int 2 bytesC#里面的short
.i4int 4 bytesC#里面的int
.i8int 8 bytesC#里面的long
.r4real 4 bytesC#里面的float
.r8real 8 bytesC#里面的double
.u4uint 4 bytesC#里面的uint
.u8uint 8 bytesC#里面的ulong
b/brbranch条件和无条件跳转,相当于:
jmp/jxx label_jump
br??无条件跳转?????后面跟四个字节的偏移量(有符号)
.s(short)后面跟一个字节的偏移量(有符号)
falsefalse值为零的时候跳转???参见br
truetrue值不为零的时候跳转???
beqequal to相等???
nenot equal to不相等ununsigned or unordered无氟好的(对于整数)或者无序的(对于浮点)
gtgreater than大于
ltless than小于
gegreater than or equal to大于等于
leless than or equal to小于等于
callcall调用?????(非虚函数)?
???virtvirtual虚函数

* 最左边的是参数0,然后是参数1、2、3……。如果不是在静态当中,参数0相当于C#的this(VB的Me),该参数不需要代码传递,此时最左边的参数是参数1,也就是从.1开始。

转载于:https://www.cnblogs.com/jieky/archive/2009/03/13/1410947.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值