段描述符的初始化<自己动手写操作系统>
书中第三章"保护模式"的程序pmtest1.asm为什么没有初始化GDT中显存段的描述符呢?而是直接使用了
mov ax, selectorvideo
mov gs, ax
而之后的程序pmtest2.asm又添加了数据段和32位栈段, 它们的描述符都被初始化了, 这是为什么? 我是这么理解的,不知对不对:
LABEL_DESC_VIDEO:Descriptor 0B8000h,0ffffh,DA_DRW
段基址 段界限 属性都在Descriptor宏中定义过了不需要初始化。
LABEL_DESC_CODE32:Descriptor 0,SegCode32Len-1,DA_C+DA_32
其段基址为0,即没有初始化,所以需要初始化
; 初始化 32 位代码段描述符
xor eax, eax
mov ax, cs
shl eax, 4
add eax, LABEL_SEG_CODE32
mov word , ax
shr eax, 16
mov byte , al
mov byte , ah
这一段的作用也就是填充 32 位代码段描述符LABEL_DESC_CODE32的段基址(第2,3,4,7这四个字节)
[ 本帖最后由 summersunboy 于 2009-10-23 10:51 编辑 ] 对于这本书,俺无语。。。。 人家是对的。
当然,是你没看懂,或者没留意而已 我想,那样的“垃圾”书,我这样系统编程烂的一塌糊涂的人是写不出来的。
页:
[1]