这本书的推荐星级是:5星。毕竟是经典书籍,没什么好说的。
就汇编本身而言,在编写高效率程序以及对程序的优化,调试,工程的逆向都是一门基础;就理论上的操作系统而言,汇编让你了解CPU,了解计算机的体系结构,它是阅读操作系统源码的前提,这也是《80X86汇编语言程序设计教程》做得比较好的一点,它对386的保护方式下的编程写得比较详实,读完整本书,会发现这学的不仅仅是汇编语言,还有CPU的体系架构,它让你基本猜测得到在编写基于80386CPU的操作系统时,大概要做一些什么事情。
阅读前,我选过几本书:王爽的《汇编语言》、《80x86汇编语言程序设计教程》与《IBM-PC汇编语言程序设计》,第一本书初步过了一下,太简单,直接丢弃,而第三本书偏向硬件的直接操作,目测是比较多,我估计会比较乏味,而《80x86汇编语言程序设计教程》从8086讲起,后面的80386将涉及到现代CPU的工作模式,这个成为了我选择它的原因。
接下来说一下学了它你能了解到些什么:
1) 你能了解计算机各硬件资源在内存上是怎么组织的
2) 你能了解什么是所谓的BIOS
3) 你能绕过操作系统与BIOS直接对硬件进行操作,如显卡
4) 你能从CPU的角度去了解计算机怎么管理资源,怎么切换任务,怎么变换特权级,怎么进行异常/中断处理,这些都由代码体现得淋淋尽致
5) 你能了解调试模式,现在调试工具的所谓单步,运行到返回,硬件断点到底是怎么回事
6) 你能了解逻辑地址到线性地址再到物理地址的整个变换流程,这是操作系统必讲的东西
关于这本书该怎么读,有几点建议:
1) 8086章节你必须重点了解8086指令,包括它们做了什么,因为386指令集是兼容它们的
2) 8086章节要特别注意中断与I/O管理章节,这个是学8086除上一点外对学386最重要的一点
3) 8086章节中对汇编语言的开发,如什么高级汇编、模块设计之类,不要深究,现在基本不用汇编语言,这种东西到时候用的时候再查一样,否则不用,学了也会忘
4) 80386是重点中的重点,每个章节都很重要,不要放过任何一个测试实例,一定要亲自测试,并且弄懂它的每一条语句
5) 80486和Pentium的相关介绍比较少,其实这些处理器都是很过时的东西了,不要去纠结基于任何一个具体处理器上的细节问题,只要了解
6) 80486有两个重点,一个是片上高速缓存Cache,一个是调试技术完全移到了这个章节
须提醒一下,这本书也有点缺陷,这也算是需要注意的几个地方:
1) 作者重理论而轻实践,这一点在他不具体在编译测试环境搭建上做说明就可以看出来,这一点特别的坑人,我目前没找到好的调试方法,在虚拟机根本没法用调试器调试模式切换,除非自己在代码中编写调试的相关内容(在学完调试寄存器相关内容时,你才能有能力去在代码中自行单步,而学到那,整本书基本都已经完结了)
2) 我用的RadASM与vmware+DOS7.1来搭建测试环境,作者使用的是TASM,所以语法上有些不同,最典型的是计算段长度,我在笔记中一直认为是作者逻辑错误。
3) 原书在理论阐述上面几乎无错,我想即使有点小错误也许我这水平也挑不出来。但是有时也讲述得不够详尽,如控制转移时对CPL、DPL、RPL这3者之间的关系,这些不足必须通过源代码来弥补
4) 源代码有错误,我不了解TASM,有些可能是TASM与MASM的差异而不是错误,而有的确实是逻辑错误。另外,还有些功能无法正确测试,可能是我测试环境搭建问题,也有可能是现在的酷睿处理器与8086和80386这些老古董有了差异。
5) 最后,毕竟是一本十多年的老书了,对具体处理器的特性介绍方面其实有点过时,所以在最后两章:80486与Pentium系统的介绍上,除了调试技术,像Cache技术、流水线技术和程序优化技术做一些概念性了解就够了,一切基于Pentium的具体细节都可能在现行使用的CPU不再有效。