关于汇编语言和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 ...
1040 0
|
11月前
|
存储 Java C++
汇编语言、寄存器分类及程序计数器
汇编语言、寄存器分类及程序计数器
86 0
|
11月前
|
C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(三)
|
11月前
|
编译器 C语言
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(二)
|
11月前
|
存储 自然语言处理 程序员
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
进阶C语言 第七章-------《程序的编译(预处理操作)+链接》 (预编译、编译、汇编、#define、条件编译,#include的包含)知识点+完整思维导图+基本练习题+深入细节+通俗易懂建议收藏(一)
|
存储 API C语言
从反汇编看恶意程序的C语言结构(二)
从反汇编看恶意程序的C语言结构
94 0
|
存储 程序员
Win知识 - 程序是怎样跑起来的——汇编语言的语法是“操作码+操作数”
Win知识 - 程序是怎样跑起来的——汇编语言的语法是“操作码+操作数”
91 0
Win知识 - 程序是怎样跑起来的——汇编语言的语法是“操作码+操作数”
|
编译器 C语言 C++
Win知识 - 程序是怎样跑起来的——通过编译器输出汇编语言的源代码
Win知识 - 程序是怎样跑起来的——通过编译器输出汇编语言的源代码
200 0
|
编译器 C语言
Win知识 - 程序是怎样跑起来的——汇编语言和本地代码是一一对应的
Win知识 - 程序是怎样跑起来的——汇编语言和本地代码是一一对应的
111 0
Win知识 - 程序是怎样跑起来的——汇编语言和本地代码是一一对应的