本书针对8086/8088微处理器详细论述了微型计算机汇编语言程序设计的原理和方法,以简洁的语言风格剖析了汇编语言程序的基本结构,数据表示法,指令集,伪指令,操作符和寻址方式,屏幕处理和算术运算以及编程技巧,各种调试程序的手段等。
该书既是计算机专业汇编语言课程的教科书,也是电子类专业的教科书,同时可作为从事信息技术人员学习汇编语言和微机原理的参考书。
第1章绪论
1.1数在计算机中的表示
1.2PC机的体系结构
习题
第2章用Debug查看CPU和内存
2.1机器语言
2.2代码和数据
2.3内存中的内容
习题
第3章汇编程序的写法
3.1最基本的汇编程序的写法
3.2汇编程序的编译、连接
3.3用DEBUG查看EXE文件
习题
第4章汇编语言中的数据
4.1数据的定义方法
4.2几个基本运算
习题
第5章汇编程序的组织
5.13种结构在MASM中的实现
5.2用于分支的各种转移语句(Jxx)
5.3结构化的努力:子程序
5.4汇编程序的组织示例
习题
第6章屏幕处理(一)
6.1中断和DOS/BIOS调用
6.2有关屏幕的中断调用
6.3显示ASCII字符
6.4从键盘接收输入
6.5使用输入的一个示例
习题
第7章屏幕处理(二)
7.1属性字节
7.21NTl0H的其他功能
7.3COLOR程序
7.41NTIOH和INT21H
7.5文本方式和图形方式
7.6PC机中有关屏幕显示体系结构的特点
习题
第8章字符串指令
8.1字符串传送指令MOVS
8.2装入字符串LODS和存放字符串STOS
8.3比较字符串CMPS和搜索字符串SCAS
8.4字符串操作实例
习题
第9章算术运算(一)
9.1加法和减法
9.2多字加法
9.3乘法和多字乘法
9.4除法
9.5其他问题
习题
第10章算术运算(二)
10.1ASCII和二进制之间的转换
10.2直接基于ASCII的运算
10.3BCD格式
10.4含有小数点的计算
习题
第11章多重循环
11.1二重循环
11.2三重循环
11.3其他
习题
第12章屏幕作图
12.1从MONO到VGA的图形方式
12.2调色板
12.3画点的中断调用
12.4用Bresenhem算法画一条斜线
习题
第13章打。印
13.1打印机的一般情况
13.2打印的中断调用
13.3打印汉字
习题
第14章查表和排序
14.1可直接访问的表
14.2定长表
14.3排序
14.4XLAT指令
习题
第15章伪操作
15.1宏
15.2有关宏的几个伪操作
15.3条件汇编
15.4数据定义伪操作
15.5有关数据运算的伪操作
15.6有关列表的伪操作
15.7其他伪操作
习题
第16章磁盘与文件
16.1软磁盘的构造
16.2DOS文件系统
16.3访问磁盘的数据格式
16.4读文件、创建文件和写文件
16.5FAT表
16.6随机读和随机写
16.7若干有关磁盘的中断
16.8利用文件句柄创建文件和写文件
16.9利用文件句柄读文件和其他
16.10读取图形文件并显示
习题
第17章参数传递
17.1多个数据段和多个代码段
17.2使用多个文件的汇编程序
17.3参数传递
17.4混合编程一例
习题
第18章BIOS中断
18.1若干BIOS中断介绍
18.2端口
习题
附录
附录1中断向量地址
附录2DOS功能调用
附录3BIOS中断
览表
附录4MASM50简要介绍
附录58086/8088指令系统参考
主要参考文献 本书针对8086/8088微处理器详细论述了微型计算机汇编语言程序设计的原理和方法,以简洁的语言风格剖析了汇编语言程序的基本结构,数据表示法,指令集,伪指令,操作符和寻址方式,屏幕处理和算术运算以及编程技巧,各种调试程序的手段等。
该书既是计算机专业汇编语言课程的教科书,也是电子类专业的教科书,同时可作为从事信息技术人员学习汇编语言和微机原理的参考书。
汇编语言是计算机专业课程中十分重要的一门专业基础课程,是信息工程等专业学生学习微机原理课程前必须学习的基础课程。汇编语言课程有两方面的作用:一是为专业课程的学习准备良好的基础;二是要引导学生掌握学习专业课程的一般方法。本教程从构思到具体写作都和一般教材有很大区别。
我们首先要说明的是实践在汇编这门课中的重要地位。一般来说,在计算机课程中,实践都占据着相当重要的地位。这一结论的依据不全在于所谓“计算机是一个要求具体操作和实际技能的专业”,更在于如果缺乏实践,就绝不可能完整地理解计算机理论。关于这一点的详细阐述显然会使前言过分庞大,但是我们仍要以实际的情况辅以说明。学习汇编的学生大致可分为两类:一种学生自始至终坚持实践,按这种方法去做,尽管对汇编的理解有高低的区分,但至少都可以达到基本合格的程度(只要他化费了足够的努力);另一种学生不重视乃至根本不实践,这种学生在学习了一段时间之后便再也无法实践,或者会认为“汇编是一门太难的课,无法学懂”,或者满足于“理论理解尚好,实践有待以后加强”之类的说法。需要再次强调的是,学好汇编对于后续专业课有显著的促进作用,而汇编学习的失败将不仅仅是一门课的失败,还会影响几乎全部专业课程的学习。
学习任何课程的正确方法都是循序渐进,学习汇编也不例外,而且与其他课程比起来显得更加重要,其原因主要在于汇编语言的涉及面很广,其中的知识单元不容易分解为相对简单的元素,汇编语言的环境简陋,要求学习者有更好的独力学习(工作)能力和主动精神。为此,本教程在这方面做了特殊的努力。从理论上来说,任何学习都是在原有基础上的一种延伸。如果脱离了原有的基础,延伸无所依托,学习就变为空中楼阁,这样学生所做的只能是死记硬背,不是学习,而是记忆。但是人的记忆力是有限量的,如果不通过正确的手段和方法将记忆的内容转化为可理解的内在能力,那么记忆的超载一方面导致遗忘,一方面导致“消化不良”。不少学生所体验的厌学情绪就和这种“消化不良”有直接的联系。
因此,任何学习都应该依靠原有的基础,而且每次的进展都不能跨度太大,理论上把这样的进展称为转移。在本教程中,转移是决定章、节划分的内在线索,学习者不再被要求死记硬背或者“囫囵吞枣”,每一步的进展都是有线索可循的,进展之后都会有实质能力的获得和提高。
我们希望指明两个结论: (1)学习是一种个体化的行为,尽管各人可以经历相似的学习阶段,使用相似的学习方法,但各人的历程有早有晚,时间长短不一,强度也因人而异,结局也不尽相同,因此期望通过模仿别人而达到学习目标基本上是不可能的;学习只能依靠自身的努力,达到自我能力的提高。(2)学习无所谓“苦”,无所谓“乐”。如果有人能设计出一种方法,让人保持在“乐”的情绪中学习,我们并不反对,但就我们所知,真正的学习状态是“专注”。在此“专注”之下,任何“苦”或“乐”都没有地位,也起不到帮助或者阻碍的作用。
由此可见,我们自然就可以讨论学习目标的问题了。一般认为,学习目标有两个:知识的获得和能力的提高。但是深究起来,就可以发现上述说法很有疑问,似乎学习者可以单独地追求任一目标而舍弃(至少是不关心)另一目标。实际上,一个人不可能简单地获取知识而不提高能力(那样他只是死记硬背,更像一个计算机的磁盘。另外,死记硬背的东西也不能被称为知识,因为知识要求理解和应用),同时提高能力不可能凭空获得,其必要过程就是获取知识。两者间的联系不仅必然,而且显然,即学习者的根本目标是提高能力,其间知识的获取是一必要步骤;如果知识的获取不充分,能力的提高必然不完全。
。更进一步,能力可以分为两类;在一般性能力之外还有一种,可称为重构性能力。尽管一般性能力更容易被观察和检测,但重构性能力是更基本的。正是重构性能力与学习一一对应,如果没有重构,学习就变得几乎不可能。在本教程中,更加注重的就是对于重构性能力的培养和训练。一般性能力可能由于与记忆力相混淆而导致误测,而重构性能力则不太可能被混淆。具体来说,我们遵循“模仿中有创新”的原则,要求学习者在学习过程中通过创新活动而达到目标。
有关本教程的写法有必要在此做一说明,因为与众不同之处并不在标新立异,学习者使用本教程的方法也应该有所不同,如:
(1)路口和检测点。路口和检测点是本教程的最大与众不同之处。在路口处,学习者可以根据自己的情况(爱好)选择阅读教程中的不同部分,当然也可以把不同分叉的内容都读一遍。路口的意图在于向学习者指出不同的思路,如果它能帮助学习者开阔眼界,养成容纳发散性思维的习惯,那么其任务就基本完成了。检测点是本教程构思的核心之一。为了防止“消化不良”,急于求成,并且督促学习者实践,学习者完成检测点所交给的任务是十分必要的。对于不甚仔细认真的学习者它可以起到帮助检查的作用,对于学习速度偏快的学习者可以起到稳定节奏的作用。
(2)注和CAI。为了行文流畅以及让学习者把注意力集中在关键的问题上,凡属于细枝末节,或可能超出课程范围的内容都放在注之中(注的内容一般都属于课程之内,但也有超出课程的)。学习者在刚接触这一风格时可能不太适应,而且频繁地翻阅注解也确实不方便,为此我们设计了与本教程配套的CAI软件;在该软件中,查阅注解是相当方便的。
(3)TOtheteacher和Tothestudent。这两个写法源于L.G.Alexander的《新概念英语》,正是该书在某些方面给予本书作者相当的启发。作者也曾考虑过不采用英文,但因为未能找到一个既清晰简明又能准确表达原意的译法而作罢。
(4)其他参考书。原则上,鼓励学习者去使用任何一本合理的参考书,但作者不希望学习者在较早阶段为此化费太多时间,原因很简单:如果学习者在其他参考书上发现只能用死记硬背来学习,那么他在汇编这门课程中改掉坏习惯就要比学会正确的好习惯更困难,更耗费精力和时间。
本书共18章。第1章介绍汇编语言中数的表示及PC机的体系结构;第2章介绍Debug工具的使用;第3章介绍了汇编程序的格式、上机调试方法;第4、5章介绍汇编语言中数据的定义与程序的组织结构:第6、7章介绍利用汇编语言编写屏幕显示处理的各种方法;第8章介绍字符串处理的五条指令:第9、10章介绍汇编语言中的算术运算;第11章介绍汇编语言中对多重循环的处理;第12章介绍用汇编语言实现在屏幕上作图方法;第13章介绍有关打印机的操作;第14章介绍对表的查询与排序;第15章介绍汇编语言中的伪操作指令;第16章介绍磁盘与DOS的文件系统以及相应的编程方法;第17章介绍汇编语言中的参数传递及汇编语言与高级语言之间相互调用时的参数传递;第18章介绍常用的BIOS中断及端口编程。书中提供了许多注释、附图、程序示例及思考题,每章的后面均有习题,以方便读者复习,巩固学习效果。
本书的第1、2、3、4、8、13、14章由张增年编写,第5、6、7、9、10、12、15、16、17章由铁新城编写,第11、18章由杨爱民编写,刘玉英编写、整理了附录部分,并参加了部分文稿的录入与校对工作。铁新城负责全书的组织与定稿。
作者首先要感谢浙江万里学院将本书列入浙江万里学院教材建设基金资助计划,感谢湛江师范学院领导给予的关心和鼓励。作者还要感谢安嘉翔、乔立恭教授。因为构成支撑本书的理论中有一部分来源于他们近年来的一系列研究成果。
限于时间仓促,差错遗漏在所难免,恳请读者指正。如果需要与本书配套的CAI软件,可与作者联系,发E-mail至zzn@zwu.edu.cn中即可。