免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3414 | 回复: 4
打印 上一主题 下一主题

段描述符的初始化<自己动手写操作系统> [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-06 17:57 |只看该作者 |倒序浏览
书中第三章"保护模式"的程序pmtest1.asm
为什么没有初始化GDT中显存段的描述符呢?而是直接使用了
mov ax, selectorvideo
mov gs, ax
而之后的程序pmtest2.asm又添加了数据段和32位栈段, 它们的描述符都被初始化了, 这是为什么?

论坛徽章:
0
2 [报告]
发表于 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 [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 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-10-23 23:11 |只看该作者
对于这本书,俺无语。。。。

论坛徽章:
0
4 [报告]
发表于 2009-10-23 23:23 |只看该作者
人家是对的。

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

论坛徽章:
0
5 [报告]
发表于 2009-10-23 23:39 |只看该作者
我想,那样的“垃圾”书,我这样系统编程烂的一塌糊涂的人是写不出来的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP