同学们好,这一学期,我将陪伴大家学习汇编语言程序设计。
说到汇编语言,大家都知道它是一门低级语言。有多低级呢?计算机直接执行的是机器指令,就是二进制0、1序列,汇编语言使用一些助记符号代表这些指令。用汇编语言编程,直接操纵CPU中的寄存器,直接控制内存空间,可以说是直接操纵了计算机最底层的硬件。而我们现在,在绝大多数的情况下,都是在用高级语言编程解决问题,是不会接触计算机的底层的。
那究竟为什么我们要学习汇编语言呢?
首先,汇编语言尽管年事已高,但它在当前工程应用当中,仍然广被广泛使用,甚至起着不可替代的作用。在数以千计的程序设计语言家族中,有个TIOBE排行榜,每月更新一次。Java、C、C++排名前三,汇编语言,出乎很多人的意料,在2017年中排名第9。尤其是在近几年中,借物联网、嵌入式系统的快速发展,汇编语言的排名提升速度很快。这个排名,足以说明汇编语言宝刀不老,在业界被广泛的采用。
汇编语言在行业内是一棵长青树,它在技术链条中起着一种不可替代的作用,注意是仅此一家,别无分号。汇编语言的最大的优势是效率,用汇编语言写的程序,由于是直接操纵硬件底层的,执行速度是任何高级语言无可比拟的。所以,汇编语言一般开发的都是软件系统的核心部件,计算机内部部件和外围设备的驱动程序,像操作系统的内核、工业控制系统中的实时控制部分等,还有现在的不少嵌入式系统,包括家用电器,仪器仪表、物联网系统当中的最核心的一些部件,都需要汇编语言发挥作用。既然汇编语言是解决最核心、最关键问题的,可以想像到在整个程序员的江湖中,汇编语言程序员应该坐哪把交椅。学习汇编语言对于不少学不得法的人而言,在感觉上是比较难的,汇编语言程序员排名上座也就能够得到理解了。
汇编语言编写的程序,对计算机运行程序而言是高效率的,那就给人带来一个担心:人开发汇编语言程序的效率并不高。的确是这样。因此,在使用汇编语言时,一般只用汇编语言编写最核心最关键的部件,而其它外围的功能,用高级语言实现。然而,说汇编语言程序的开发效率低,这并不是一个绝对的真理。我们使用任何的语言开发程序,要将之用到能发挥好它自己特色的地方。如果说要在内存当中直接注入一段小程序之类的工作,用汇编语言,开发效率不知要比用高级语言快上多少倍。
并不是每一位学习计算机的同学都是要做最核心、底层的工作。学习汇编语言程序设计,更大的意义,是将它作为学习计算机的一个途径,目标是理解计算机,对于学习计算机,能起到一种非常独特的作用。汇编语言能够直击计算机系统的核心,学习汇编语言程序的原理,阅读、编写和运行汇编语言程序,可以使我们加深对计算机原理、操作系统的理解,进而,理解整个的计算机系统体系。通过学习和使用汇编语言,就有机会钻到计算机的最核心部件中去,向上理解各种软件系统的原理,打下软件技术的理论基础,而向下呢,感知、体会和理解到机器内部硬件的底层逻辑功能。学习汇编语言程序设计,要编程序,要调试,我们将在这个学习过程当中,学会底层的程序调试和错误分析的方法,练这样的功夫,机会并不是很的。大学中的很多课程,你不要死记硬背,只图通过考试,这样的话,你才能够学到用于解决领域问题的相关知识,同时,得到深入到学科核心的钥匙。
那接下来的问题就是我们在这门课当中要学什么,如何学了?
学什么?这门课定位是汇编语言的基础,只讲8086 PC的汇编语言。有同学就说了,这内容未免太旧了吧?是的,8086是上个世纪80年代的产品,我们要学习汇编语言,最新的应该是80x86,奔腾系列的,还有Linux汇编、ARM汇编等。为什么要选择8086作为基础呢?在这里有个方法论的问题。当我们面对一个复杂系统时,作为学习,经常需要设计一个模拟的、简化的教学系统,能够体现最核心的思维和最基础的内容,而忽略一些非核心的细节。不得不说,现在的计算机系统太复杂了,而曾经红极一时的8086产品,作为当今的教学系统,是完全胜任这个角色的。所以,我们选择8086,并且只涉及硬件层面,不针对具体的操作系统,windows、Linux什么的,一是要降低入门的难度,二是体现对汇编语言的核心思维与方法的专注。不过话又说回来,汇编语言是就是能够直接针对硬件编程的,与操作系统与关,8086PC中的很多技术,在现在的计算机上仍然有用,如果有想法再多学一些接近工作状态汇编语言,在这门课程传授的知识和方法的基础上,继续再进一步就可以。这门课所学的内容,还可以为学习嵌入式系统、微机原理、单片机等作为基础。
说到学习方法,这门课将贯彻我一直提倡的,实践的学习方法。在视频讲解中,我将不局限于所谓讲知识,而是把所有的知识点都会在计算机上展示出来。CPU中的各种部件,我们是不能直接看到的,但是,我会引导大家,学会通过软件工具进行观察的方法。我们选的参考教材,是王爽老师的《汇编语言》第3版,这本书的特色,是王老师设计出了一个循序渐进学习的路线,在内容的编排上很好的支持。一个知识点之后,设计了问题和检测点,强调只有通过了检测,才可以继续学习下面的内容。这些问题和检测点,将作为实施翻转课堂教学时,老师和同学们在实体的课堂上开展学习活动的主要内容,而对于通过网络学习的同学,就需要自己对照教材,自行把这些问题和检测点攻克了,然后再往下走。另外,为支持大家的实践学习,我也将再建设一些其他的配套的资源,通过我的博客免费公布。
好了,从下一讲开始,我将主要通过录屏的方式,参考教材的体系进行讲授,希望同学们能够在听讲之余,同步阅读教材,完成相关的实践,将汇编语言程序设计的方法,用有效的学习真正掌握了。