Any problem in computer science can be solved with another layer of indirection
PS:今天看来IL是不是汇编话题很火,自己以前转过一篇博客,大家看看,希望能有所参考。
计算机能够执行机器语言的程序,这种语言的每条指令用简单的电路单元就能实现,称为L0.
程序员使用L0非常困难,因为需要很底层的技术,并且L0都是由数字构成的,如果能够设计一种新的简单易用的语言L1,那么就能用L1来写程序了,有两种方法:
· 解释方式
当执行用L1语言的编写的程序时,使用L0的解释程序对L1的每条指令解码并执行,这样L1程序可以执行,但是必须在执行之前解码
· 翻译方式
用特别设计的编码的L0程序将整个L1源程序翻译为L0程序,生成的L0就可以直接在硬件上执行了
对于每个语言层次,都可以将其假想为一台计算机(虚拟机)。例如虚拟机VM1能够执行L1语言的指令,虚拟机VM0能够执行L0的程序指令。
每台虚拟机都可以由硬件或软件构成。人们可以为虚拟机VM1编写程序,如果VM1能直接实现为真实的计算机硬件,程序就可以直接在硬件上执行了。除此之外,为VM1编写的程序还能通过解释或翻译的方法在VM0上执行。
机器VM1和VM0不应有根本的不同,否则翻译和解释的过程将过于耗时。如果VM1支持的语言不够友好,可设计另外一个更易于理解的虚拟机VM2,此过程可以不断重复,直到设计出一种虚拟机VMn,足够强大且容易使用。
将上述概念和实际的计算机及语言联系起来:
-----------------------------------------
|高级语言 | Layer 5
-----------------------------------------
|汇编语言 | Layer 4
-----------------------------------------
|操作系统 | Layer 3
-----------------------------------------
|指令集体系结构 | Layer 2
-----------------------------------------
|微结构 | Layer 1
-----------------------------------------
|数字逻辑 | Layer 0
-----------------------------------------
· Layer 0
计算机的数字逻辑硬件
· Layer 1
微指令:在微程序控制的计算机中,将由同时发出的控制信号所执行的一组微操作称为微指令。
所以微指令就是把同时发出的控制信号的有关信息汇集起来而形成的。
将一条指令分成若干条微指令,按次序执行这些微指令,就可以实现指令的功能。
若干条微指令可以构成一个微程序,而一个微程序就对应了一条机器指令。因此,一条机器指令的功能是若干条微指令组成的序列来实现的。简而言之,一条机器指令所完成的操作划分成若干条微指令来完成,由微指令进行解释和执行
· Layer 2
机器语言,一般由计算机芯片制造商固化在处理器里的指令集
· Layer 3
操作系统由C或汇编写成,一旦编译之后,实际上是一个能够解释第三层命令而运行在第2层的程序
· Layer 4
汇编语言,使用很容易翻译到第2层指令集的短助记符,执行前一般要全部翻译成机器语言
· Layer 5
我们常看到的C++,C#,VB和Java之类的高级语言,每条语句通常翻译成第4层的多条指令。一般由编译器将第5层的程序翻译成第4层的程序代码,再由编译器汇编成机器语言。
参考书目
Intel汇编语言程序设计第5版---Kip R.Irvine