关于汇编语言和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 ...
1042 0
|
4月前
|
存储 程序员
【汇编】“转移”综述、操作符offset、jmp指令
【汇编】“转移”综述、操作符offset、jmp指令
119 1
|
6天前
|
存储 C++
C/C++中的整数除法运算与汇编指令DIV和IDIV
C/C++中的整数除法运算与汇编指令DIV和IDIV
15 1
|
6天前
|
存储 安全 程序员
C/C++中的整数乘法运算与汇编指令MUL和IMUL
C/C++中的整数乘法运算与汇编指令MUL和IMUL
11 0
|
6天前
|
编译器 C++
C/C++中的逻辑运算与汇编指令的交互
C/C++中的逻辑运算与汇编指令的交互
8 0
|
6天前
|
编译器 程序员 C++
C/C++逻辑与运算与汇编指令的关系
C/C++逻辑与运算与汇编指令的关系
10 0
|
6天前
|
程序员
汇编语言中的带符号比较跳转指令
汇编语言中的带符号比较跳转指令
12 0
|
6天前
|
程序员
深入理解汇编:平栈、CALL和RET指令详解
深入理解汇编:平栈、CALL和RET指令详解
13 1
|
6天前
理解汇编中的CALL指令和参数传递
理解汇编中的CALL指令和参数传递
12 1