深入理解CIL编程:从基础到实践
1. CIL操作码的角色
当使用各种指令和相关属性以CIL定义了.NET程序集、命名空间和类型集后,最后一项任务就是提供类型的实现逻辑,这正是操作码(opcodes)的用武之地。和其他低级语言一样,许多CIL操作码晦涩难懂,例如,若要将字符串变量加载到内存,不会使用友好的 LoadString 操作码,而是 ldstr 。
不过,部分CIL操作码能自然地映射到C#对应项,如 box 、 unbox 、 throw 和 sizeof 。CIL操作码总是在成员实现范围内使用,且与CIL指令不同,它们从不以点号作为前缀。
2. CIL操作码与助记符的区别
像 ldstr 这样的操作码用于实现给定类型的成员,但 ldstr 这类标记实际上是实际二进制CIL操作码的助记符。例如,在C#中定义一个 Add 方法:
int Add(int x, int y)
{
return x + y;
}
两数相加操作在CIL中用操作码 0X58 表示,相减用 0X59 ,在托管堆上分配新对象用 0X73 。JIT编译器处理的“CIL代码”本质上是二进制数据块。
超级会员免费看
订阅专栏 解锁全文

130

被折叠的 条评论
为什么被折叠?



