请使用支持JavaScript的浏览器! CIL中间语言浅谈 - M守护神 - 博客园-蚂蚁淘商城
新闻动态

CIL中间语言浅谈 - M守护神 - 博客园

  
  2024-04-27
  
通用中间语言(Common Intermediate Language,简称CIL)(曾经被称为微软中间语言或MSIL)是一种属于通用语言架构和.NET框架的低阶(lowest-level)的人类可读的编程语言。目标为.NET 框架的语言被编译成CIL,然后汇编成字节码。CIL类似一个面向对象的汇编语言,并且它是完全基于堆栈的。它运行在虚拟机上,其主要的语言有C#、Visual Basic .NET、C++/CLI以及 J#。由于C#和通用语言架构的标准化,字节码现在已经官方地成为了CIL。JIT即时编译即时编译(JIT)是指字节码在CPU执行时被立即转换成机器码。转换是在程序执行的过程中逐渐进行的。即时编译技术提供了特定环境下的优化、运行时类型安全以及汇编验证。为此,即时编译器检查程序集元数据中是否有非法访问和句柄的冲突。编译本机映像生成器 (Ngen.exe) 是一个提高托管应用程序性能的工具。Ngen.exe 创建本机映像(包含经编译的特定于处理器的机器代码的文件),并将它们安装到本地计算机上的本机映像缓存中。运行库可从缓存中使用本机映像,而不是使用实时编译器编译原始程序集。CIL操作码是对于类或者方法的内部逻辑进行描述和操作的代码,例如Add(将两个值相加并将结果推送到计算堆栈上)、 Ldarg(将参数(由指定索引值引用)加载到堆栈上)Ldloc.0(将索引 0 处的局部变量加载到计算堆栈上)等其主要分为以下五大类操作:(数据)的压栈(ld)、弹出(st)、运算、转移、其他。Bge.Un当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令。Bge.Un.S当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令(短格式)。Bgt.Un当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令。Bgt.Un.S当比较无符号整数值或不可排序的浮点型值时,如果第一个值大于第二个值,则将控制转移到目标指令(短格式)。Ble.Un当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于或等于第二个值,则将控制转移到目标指令。Ble.Un.S当比较无符号整数值或不可排序的浮点值时,如果第一个值小于或等于第二个值,则将控制权转移到目标指令(短格式)。Blt.Un当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于第二个值,则将控制转移到目标指令。Blt.Un.S当比较无符号整数值或不可排序的浮点型值时,如果第一个值小于第二个值,则将控制转移到目标指令(短格式)。Bne.Un.S当两个无符号整数值或不可排序的浮点型值不相等时,将控制转移到目标指令(短格式)。Brfalse如果 value 为 false、空引用(Visual Basic 中的 Nothing)或零,则将控制转移到目标指令。比较两个值。如果这两个值相等,则将整数值 1 (int32) 推送到计算堆栈上;否则,将 0 (int32) 推送到计算堆栈上。比较两个值。如果第一个值大于第二个值,则将整数值 1 (int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。Cgt.Un比较两个无符号的或不可排序的值。如果第一个值大于第二个值,则将整数值 1 (int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。比较两个值。如果第一个值小于第二个值,则将整数值 1 (int32) 推送到计算堆栈上;反之,将 0 (int32) 推送到计算堆栈上。Clt.Un比较无符号的或不可排序的值 value1 和 value2。如果 value1 小于 value2,则将整数值 1 (int32 ) 推送到计算堆栈上;反之,将 0 ( int32 ) 推送到计算堆栈上。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。Cpobj将位于对象( 、* 或 native int 类型)地址的值类型复制到目标对象( 、* 或 native int 类型)的地址。Endfinally将控制从异常块的 fault 或 finally 子句转移回公共语言结构 (CLI) 异常处理程序。Ldelem.I将位于指定数组索引处的 native int 类型的元素作为 native int 加载到计算堆栈的顶部。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 加载到计算堆栈的顶部。Ldvirtftn将指向实现与指定对象关联的特定虚方法的本机代码的非托管指针(native int 类型)推送到计算堆栈上。Localloc从本地动态内存池分配特定数目的字节并将第一个分配的字节的地址(瞬态指针,* 类型)推送到计算堆栈上。从当前方法返回,并将返回值(如果存在)从调用方的计算堆栈推送到被调用方的计算堆栈上。Unaligned指示当前位于计算堆栈上的地址可能没有与紧接的 ldind、stind、ldfld、stfld、ldobj、stobj、initblk 或 cpblk 指令的自然大小对齐。Volatile指定当前位于计算堆栈顶部的地址可以是易失的,并且读取该位置的结果不能被缓存,或者对该地址的多个存储区不能被取消。

本文链接: https://www.ebiomall.com/b340-cil/info-1375142686.html

免责声明 本文仅代表作者个人观点,与本网无关。其创作性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不做任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
版权声明 未经蚂蚁淘授权不得转载、摘编或利用其他方式使用上述作品。已经经本网授权使用作品的,应该授权范围内使用,并注明“来源:蚂蚁淘”。违反上述声明者,本网将追究其相关法律责任。
没有了