走入汇编的世界
――汇编学习小记
汇编语言,在dos时代是系统底层编程的代名词,可以在内核中为所欲为。只要是牵涉到计算机底层的东西,他们就会和汇编紧密挂钩。汇编以它的特权赢得了系统警察的称号。因为它的必须性和它底层语言的不熟悉性,与硬件相关复杂性,在大学校园中也就流行起了这样一句话“汇编语言不会编”。那些可以熟练使用汇编语言的人,也在很多人眼中带上了一种光环,仿佛他们代表的就是以后真正探索计算机的浪潮儿的后备力量一般。
在这种情况下,带着惶恐的心情,我开始了我汇编语言的学习。第一步是教材的选用:由于很多人都将现在的使用的教材定义为一本没有什么特别之处、不好看又不得不看的书。因为它是一本标准的汇编基础教材,想学汇编就不能不逼自己系统地去看一本教材。为了避免教材带来的不便,我选用了《Intel汇编语言程序设计 》来开始我的汇编之路。
在上汇编课之前,我简单的将一些基本概念巩固了一下,譬如说一下数据的表达方法和布尔运算,这些都是已经掌握的知识。而对于IA-32处理器的体系结构就会有一点点不明白。最典型的一点就是对于存储的管理。物理空间和虚拟空间以及中间的分页,让我一直不是特别清楚。虚拟空间真是个好玩的东东啊,它就像个魔术师一样,把一点点空间展开到一个非常大的范围。虽然你真正在使用的时候,它会告诉你虚拟内存不足,但是在没有使用的时候,真会有一种取之不尽用之不竭的感觉。:)
第二步就是了解难点的所在。寻址是汇编的关键,据老师说,这是汇编学习的一个重点也是一个难点。然后就是寄存器的使用和状态标志的含义,这个需要在后面的学习过程中慢慢熟悉和了解吧。寻址方面个人觉得还是比较容易理解的,这个部分在标准教材中和课堂中是讲的非常详细的。可是理解是一回事,应用又是另外一回事了。不过寻址只是让我们知道如果需要找到某个地方的内容应该用怎样的寻址方式,是为指令的使用打下基础的。理解起来比较简单,但是真正的问题还是要在不断的编程中来发现。
第三步就是掌握指令了。齐全的指令同时也意味着掌握这些基本指令的功能和应用是学习中一个难点。这需要一条一条指令的熟悉,一步一步的前进,一般好像走过这个“坎”就容易了。(虽然在所有的编程中都是如此,指令的熟悉就是入门)。上课到现在已经花了很多时间一步一步告诉我们各种指令的用法了。
之后还是有漫漫长路,壮士还需努力!
学习汇编最重要的还是兴趣。培养兴趣的方法有不少。一般根据自己的情况和以前对某种语言的掌握程度去学习。有些朋友是根格C的一些简单反汇编代码来培养对汇编的兴趣。我想这也不失一种方法。我自己则是根据书上简明的例子来理解汇编。
但是在IT时代,罗文彬老师说过,从Windows出现开始,汇编语言似乎在慢慢地销声匿迹中。因为随着Windows时代的到来,Windows把所有的东西都封装起来了,把我们和计算机的硬件隔离开来。在Windows下用任何语言编程都必须遵循Windows的规范,汇编也不例外,也就是说,汇编不再是一种"有特权"的语言。由于保护模式的存在,我们又无法像在DOS下一样闯入系统内核为所欲为。面对汹涌而来的Visual C++,Visual BASIC,Power Builder和Java等各个领域的猛将,从DOS时代"为所欲为"的"系统警察"岗位下岗,在别的领域又没有一技之长,汇编语言似乎失去了生存的意义,有很多人在DOS转向Windows的时候放弃了汇编语言。
如果是这样,学好汇编到底有什么用呢?
对于我们来说,从将来而言,编写嵌入式系统的程序时可能要用到C,Jave或汇编语言。而且专用的游戏机都是有严格内存限制的,如果想开发游戏的话,汇编语言是必不可少的。由于汇编语言向Windows平台的迁移,基于汇编语言的一些其他语言开始有了自己的天空,譬如说Win32汇编。这些没有汇编的基础还是不行的。同时.net平台现在的发展有着不可估计的未来,我们也不知道汇编在将来是怎样的发展。但是无论在怎样的平台下,譬如编写操作系统之类的事情,我想还是离不开汇编吧。
就现在而言,汇编语言对计算机硬件,操作系统,应用程序之间的交互的整体理解起到了重要的帮助。用汇编可以随时应用和检验计算机系统结构和操作系统学到的理论知识。汇编的世界中还有无数宝贝,等着我们的拾取,这些也只有以后才知道了。