1. 32页图3.4 代码段和数据段描述符的byte 5低4位是描述符的类型(TYPE),但是这个TYPE可以按位区分的更详细一点如下:
第3位 |
第2位 |
第1位 |
第0位 |
E(xecutable) |
数据段区分是否向下扩展 代码段区分是否一致码段 |
R/W |
A(ccess) |
可以参考36页中表3.1解释这4个位。
参考文献:Bob Neveln. Linux Assembly Language Programming. 2000
2. 126页图5.3中内存虚拟地址空间第二段地址应该是8049134h到804913Ch。
3. sconst.h 里面定义的P_STACKTOP和P_STACKBASE互相反了。栈顶应该是gs的位置,栈底是LDT_SELECTOR.
4. 191页第4行应该是inc指令而不是mov指令。
5. 第0xFF页中间数组keymap[]的大小应该是0x80*3,0x80是make code的范围。
6. 第259页代码第二行注释应该是r ctrl state。
7. 第294页图7.25中var1和var3反了,应该是var3先入栈, fmt跟在var1后面。
8. 第349页170行数组part_tbl大小为4(NR_PART_PER_DRIVE)就够了,没必要用64(NR_SUB_PER_DRIVE)个。因为PRIMARY里最多用4个,EXTENDED里最多用2个。
9. 第349页173行get_part_table第二个参数应该是0,而不是drive,因为不论哪个drive硬盘分区表都在第0个扇区上。
10. 405页第7行最后是解除阻塞,不是接触阻塞。