我国计算机程序设计语言课程的教学,经历了如下两个阶段。
在我国计算机教育的早期,计算机语言种类少,学习一门语言可以用上许多年,学好、学透一门语言,是该课程教学的主要目标。至于程序设计能力,则有待于在实践中逐步提高。该教学体系的特点就是以“语言”为主线,从这种语言的“字、词、句、章”出发,系统地理解该语言的语法、语义规范,在这个基础上,再展开程序设计的教学。学完这门课程,学生可以获得该程序设计语言较为系统、完整的知识。但是,由于“语言”和“程序设计”的教学被人为地“割裂”开来,学生的程序设计能力没有得到充分的锻炼,最终的课程目标往往不能顺利地实现。
进入20世纪90年代,新的计算机程序设计语言不断推出。人们发现,花大力气“系统”学习的一种语言,还没有充分地得到使用,功能更强,使用更方便的新的程序设计语言又诞生了,人们不得不一次又一次地“弃旧从新”。有了上次的经验,他们会按照程序设计的需要,跳跃性地学习“语言”知识,也就是围绕着“怎样编写程序”这个中心来展开语言的学习。新的教学体系根据程序设计由易到难的次序,选择对应的语言元素进行教学,不再强调“语言”本身的完整性。这种方法可以较快地进入“程序设计”的主题,目前大多数程序设计语言的教学都采取这种模式。
但是,十分遗憾的是,到目前为止,国内大多数汇编语言教材内容的组织仍然可以归属为上面所叙述的第一种类型。产生这种局面的原因大致有两个方面。
首先是因为汇编语言是一种面向“机器”的低级语言。较之其他语言,它的语言元素“粒度”小,一个最简单的有意义的程序,也需要约20行的代码,涉及十余种符号指令和伪指令,各知识点之间的“关联度”较高。想“绕过”众多的语言成分,直接进入程序设计主题,教学组织的难度较大。
另一个原因则是因为,早期的处理器相对简单,指令总量有限,相对完整地介绍汇编语言的语言元素还是能够做到的。
但是,现在的情况发生了许多的变化。
首先,我国的高等教育得到了快速的发展,在校学生总量成倍地增加,高等教育从“精英教育”向“大众教育”变迁。加上汇编语言自身的一些特点,使得以“语言”为中心展开教学的难度越来越大,学生普遍感到汇编语言程序设计难学,难掌握。
此外,由于80x86微处理器事实上的市场主导地位,目前汇编语言教学均围绕着该系列处理器进行。但是,不幸的是,80x86处理器属于复杂指令系统计算机(complex instruction system computer, CISC)类型,为了市场利益采取的“向下兼容”策略使它的指令系统越来越庞大,完整地介绍它的指令系统几乎已经不可能了。这对采用以语言为主线的教学模式提出了极大的挑战。
由于上述原因,沿袭多年来传统方法的教学变得越来越困难,汇编语言的教学改革势在必行。
目前,国内的汇编语言教材都是先学习寻址方式和指令系统,然后讲解汇编语言程序的语法结构和伪指令,此后才开始程序设计的教学,这种方法必然造成知识和应用的严重脱节。可以设想,对于一名初学者,要从几百条指令和几十条伪指令中挑选出适当的指令来编写程序,这绝不是一件轻松的事情,感到茫然和不知所措就是不可避免的了。
综上所述,在汇编语言教学中采用以程序设计为主线的教学模式是该课程教学改革的主要方向。在这方面,国外的一些教材已经有了许多成功的探索,如国内多次翻译和出版的IBM PC Assembly Language and Programming.
本教材是作者在30多年进行本课程教学研究和科研实践的基础上,广泛吸纳国内、外优秀教材的成功经验,历时多年,精心编写而成。它的主要特点如下。
(1) 明确了本课程的教学目标。 普通程序设计语言的教学目标无疑是掌握一门语言;培养使用该语言进行程序设计的初步能力。汇编语言是计算机的“母语”,是“硬件”、“软件”知识的“交汇点”。所以,本课程除了上述基本目标之外,还肩负着培养一名计算机专业技术人员所需要的更多的任务。具体特点如下:
① 通过本课程学习,建立完整的计算机工作模型。
② 深入理解高级语言程序的实现原理;
③ 体验没有操作系统支持的、直接面向硬件的程序设计。
(2) 精心地分割汇编语言的元素。围绕着“程序设计”的需要学习相应的知识点,做到“学一点”、用一点、巩固一点”。学习指令和相关知识的同时,就是不断进行程序设计训练的过程。课程的教学过程,呈现出知识结构的“螺旋形上升”的形态,符合循序渐进的学习规律。
(3) 精选实例。通过典型例题使学生充分理解汇编语言程序设计的特点,把小“粒度”的众多知识点融化在应用实例中,避免喋喋不休式的“注意事项”.
(4) 精选80x86的“核心指令集”。计算机的出现总共才短短的60多年,如果把立足点还停留在30年前出现、至今踪迹难觅的16位微处理器上,实在是有点说不通了。但是,完整的80x86指令集包含近千条指令、近百条伪指令,这又实在不是一个初学者所能够承受的。出于本书的基本思想,没有对庞大的80x86指令系统作全面的介绍,而是选择了两类32位指令:
① 由原8086的16位指令自然扩展得到的32位指令;
② 对原16位指令功能进行改进和提升的32位指令。
这两组指令构成了32位指令系统的“核心”,称作“80x86核心指令集”。这些指令完全能够满足培养在校学生“汇编语言程序设计能力”的需要。这样做,一方面不再把学生关在32位CPU的门外,同时也不要分散精力,把时间过多地消耗在学习、记忆相对不太常用的指令上面。至于64位指令,目前并未真正投入使用,不属于“初学者”应该马上学习的范畴。
(5) 提供了简单而又实用的输入输出库函数(YLIB.LIB) ,降低使用汇编语言进行程序开发的“门槛”,同时也避免了使用“宏”给初学者带来的程序调试困难。需要的读者可以通过E-mail与作者联系(xhywxywx@163.com) .
在Windows保护模式下,汇编语言要和其他高级语言一样,利用API这类的应用程序接口进行编程。这时候,程序设计的重点转变成为对API的应用,汇编语言将失去“面向硬件”的主要特色和优势。所以,并不提倡在Windows下用汇编语言编写完整程序,本书也因此未涉及到该内容。但是,在Windows下用汇编语言编制一些核心函数,充分发挥它“短小高速”的特点;利用汇编语言知识进行系统的安全性研究(例如,对病毒传播和致病机理的研究);对程序进行底层层面上的开发调试等。这些方面,汇编语言仍然有着它强大的生命力。
本书由杨文显主编,胡建人、宓双副主编(排名不分先后)。杨文显在长期的本课程教学实践中,逐步摸索出一套以程序设计为主线的汇编语言教学体系,拟定了本书的大纲。本教材第1章~第8章由杨文显、宓双、胡建人合作编写,附录C由杨晶鑫提供。本书初稿完成后,主编对全书进行了多遍认真的统稿和修订。
总之,这是一本全新结构、全新思路的新教材。作者多年来按照这一思路组织教学,取得了比较理想的效果,希望也会对使用本教材的教师和学生有所裨益。
虽然本书的教学体系经过多年的教学实践已经证明是行之有效的。但是作为一本崭新体系的教材,难免存在着疏漏和缺陷,敬请使用本书的教师、读者不吝指出,作者将不胜感激。
使用本书的教师如果需要本书习题参考答案和例题源程序可以与作者联系。
作 者2009年7月