CIL指令和指针类型的操作

对象引用的使用在CIL中受到严格限制。它们几乎完全被使用带有VOS(Virtual Object System)指令,这些指令是专门为处理对象和部分对象引用而设计的。

常规操作如下

首先我们需要将加载一个本地变量到计算堆栈(Evaluation Stack)里(此处需要说明一下。Evaluation Stack这个术语我没有找到前人的中文翻译,此处是我本人的机翻。对于计算堆栈的作用,我的理解大致如下:我们常说的堆栈中的变量并不能直接访问,而在CLR中需要访问这些变量就必须通过load指令将变量从内存里移动到计算堆栈里进行处理。而计算堆栈在其中起到的角色就是连接程序和内存的中介。)此时需要使用ldloc指令将局部变量加载到堆栈中,或者使用ldarg指令将参数加载到堆栈中。然后使用stloc指令从计算堆栈的顶部抛出当前值并将它存储到指定索引处的局部变量列表中,或者使用Starg指令将位于计算堆栈顶部的值存储在参数槽中的指定索引处。 

移动到计算堆栈,而在将变量移动到计算堆栈中之前,CIL会使用beq指令将引用与变量进行比较,比较通过后将它推送到计算堆栈。

使用ldind.ref指令将变量加载到计算堆栈,再使用stind.ref指令并将对象引用的数值存储在对象引用的地址中。

使用ldnull指令创建为空引用,通过ret指令将值返回。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杞人忧天abc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值