CIL是汇编语言而JIT是汇编语言

Ani*_*dha 6 .net c# assembly cil

我们知道Common Intermediate Language (CIL)或者(MSIL)面向对象的汇编语言.

但Just In Time Compiler是否(JIT)真的将每条指令映射到底层处理器opcodes

如果是这样,我们可以将CIL称为汇编语言,将JIT称为汇编程序

注意:Wikipedia不会在其汇编语言列表中将CIL列为汇编语言

svi*_*ick 7

这个问题都是关于定义的,所以让我们正确地定义这些术语.首先,汇编语言:

汇编语言是计算机,微处理器,微控制器和其他可编程设备的低级编程语言,其中每个语句对应于单个机器语言指令.汇编语言特定于某种计算机体系结构,与大多数高级编程语言相反,后者通常可移植到多个系统.

现在,CIL:

通用中间语言是公共语言基础结构(CLI)规范定义的最低级别的人类可读编程语言,由.NET Framework和Mono使用.以CLI兼容的运行时环境为目标的语言编译为CIL,CIL被组装成具有字节码样式格式的目标代码.

好的,这部分在技术上是不正确的:例如C#编译器直接编译为字节码,它不通过CIL(人类可读的语言),但从理论上讲,我们可以想象这就是正在发生的事情.

有了这两个定义,CIL 就是一种汇编语言,因为它中的每个语句都被编译成单个字节码指令.事实上没有物理计算机可以直接执行该字节码并不重要.

定义说每种汇编语言都是"特定于某种计算机体系结构".在这种情况下,体系结构是CLR虚拟机.

关于JIT:JIT编译器不能被认为是汇编程序:它不执行从人类可读形式到字节码的1:1转换,ilasm这样做.

  • @Anirudha是什么让x86机器代码特别?汇编程序不必生成x86代码,例如ARM也不会这样做.例如,一些C编译器确实生成x86机器代码,但它们不是汇编程序.汇编程序与x86机器代码没有任何关系. (2认同)

Han*_*ant 4

汇编由特定处理器的机器代码指令的助记符组成。使核心执行代码的 1 和 0 的直接表示,但以文本形式编写,以方便人类操作。这与 CIL 非常不同:

  • 你无法购买执行 CIL 的处理器
  • CIL 不针对特定处理器,但抖动针对特定处理器
  • CIL 假设基于堆栈的执行模型,处理器主要基于寄存器
  • CIL 代码在其原始形式的基础上进行了优化
  • CIL 指令与处理器指令之间没有一对一的转换

最后一点是关键,CIL 指令是无类型的,这一设计决策使 CIL 与字节码有很大不同。只有一条 ADD 指令,但处理器有许多版本。采用字节、短整型、整数、长整型、浮点型和双精度操作数的特定操作数。必需的,因为处理器核心的不同部分用于执行添加。抖动根据从之前的 CIL 指令推断出的操作数类型来选择正确的操作数。

就像 C# 语言中的 + 运算符一样,它也可以处理不同的操作数类型。这确实使 CIL 中的 L 变得很重要,它是一种语言。一个简单的,但它只是简单来帮助轻松地为它编写抖动。

  • 所以你是说 MIX 汇编语言不是汇编语言并且 Knuth 不知道“汇编语言”是什么意思? (5认同)
  • 为什么物理处理器的存在很重要?如果将来有人为 CIL 字节码制造一个物理处理器,会不会突然使 CIL 成为一种汇编语言?另外,这是否意味着 [MIXAL](http://en.wikipedia.org/wiki/MIX) 不是汇编语言? (4认同)