在没有学习汇编语言以前,我可能会对汇编这门强大而又难学的程序设计语言产生怀疑,因为现在我们有那么多的高级编程语言可以学习,尤其是现在日益强大的面向对象语言。而且每种语言都要比汇编语言学起来容易,而且开发效率更高。那么我们为什么还要学习汇编,汇编这门程序设计语言的存在意义在哪。
学习了汇编语言之后,我发现我不再怀疑汇编语言的强大之处了,汇编语言是一种很强的语言,这是我以前不愿意承认的事实,它的强大在于效率。因为汇编语言要实现的是执行的效率,而不是开发上的效率,这一点可能与现阶段的那些所谓的面向对象以及其它的一些开发语言的目标不同。用汇编语言写的程序,无论是在程序的大小上还是在执行时间上都远远优于高级语言,即使这种高级语言可能使大家公认的已经比较底层的C 语言。
汇编语言与其它的程序设计语言相比,操作的是更加底层的东西,它可以直接与硬件打交道,而别的语言基本不可能实现这样的功能。既然是与硬件打交道,那么我们在写程序的时候就要更加小心了,可能一不小心就会把程序跑丢了。如果我们不能够控制程序的正常逻辑,那么程序运行超出我们的控制范围以后,到底会运行到哪里,我们也无从知晓。比如说我们本来是要操作一个用户内存地址空间的数据,但是有时我们会不注意,程序运行到了内核内存地址空间去了,那么这样的程序肯定要面临崩溃了。幸好我们现在使用的是虚拟模式下的汇编语言编程,不用去考虑那么多的问题,大不了重新启动一下资源管理器,要不然电脑还不知道会崩溃多少次。
与汇编语言相比,高级语言在这方面做的就很不错了,毕竟我们在写高级语言代码的时候,没有直接对底层的硬件进行操作,而先与操作系统打交道。至于操作硬件,那是操作系统的事情了,这样我们可以在一定程度上少犯错误,而且与此同时可以减少花在调试程序上的时间,提高了开发效率。但是这并不代表不会出现问题,用高级语言写程序,有时也会出现这样或者那样的问题。而且出了问题,我们可能更加无所适从,因为我们有时不知道语言内部是如何实现交互的,我们也不可能了解每种解决方案的实现细节。汇编语言的另一个优势就是我们必须很清楚我们写的代码是干什么的。这是因为这样,我们写出来的代码没有太多的无用代码,几乎每一句代码都为我们实现了某些实质性的操作。同时由于汇编语言直接操作底层硬件,所以不会像高级语言那样,需要一大堆的代码先和操作系统交互,然后操作系统再操作硬件逻辑。高级语言产生的程序之所以非常大且臃肿还有一个原因是它要包含一些程序集之类的东西,可能一个程序集里面我们只需要某一点,但是在编译、连接产生应用程序的时候,高级语言却将一个很大的程序集包含进来(比如说 #include <stdio.h> ),这使得我们的程序与汇编语言相比变得很臃肿,而且真正有用的东西并不是很多。学习汇编语言我认为还有一个好处就是使我们对于一些底层的东西更加了解和熟悉,知道在程序运行的过程中,操作系统和内存里面到底在发生着些什么事情,这样更加有助于我们加深对于程序设计的理解。
通过汇编语言的学习,我认为自己学到了很多东西,可能有的时候对于一些内存里发生的事情还不是很清楚。但是即使这样,现阶段学到的这些东西已经很有助于我对于操作系统和组成原理方面的一些内容的理解了。其实学习一门语言,有时感觉一是在学习他的语法上的内容,另一方面可能也是在学习它的一些思想。汇编语言对于语法的严谨性让我们在思考问题的时候变得思维变得更加严谨、缜密,而不再是仅仅的想象一下就罢了。