汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础.其实仅从课程关系的角度讨论汇编语言的重要性未免片面,概括地说,如果你想从事计算机科学方面的工作的话,汇编语言的基础是必不可缺的。原因很简单,我们的工作平台、研究对象都是机器,汇编语言是人和计算机沟通的最直接的方式,它描述了机器最终所要执行的指令序列。想深入研究英国文化,不会英语行吗?汇编语言是和具体的微处理器相联系的,每一种微处理器的汇编语言都不一样,只能通过一种常用的、结构简洁的微处理器的汇编语言来进行学习,从而达到学习汇编的两个最根本的目的:充分获得底层编程的体验,深刻理解机器运行程序的机理。这两个目的达到了,其他目的也就自然而然地达到了。举例来说,你在学习操作系统等课程时,对许多问题就会有很通透的理解。
学习不能在一台抽象的计算机上来进行,必须针对一台具体的计算机来完成学习过程。为了使学习的过程容易展开,我们采用以8086CPU为中央处理器的PC机来进行学习。8086CPU满足的条件:常用而结构简洁,常用保证了可以方便地进行实践,结构简洁则便于进行教学。纯粹的8086PC机己经不存在了,对于现今的机器来讲,它已经属于古玩。但是,现在的任何一台PC机中的微处理器,只要是和Intel兼容的系列,都可以8086的方式进行工作。可以将一个奔腾系列的微处理器当作一个快速的8086微处理器来用。整个奔腾PC的工作情况也是如此,可以当作一台高速的8086PC来用。关于微处理器及相关的一些问题请参看附注1。
为了更好地引导、帮助学习者学习汇编语言,作者精心创作了这本书。下面对教学思想和教学内容的问题进行一些探讨,希望在一些重要的问题上和读者达到共识。
1.教学思想
一门课程是由相互关联的知识构成的,这些知识在一本书中如何组织则是一种信息组织和加工的艺术。学习是一个循序渐进的过程,但并不是所有的教学都是以这种方式完成的,这并不是我们所希望看到的事情,因为任何不以循序渐进的方式进行的学习。都将出现盲目探索和不成系统的情况,最终学习到的也大都是相对零散的知识,并不能建立起一个系统的知识结构.非循序渐进的学习,也达不到循序渐进学习所能达到的深度,因为后者是步步深入的,每一步都以前一步为基础。
你也许会问:“我们不是一直以循序渐进的方式学习吗?有哪本书不是从第一章到最后一章,又有哪门课不是从头讲到尾的呢?”
一本书从第一章到最后一章,一门课从头到尾,这是一个时间先后的问题这并不等于就是以循序渐进的方式在学习。我们是否常有这样的感受?想认真地学习一门较难的课程,可是却经常看不懂书上的内容;有时觉得懂了,可又总有一种不能通透的感觉,觉得书上的内容再反复看,也不能深入下去了。这些情况都说明,我们并未真正以循序渐进的方式学习。
不能循序渐进地学习的根本原因在于:学习者所用的教材并未真正地按循序渐进的原则来构造。这不是一个简单的问题,不是按传统的方法划分一下章节就可以解决的。举例来说,在传统的汇编教材中,一般都在开始的章节中集中讲CPU的编程结构,这一章往往成为大多数初学者的障碍。这章所讲的内容有的需要了解其他的知识才能深入理解,可是这些知识都被忽略了;有的需要有编程经验才能深入理解,或不进行具体编程就根本无法理解,可编程要在后面的章节里进行……
为学习者构造合理的学习线索,这个学习线索应真正地遵循循序渐进的原则。我们需要打破传统的章节划分,以一种新的艺术来对课程的内容进行补充、分割、重组,使其成为一个个串联在学习线索上的完成特定教学功能的教学节点。本书以此作为创作的核心理念。打破了传统的章节划分,构造了合理的学习线索,将课程的内容拆解到学习线索中的各个教学节点中去。学习主线索上的教学节点有4类:①知识点(即各小节内容);②检测点;③问题和分析;④实验。还有一种被称为附注的教学节点不在学习主线索之中,是由知识点引出的节点,属于选看内容。
应用这本书,读者将沿着学习线索来学习一个个知识点,通过一个个检测点,被线索引入到一个个问题分析之中,并完成一个个实验,线索上的每一个教学节点都是后续内容的基础。每一个节点的信息量或难度,又只比前面的多一点,读者在每一步的学习中都会有一种有的放矢的感觉。大的困难被分割,读者在学习的过程中可逐步克服。
这好似航行,我们为学习者设计一条航线,航线上分布着港口,每一个港口都是下一个港口的起点。漫长的旅途被一个个港口分割,我们通过到达每个港口来完成整个航行。
为了按循序渐进的原则构造学习线索,本书采用了一种全新的信息组织和加工艺术,我们称其为:知识屏蔽。有的教材只注重知识的授予,并不注重知识的屏蔽。在教学中知识的屏蔽十分重要,这是一个重点突出的问题。计算机是一门交叉学科,一部分知识往往还连带着其他的相关内容,这些连带的相关内容如果处理不好,将影响学习者对目前要掌握的知识的理解。本书采用了知识屏蔽的方法,对教学内容进行了最小化分割,力求使我们在学习过程中所接触到的每一个知识点都是当前唯一要去理解的东西.我们在看到这个知识点之前,已理解了以前所有的内容;在学习这个知识点的过程中,以后的知识也不会对我们造成干扰。我们在整个学习过程中,每一步都走得清楚而扎实。不知不觉中。由当初的一个简单的问题开始,在经历了一个每一步都相对简单的过程之后,被带入了一个深的层次。这同沿着楼梯上高楼一样,迈出的每一步都不高,结果却上了楼顶。
2.本书的结构
本书由若干章构成,一章包含若干知识点,根据具体内容,还可能包含检测点、问题和分析、实验、附注等教学节点。书中的所有教学节点,除附注之外,都在一个全程的主线索之中。
由于本书具有很强的线索性,学习一定要按照教学的线索进行,有两点是必须要遵守的原则:①没有通过检测点不要向下学习;②没有完成当前的实验不要向下学习。
下面的表格详细说明了书中的各种教学节点和它们的组织情况。
教学节点详表
3.教学重心和内容特点
本书的教学重心是:通过学习关键指令来深入理解机器工作的基本原理,培养底层编程意识和思想。本着这个原则,本书的内容将和传统的教材有着很大的不同。 (1) 不讲解每一条指令的功能
指令仅仅是学习机器基本原理和设计思想的一种实例。而逐条地讲解每一条指令的功能,不是本书的职责所在,它应该是一本指令手册的核心内容。这就好像文学作品和字典的区别,前者的重心在于用文字表达思想,后者讲解每个字的用法。
(2) 编程的平台是硬件而不是操作系统
这一点尤为重要,直接影响到以后的操作系统的教学。我们必须通过一定的编程实践,体验一个裸机的环境,在一个没有操作系统的环境中直接对硬件编程。这样的体会和经验非常重要,这样我们才能真正体会到汇编语言的作用,并且看到没有操作系统的计算机系统是怎样的。这为以后的操作系统的学习打下了一个重要的基础。
(3) 着重讲解重要指令和关键概念
本书的所有内容都是围绕着“深入理解机器工作的基本原理”和“培养底层编程意识和思想”这两个核心目标来进行的。对所有和这两个目标关系并不密切的内容,都进行了舍弃。使学习者可以集中注意力真正理解和掌握那些具有普遍意义的指令和关键概念。
本书在深入到本质的层面上对重要指令和关键概念进行了讲解和讨论。这些指令和概念有:jmp,条件转移指令,call,ret,栈指令,int,iret, cmp,loop,分段、寻址方式等。