Lynch2007 发表于 2009-08-06 17:57

段描述符的初始化<自己动手写操作系统>

书中第三章"保护模式"的程序pmtest1.asm
为什么没有初始化GDT中显存段的描述符呢?而是直接使用了
mov ax, selectorvideo
mov gs, ax
而之后的程序pmtest2.asm又添加了数据段和32位栈段, 它们的描述符都被初始化了, 这是为什么?

summersunboy 发表于 2009-10-23 10:49

我是这么理解的,不知对不对:
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 编辑 ]

emperor 发表于 2009-10-23 23:11

对于这本书,俺无语。。。。

mik 发表于 2009-10-23 23:23

人家是对的。

当然,是你没看懂,或者没留意而已

prolj 发表于 2009-10-23 23:39

我想,那样的“垃圾”书,我这样系统编程烂的一塌糊涂的人是写不出来的。
页: [1]
查看完整版本: 段描述符的初始化<自己动手写操作系统>