段描述符的初始化<自己动手写操作系统>
书中第三章"保护模式"的程序pmtest1.asm
为什么没有初始化GDT中显存段的描述符呢?而是直接使用了
mov ax, selectorvideo
mov gs, ax
而之后的程序pmtest2.asm又添加了数据段和32位栈段, 它们的描述符都被初始化了, 这是为什么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我是这么理解的,不知对不对:
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 [LABEL_DESC_CODE32 + 2], ax
shr eax, 16
mov byte [LABEL_DESC_CODE32 + 4], al
mov byte [LABEL_DESC_CODE32 + 7], ah
这一段的作用也就是填充 32 位代码段描述符LABEL_DESC_CODE32的段基址(第2,3,4,7这四个字节)
[ 本帖最后由 summersunboy 于 2009-10-23 10:51 编辑 ]
对于这本书,俺无语。。。。
人家是对的。
当然,是你没看懂,或者没留意而已
我想,那样的“垃圾”书,我这样系统编程烂的一塌糊涂的人是写不出来的。