找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 5005|回复: 7

《x86汇编语言:从实模式到保护模式》第2版第一印勘误

[复制链接]

620

主题

336

回帖

1057

积分

管理员

积分
1057
发表于 2024-11-30 12:47:37 | 显示全部楼层 |阅读模式
1,检测点5.2的第1题有误(有三条指令缺少长度指示符“byte"),应为
  1. mov ax, 0xb800
  2. mov ds, ax
  3. mov byte [0x00], 'a'
  4. mov byte [0x02], 's'
  5. mov byte [0x04], 'm'
  6. jmp $
  7. times 510-($-$$) db 0
  8. db 0x55, 0xaa
复制代码

0

主题

4

回帖

14

积分

新手上路

积分
14
发表于 2026-1-27 10:56:18 | 显示全部楼层
老师第二版P68的讲显存映射的RAM是B8000到BFFFF,也就是段地址B800,偏移地址0000~FFFF是不是错了?应为0000~7FFF吧

620

主题

336

回帖

1057

积分

管理员

积分
1057
 楼主| 发表于 2026-1-27 11:03:45 | 显示全部楼层
jiejinzhenli 发表于 2026-1-27 10:56
老师第二版P68的讲显存映射的RAM是B8000到BFFFF,也就是段地址B800,偏移地址0000~FFFF是不是错了?应为0000 ...

这个取决于显示模式,比如80*25或者40*25等等。不同的显示模式每行字符数和行数不同,需要的显存大小也不同。

0

主题

14

回帖

44

积分

新手上路

积分
44
发表于 2026-1-29 17:19:39 来自手机 | 显示全部楼层
李老师很认真。

0

主题

4

回帖

14

积分

新手上路

积分
14
发表于 2026-3-15 10:56:58 | 显示全部楼层
刚刚学完!感觉收获很大!

0

主题

4

回帖

14

积分

新手上路

积分
14
发表于 2026-3-15 13:48:46 | 显示全部楼层
刚刚学完整本书,整理出来了书本第二版可能的错误:
一、P261图中初始栈范围不严谨,也可能是没说清楚。应为【7bff~6bff)。   (可被修改的字节范围,左闭右开)
二、源码瑕疵:没有说明NASM定义段没有align子句的时候默认段4字节对齐。这对读者计算断点调试程序有影响。
三、P290最后一行“1号描述符”的表述不严谨,若参照书中P237第5行,认为索引号就是描述符号的话,会有误。
四、P322 两个错误:使用的应该是15章的mbr而不是13章;修改15-3代码应为call far......作者其实页提供了c16_appd的源码,帮读者从c15_app.asm(15-3)改好了。
五、P291第16行选择子不是0x0008,应为0x0010?
六、P322,应该使用的是15章的mbr,而不是13章,打印错误?
七、源码c16_core.asm中的797行的mov es,ecx被注释掉了,但是却没有再次编译更新,我是再次编译后发现原来的断点无法使用而发现的,不影响程序执行,但是影响断点设置。算一个坑吧。
八、源码c16_core.asm694行 or cx,0000_0000_0000_0010   作者末尾没有加B表示是二进制,被错解为10。最后会导致登记到TCB的2级栈的选择子出错,应是0x36,出错为0x3e。同理源码c17_core.asm784行、c18_core.asm829行、c19_core.asm1063行出现同样错误。但因为没有使用这个栈,程序运行不会出错。
九、P337打印有误:“全程”应为“例程”。
十、第17章,感觉应该强调一下调用门切换栈的特性和硬件利用TSS恢复现场的特性相结合的方式实现任务切换。我第一遍看根本想不到。
十一、源码c18_core.asm第982行注释错误,应该是20个。
十二、P374打印错误。应该是从图19-12看出。
十三、P398 第19章附近,源码中运用了NASM提供的依附标号(点.开头)但书中没有说明,相同的标号同时出现,会对读者造成困惑。
十四、P405最后一段,提到了和前一章不同,其实是相同的。19,18,17,16章这里的代码都是相同的,应该说和15章的代码不同。
十五、P408第4行,作者写错了。PDT的线性地址应该是0xfffff000 。
十六、源码c20_mbr.asm第40行注释错误。老师写错了,应是数据段,而不是代码段。
十七、源码c20_core.asm第1005行,为何这条指令没有编译?这不会导致程序出错。
十八、P427,打印错误,pushfq 应为 pushfd。

