|
|
楼主 |
发表于 2026-3-15 20:31:00
|
显示全部楼层
感谢指正,看得出是认真学习的,值得表扬。身为作者还是很开心的。现就有关问题回复如下。
一、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,确实存在。 |
|