其实是本写操作系统的书
没想到写长评的人如此之少。
我是买的二手,很便宜,现在书可是越来越贵了,也只能买买二手。书里后半部分基本没有笔记,可能原主看一半就弃了吧,正好我把半后部分给读完,完美。我是读完王爽老师的《汇编语言》直接读这本书的,于是此书前半部分,我基本是直接略过了,从第10章直接入手,期间读到第13章,又回头读了第8 章的些许内容。
时间过去了11天,目前第14章才读了一半,惭愧。
王爽老师的书用的是masm,而此书用的是nasm。为了那么点区别,花费时间去读前9章实为不值。当然前提是王爽老师的书有认真的学好。而中间的过渡就很重要了。不过masm和nasm具体差别也不大,我回头读了一下第8章的头部信息和段,做了下笔记,基本后面的程序都能读懂了。
以上是我因为nasm和masm区别所做的笔记。
读书的过程真是半苦半乐,我就半勤奋半慵懒的读着,10几天也没把这半本书读完。不过本书说实话,应该算是一本操作系统前置,我看了一眼《Orange's》,发现目录和本书后半部分差别不大。但可能读完此书要搞操作系统还需学下C,惭愧,C忘光了。我不是从事计算机行业的,就是图个兴趣,所以C忘光了到时又得从头学,不过之前学过,感觉也不是太难。
本书写书的方式很遵从知识屏蔽,所以你会发现各章代码的内容基本差不多,但却是在慢慢扩充的,讲到啥,就把啥填上。所以前面的知识没学好,后面看不懂很正常。好处是前面学好了,后面一眼就通了。以致于我后面翻看得很快,不过慢就是快,我还是往回翻,准备把代码细细啃一遍才是王道。
本书很好,不要迷信什么《手册》之类的,或者什么经典。你去知乎,很多人只会给你推一些经典之书,然后你翻了两页就看不下去了。再说了,本书写得如此之好,我都有些翻不下去,别说那种大部头了,直接失去信心。不过看本书的过程中,我也用过《手册》,既然叫《手册》,本意就是用来查阅的。而且我认真看了下《手册》,觉得并不适合学习,用来查阅一些细节却再好不过了。
最后,求自己把本书快快看完吧,想开始轻松学C。
现在是2020年5月14日,整本书快读完了,第17章,最后涉及中断的知识,又老老实实回头把第9章读了,唉
所以基本上,如果学了王爽老师的 《汇编语言》,本书要读的章节有
环境搭建篇
Bochs安装手册(光盘内容)
VirtualBox安装手册(光盘内容)
第3章
第4章
NASM学习篇
6.10 NASM编译器和$和$$标记
8.2 用户程序结构
32位保护模式
第3部分全部内容
其中10.2稍微看一眼就行,写得不深入,只是稍微介绍,但在本书里,并不是很重要,不必纠结
期间遇到硬盘读取和IO访问的可以回头读读8.3
遇到字符串显示的回头读读8.4
第17章回头看第9章中断
纠错内容
(此处只是提示疑问,不一定代表就是我正确)
-----------------------------------------------------------------------------
第13章的源代码c13_core.asm中,第112行
mov ecx,1920
1920可能应该为960
--------------------------------------------------------------------------------
第272页,D位(或者叫B位)和L位对LDT描述符没有意义,固定为0
此处与代码不符
第14章的源代码c14_core.asm中,第678行
mov ecx,0x00408200
按该代码,D/B位为1,可书中又说固定为0
LDT和LSS 属于系统段描述符
在《手册》中查到上图
可看到D/B位为灰色,表示没有任何意义
而L位其实是留给64位使用的,固定为0
而后查阅了64位的内容,发现64位处理器也没把D/B位和L位使用上,都是置为0
总结:
D/B位和L位对于系统段描述符(LDT和TSS)正常情况都应固定为0
不过D/B位没有任何意义,所以就算置为1也应该影响不大,而L位固定为0
因此
应该是作者代码写错了
mov ecx,0x00408200
应代码改为
mov ecx,0x00008200
(但不改也没任何关系)
--------------------------------------------------------------------------------
第17章 代码 c17_mbr.asm 第126行,这句话可能是多余的
--------------------------------------------------------------------------------
第17章 代码 c17_core.asm 第8行
flat_4gb_data_seg_sel equ 0x0018
可能应该是
flat_4gb_data_seg_sel equ 0x0010
并且,这个常量是多余的,整段代码中没用使用过
--------------------------------------------------------------------------------