登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

A1Pass的风清月朗居

追随技术的巅峰,突破欲望的枷锁!我,是技术与精神的享乐者!

 
 
 
 
 

日志

 
 

科普:浅谈计算机语言层级  

2009-07-28 20:25:19|  分类: 思绪燃星火——技 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

题记:掌握思想有时更加重要。

转载请注明版权:http://a1pass.blog.163.com/  A1Pass

       计算机发展到现在已经衍生出了各种兴新经济,并应用到了各个领域,计算机语言也正变得日臻成熟。到了今天,可供我们使用的计算机语言多达上百种,虽然这些语言中的很大部分只能应用到极个别的环境中,但是我们平时可以使用的仍然可以达到几十种。

       那么,我们是否清楚这些语言都是什么,或者说我们是否清楚他们都适合做什么?很显然的,你如果使用JAVA写操作系统是不可能的,同样的,如果你想使用汇编写一个大型商业软件一样是不可能的。因此,A1Pass将通过这篇文章为一些入门不久的朋友讲述计算机语言究竟为何物,并以更深的层次阐明语言之间的不同。

       在讲解之初,我首先要声明的就是,任何计算机语言的存在都有其道理,不分优劣。它们根据应用环境的不同而各自有不同的优异表现,因此请各位读者抱着一个健康的心态阅读本文。

        要讲解计算机语言,当然就要从2进制码开始,我们都知道计算机使用0、1来代表高低电平,从而处理数据。但是很明显我们无法有效的维护这些以0、1构成的计算机语言,因此我们需要将其翻译成更利于人类阅读的语言,当我们维护完成时再将其转化为由0、1构成的计算机语言,这样就可以大大提高我们的效率。

        因此人们提出了两种翻译方案,既解释方式与翻译方式:

        解释方式:我们可以将人类编写的代码解释给CPU执行。请注意,这里的解释是指动态进行的,也就是说只要有这个环境,那么我们的代码就可以直接被执行,中间的解释程序负责动态的将我们的每一条指令解释为当前系统状态下CPU可执行的机器码。这种方式有一种好处就是平台无关性,我们只要写出程序代码,那么它在任何的操作系统中、任何的环境中都可以执行,当然代价就是极低的效率……

       翻译方式:我们可以通过编译程序直接将我们的代码翻译成当前系统环境下CPU可执行的机器码,下次只需要执行这些翻译完成后的机器代码即可。这种方式的好处是非常高的执行效率,因为我们最终生成的程序与直接用0、1写的程序并没有太大的区别。但是这种方式的缺点就是可移植性很差,很显然你不能把在Windows系统下编译连接成的EXE文件拿到Linux系统中去执行。

        那么我们究竟要选择哪种方式呢?这是一个没有绝对错误选项的答案,所以我们现在既能使用汇编、又能使用JAVA。

        然而具体来讲,我们现阶段的计算机语言大致可以分为6层,越是底层的语言越难学习、需要考虑的细节越多、同样维护性越差、掌握的人越少,越是高层的语言越容易学习、维护性越好、掌握的人越多、同样执行效率越低。


第一层:二进制机器码

        也就是我们所说的以0、1状态存在的纯机器码,但是请注意,这与我们平时所理解的机器码可能并不是这一层的。因为我们平时所能接触到的机器码全部都是传递给CPU的,而这里的机器码则是指CPU执行的,这两种机器码是截然不同的。CPU可执行的机器码是将传入CPU的机器码进一步分解处理后的结果。例如我们传递给CPU一条做加1的机器码,这条机器码在进入CPU后需要进一步的处理,然后才能得到CPU能真正执行的机器码,也就是我们这里的二进制机器码。
       这个层次的机器码显然不是我们能控制的,由于这里会涉及到物理、数学等众多领域,能掌握它的人就算是在处理器厂商内部都是少之又少,因为这首先对于处理器的厂商来说可是商业机密,其次就是它确实是太复杂了……


第二层:微指令
       微指令对于外人来说是一个猜想,它同样属于商业机密,它与上一层所讲的二进制机器码之间的关系,就犹如我们的汇编语言与平时所接触的机器码之间的对应关系一样。在一条加1的机器指令传递给CPU之后,可能会产生3-4条微指令才会真正加以运算。
       对于运行速度,微指令与上一层的二进制机器码并没有太大区别,但是其可维护性肯定是大幅度提高了。
       正是由于微指令的不确定性,因此某些书籍上认为微指令就是处理器的最后一层,对于这点我有些疑问,而且很明显两种存在方式在产品上并不会太多的体现出来,因为微指令本就是二进制码、或是二进制码的别名。
       不过值得注意的是近期已经发现了修改微指令的方法,并正试图以此留一个很邪恶的后门……

 

第三层:机器语言
       机器语言的本质就是芯片制造商固化在处理器中的也是指令集结构,这些结构负责执行例如值的拷贝或移动与算数预算等任务。这也是我们现今能控制的最小单位的计算机指令,然而就是这样的指令,在真正被执行前也是要被分解为很多条微指令的。

 

第四层:操作系统
       在提及语言层次关系时很少有人会提及操作系统,一盘情况下在探讨平台相关性时才会顺便带上它。但是事实上操作系统是构成计算机语言层次中必不可少的一环,我们平时可以使用的计算机语言编译出来的程序理论上讲都是属于“解释方式”执行的,只有操作系统才是“编译方式”执行的。这听起来可能有些不可思议,但事实就是如此,你如果把Windows下的PE文件直接拿给CPU执行的话肯定是过不去的,因为我们的程序必须经过操作系统的动态解析、并加载到内存后才会引导CPU去执行相关代码。
       因此,我们也可以将操作系统理解为将程序解释为在第三层上可以顺利执行代码的虚拟机,这个虚拟机使我们编程时不用去考虑很多计算机语言与硬件的交互细节,而将更多的精力放在程序逻辑上。当然,由此引起的速度问题肯定是巨大的,好在我们现今的个人PC硬件正在以梦幻般的速度发展,这些硬件足以承担起这笔本来很大的开销。

 

 

第五层:汇编语言
       汇编语言被认为是理解操作系统运行原理的敲门砖,这虽然有些夸张,但也不无道理。最起码的,使用汇编语言时我们所面对的是一个相对真实的内存、CPU环境,这自然就需要我们考虑很多的细节问题,并自己保证数据的准确性,汇编语言不会检查这块内存区域中保存的数据是什么类型,它的任务仅限于保证准确无误的执行你交给它的指令。
       但是即便如此,我们所接触的汇编语言仍旧是基于特定操作系统的,除非你使用它在开发操作系统。

 

第六层:高级语言
       理论上讲高级语言包括C、C++、JAVA等,但是我觉得只有翻译型语言才能背分配到这一层,因为我们可以简单的将翻译型高级语言想象为对汇编语言的一种封装,通过翻译型的高级语言可以直接被解释成为汇编语言,但是很显然解释型语言是不可能的。解释型语言生成的代码永远只有相应的虚拟机(翻译器)才能识别,然后才能将其转换为CPU可识别的指令。


       通过以上的解释,相信各位读者应该理解计算机语言之间的逻辑关系了,也应该明白我们电脑中的CPU肩负了多么重的担子了。从第三层开始,估计每提高一层其执行效率就会下降几倍。

       因此如果各位想写比较精巧的程序,还是推荐使用低级语言。

  评论这张
 
阅读(2398)| 评论(14)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018