这个问题都是关于定义的,所以让我们正确地定义这些术语.首先,汇编语言:
汇编语言是计算机,微处理器,微控制器和其他可编程设备的低级编程语言,其中每个语句对应于单个机器语言指令.汇编语言特定于某种计算机体系结构,与大多数高级编程语言相反,后者通常可移植到多个系统.
现在,CIL:
通用中间语言是公共语言基础结构(CLI)规范定义的最低级别的人类可读编程语言,由.NET Framework和Mono使用.以CLI兼容的运行时环境为目标的语言编译为CIL,CIL被组装成具有字节码样式格式的目标代码.
好的,这部分在技术上是不正确的:例如C#编译器直接编译为字节码,它不通过CIL(人类可读的语言),但从理论上讲,我们可以想象这就是正在发生的事情.
有了这两个定义,CIL 就是一种汇编语言,因为它中的每个语句都被编译成单个字节码指令.事实上没有物理计算机可以直接执行该字节码并不重要.
定义说每种汇编语言都是"特定于某种计算机体系结构".在这种情况下,体系结构是CLR虚拟机.
关于JIT:JIT编译器不能被认为是汇编程序:它不执行从人类可读形式到字节码的1:1转换,ilasm这样做.
汇编由特定处理器的机器代码指令的助记符组成。使核心执行代码的 1 和 0 的直接表示,但以文本形式编写,以方便人类操作。这与 CIL 非常不同:
最后一点是关键,CIL 指令是无类型的,这一设计决策使 CIL 与字节码有很大不同。只有一条 ADD 指令,但处理器有许多版本。采用字节、短整型、整数、长整型、浮点型和双精度操作数的特定操作数。必需的,因为处理器核心的不同部分用于执行添加。抖动根据从之前的 CIL 指令推断出的操作数类型来选择正确的操作数。
就像 C# 语言中的 + 运算符一样,它也可以处理不同的操作数类型。这确实使 CIL 中的 L 变得很重要,它是一种语言。一个简单的,但它只是简单来帮助轻松地为它编写抖动。
| 归档时间: |
|
| 查看次数: |
2182 次 |
| 最近记录: |