620

主题

336

回帖

1057

积分

管理员

积分
1057
 楼主| 发表于 2026-3-15 20:31:00 | 显示全部楼层
jiejinzhenli 发表于 2026-3-15 13:48
刚刚学完整本书,整理出来了书本第二版可能的错误:
一、P261图中初始栈范围不严谨,也可能是没说清楚。应 ...

感谢指正,看得出是认真学习的,值得表扬。身为作者还是很开心的。现就有关问题回复如下。

一、P261图中初始栈范围不严谨,也可能是没说清楚。应为【7bff~6bff)。   (可被修改的字节范围,左闭右开)
批注:图中标注的是段之间的”界线“,比如主引导程序和内核初始栈以7C00为界。你指出的实际地址范围是正确的。

二、源码瑕疵:没有说明NASM定义段没有align子句的时候默认段4字节对齐。这对读者计算断点调试程序有影响。
批注:确实有此问题。

三、P290最后一行“1号描述符”的表述不严谨,若参照书中P237第5行,认为索引号就是描述符号的话,会有误。
批注:索引号和几号描述符是从0开始的。P.237未找到你描述的第5行。

四、P322 两个错误:使用的应该是15章的mbr而不是13章;修改15-3代码应为call far......作者其实页提供了c16_appd的源码,帮读者从c15_app.asm(15-3)改好了。
批注:确有上述问题,而且第2个小问题早就发现但未来得及修正。

五、P291第16行选择子不是0x0008,应为0x0010?
批注:未找到此位置。你说的好象是P.292但没有问题。

六、P322,应该使用的是15章的mbr,而不是13章,打印错误?
批注:未找到P.322中的错误,你说的是P.323吧。

七、源码c16_core.asm中的797行的mov es,ecx被注释掉了,但是却没有再次编译更新,我是再次编译后发现原来的断点无法使用而发现的,不影响程序执行,但是影响断点设置。算一个坑吧。
批注:未在c16_core.asm中找到此行。

八、源码c16_core.asm694行 or cx,0000_0000_0000_0010   作者末尾没有加B表示是二进制,被错解为10。最后会导致登记到TCB的2级栈的选择子出错,应是0x36,出错为0x3e。同理源码c17_core.asm784行、c18_core.asm829行、c19_core.asm1063行出现同样错误。但因为没有使用这个栈,程序运行不会出错。
批注:确有这些问题。感谢指正。

九、P337打印有误:“全程”应为“例程”。
批注:未找到此处。

十、第17章,感觉应该强调一下调用门切换栈的特性和硬件利用TSS恢复现场的特性相结合的方式实现任务切换。我第一遍看根本想不到。
批注:需要进一步具体说明。没太明白。

十一、源码c18_core.asm第982行注释错误,应该是20个。
批注:是的。

十二、P374打印错误。应该是从图19-12看出。
批注:未找到此处。

十三、P398 第19章附近,源码中运用了NASM提供的依附标号(点.开头)但书中没有说明,相同的标号同时出现,会对读者造成困惑。
批注:很可能存在此问题。此事在视频课程里讲过,可能忘了补充在纸质书上。

十四、P405最后一段,提到了和前一章不同,其实是相同的。19,18,17,16章这里的代码都是相同的,应该说和15章的代码不同。
批注:未找到此处。

十五、P408第4行,作者写错了。PDT的线性地址应该是0xfffff000 。
批注:这个问题在P.409。问题确实存在。

十六、源码c20_mbr.asm第40行注释错误。老师写错了,应是数据段,而不是代码段。
批注:问题确实存在。当然复制粘贴时未修改未检查。

十七、源码c20_core.asm第1005行,为何这条指令没有编译?这不会导致程序出错。
注:这一行是
mov word [tss + 102], 103          ;没有I/O许可位图部分
未被注释掉,是正确编译的。


十八、P427,打印错误,pushfq 应为 pushfd。
批注:问题在P.428,确实存在。

0

主题

4

回帖

14

积分

新手上路

积分
14
发表于 2026-3-19 21:04:59 | 显示全部楼层
站长 发表于 2026-3-15 20:31
感谢指正,看得出是认真学习的,值得表扬。身为作者还是很开心的。现就有关问题回复如下。

一、P261图中 ...

感谢老师认真回复!可能我的书和源码的版本较旧,导致一些页码、源码不同。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2026-3-30 12:39 , Processed in 0.303146 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表