关于汇编语言和IL的异同点

简介:
      看到最近园里很多人在讨论汇编和IL。忍不住要说两句。先看看什么是汇编。首先要知道的是汇编是和CPU指令有关的。intel和amd CPU的指令集是不一样的(当然,可能有一部分指令是相同的的)。这就要对不同的CPU实现相应的汇编器,汇编器的功能就是将汇编助记符号(象add、mov)翻译成相对某类CPU的机器码,最终生成象exe、dll、so等二进制文件。
      既然不同的CPU的机器指令不完全相同,那么我们如何编写跨CPU的程序呢?当然, 一个好主意是有一种通用的语言,通过这种语言的编译器,可以将源代码转换(编译)成不同CPU的指令。但这有一个问题,就是需要为各种CPU实现不同的编译器,比较麻烦。为了更方便,可以先将这种语言转换成汇编语言。然后再使用不同CPU平台的汇编器转换成机器码。这样编译器可以只有一个,而汇编器需要对不同的CPU来实现。不过汇编器的实现可以编译器容易得多哦。刚才说的这种语言就是高级语言,象C、C++语言。 在这里,汇编语言不仅仅是起到了助记符的作用,还起到了对CPU的抽象作用。如对于不同的CPU,某个助记指令可以对应的CPU指令码不同。
     再看看IL,由于不同的基于.net的语言有不同的语法。而CLR对语言的语法并不感兴趣,而只对实际的运行指令感兴趣,就象CPU,只对机器指令感兴趣一样。因此,需要一种描述CLR可识别的运行指令的语言,这就是IL。我们可以和汇编的位置进行对比。在.net中,CLR是.net虚拟机,相当于“CPU+操作系统”的地位。而VB.net、C#相当于高级语言,和C、C++是一样的。而IL呢,正好相当于汇编的地位,承前启后。CLR将IL再编译成机器指令是非常快的。因此,可以得出一个结论。如果说IL就是汇编,那么这个汇编并不是相对于CPU的,而是相对于CLR的,也就是说,IL是CLR的汇编。而CLR可以被称为.net虚拟机,因此,可以将IL称为 虚拟汇编
     


 本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/215042 ,如需转载请自行联系原作者
相关文章
|
C++
反汇编分析__stdcall和__cdecl的异同
C++代码如下: .h头文件 #pragma once#ifdef DLLTestAPI#else#define DLLTestAPI _declspec(dllimport)#endifint DLLTestAPI __stdcall ...
1060 0
|
7月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
266 2
|
2月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
2月前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
213 0
|
7月前
|
存储 机器学习/深度学习 移动开发
汇编语言指令系列
汇编语言指令系列
870 0
几组汇编指令的比较
几组汇编指令的比较
|
5月前
|
存储 机器学习/深度学习 芯片
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
8086 汇编笔记(十二):int 指令 & 端口 & 直接定址表
|
5月前
|
存储 算法 安全
深入理解汇编语言:基础语法和常用指令介绍
深入理解汇编语言:基础语法和常用指令介绍
|
6月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
102 1