《80X86汇编语言程序设计教程》二十五 结语(读后感:这本书怎么样)

  这本书的推荐星级是: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不再有效。

时间: 2024-10-11 11:10:34

《80X86汇编语言程序设计教程》二十五 结语(读后感:这本书怎么样)的相关文章

《80X86汇编语言程序设计教程》十五 任务切换实例

1.  理论知识参考"<80X86汇编语言程序设计教程>十二 任务状态段.控制门和控制转移",演示内容:直接通过TSS段的任务切换.通过任务门的任务切换.任务内特权级的变换及参数传递.实现的逻辑功能是:从Temp任务切换到Demo任务以后显示原任务(Temp)的挂起点EIP的值. 2.  源代码 "386scd.asm"不再贴上来.参考"<80X86汇编语言程序设计教程>十三 任务内无特权级变换转移实例",演示代码如下:

《80X86汇编语言程序设计教程》十九 操作系统类指令与输入输出保护

1.  通常只在操作系统代码中使用,80386支持4个特权等级,操作系统指令也可分3种:实模式和任何特权级下可执行指令.实模式及特权级0下可执行的指令和仅在保护模式下执行的指令. 1)  实模式和任何特权级下可执行的指令 a)存储全局和中断描述符表寄存器指令 GDT与IDT整个系统各只有一张,它们的定位信息分别保存在GDTR与IDTR中,这两个寄存器的值可以被保存.须注意,LDT表示任务私有,存储LDTR值的指令不属于这一类. i)存储全局描述符表寄存器指令:SGDT  DST DST是48位(

《80X86汇编语言程序设计教程》十 实模式与保护模式的切换实例

1.  再次声明,需要纯DOS系统才能看到满意测试效果.内容是演示实模式与保护模式切换实例,实现功能是16进制显示从110000H开始的256个字节的值 2.  源代码如下: 1 ;功能:演示实模式与保护模式的切换,16进制显示从110000H开始的256个字节的值 2 ;16位偏移的段间直接转移指令的宏定义,这是一个JMP指令到所描述的地址 3 4 JUMP macro selector,offsetv 5 db 0eah ;操作码 6 dw offsetv ;16位偏移 7 dw selec

《80X86汇编语言程序设计教程》二十四 进入与离开V86模式实例

1.  这是我这本书调得最失败的一个实例,而且问题都是超出了这本书能教会我的范畴.作者对调试环境几乎只字不提,这让我有点费解.原作者使用TASM的编译代码,而我使用的MASM加虚拟机进行测试,不知道这两样东西哪里有问题还是源代码要做哪些修正.理论知识参考"<80X86汇编语言程序设计教程>二十二 分页管理机制与虚拟8086模式". 2.  进入和离开V86模式实例:各2种方式进入和离开V86模式.V86模式下8086程序调用实模式软中断处理程序.逻辑功能:以驻留方式结束程序

《80X86汇编语言程序设计教程》二十三 分页管理机制实例

1.  理论知识参考"<80X86汇编语言程序设计教程>二十二 分页管理机制与虚拟8086模式".演示分页机制实例:初始化页目录表和部分页表:启用分页管理机制:关闭分页管理机制等.逻辑功能:在屏幕上显示一条表示已启用分页管理机制的提示信息.大体步骤是:在实模式下拷贝显示串程序的代码到预定义区域,转保护模式,初始化页目录和2个页表,开启分页机制,转入预定义区执行显示代码,然后关闭分页机制,重新回到实模式,程序终止. 2.  源代码 "386scd.asm"

《80X86汇编语言程序设计教程》十一 32位代码段和16位代码段切换实例

1.  演示32位代码段与16位代码段之间的切换.实现的功能是以十六进制和ASCII码字符两种形式显示从内存地址100000H开始的16个字节的内容. 2.  源代码如下: 1 ;DosTest.Asm 2 ;16位偏移的段间转移指令的宏定义 3 ;使用于16位段,用于跳转到32位目的段 4 ;注意:标号偏移必须在16位二进制符号数数能表示的范围之内 5 JUMP16 macro selector,offsetv 6 db 0eah ;操作码 7 dw offsetv ;16位偏移 8 dw s

Webpack入门教程二十五

119.输出HtmlWebpackPlugin.options中的内容,修改模板文件index.html,代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>webpack demo</

I学霸官方免费教程二十五:Java基础教程之枚举 enum

枚举 枚举简单的说就是将需要的常量值一个一个的列举出来,并封装成一个整体.语法格式:[public] enum 枚举名{ //值列表 }声明格式:枚举名 变量名:赋值格式:变量名 = 枚举名.值其中的列举的每个值要符合标识符命名规则,不可随意编写 实例: package enumdemo.simple; /**  * 创建枚举类型的Week 注意:这里创建的是枚举,即数据类型是enum,而不是类  * @author 学霸联盟 - 赵灿  */ public enum Week { // 列举出

Oracle Coherence中文教程二十五:Map管理操作触发器

Map管理操作触发器 Map触发补充标准的Oracle Coherence的能力,以提供高度自定义的缓存管理系统.例如,地图触发器可以防止非法交易,执行复杂安全授权或复杂的业务规则,提供透明的事件日志和审计,并收集统计数据修改.触发器的其他可能用途,包括限制行动,打击一个缓存,在应用程序重新部署时间发出. 例如,假设你有代码是与NamedCache工作,条目插入地图之前,你想改变一个条目的行为或内容.除了地图触发,而无需修改现有的代码,使你做出这种改变. 地图触发器也可以作为升级过程的一部分.除