pmtest1.asm from 自动手写操作系统 粗略解释

来源:互联网 发布:品牌网络推广渠道 编辑:程序博客网 时间:2024/05/18 00:46

第一章其实还是很好理解的,配置相关寄存器,使用10号中断显示helloworld,到了第三章一开始就讲了一堆没法让人理解的东西,着实让人崩溃,看了很多博客,两天才大概明白是怎么回事!

首先得有8086的相关知识,王爽那本书。

然后就是为啥实模式跳到保护模式会有gdt这东西。

因为在8086下,
段(16位)×16+偏移(16位)=20位,所以2^20=1048576B=1024KB=1mb
最多只能访问1mb的空间,很少,然后他想了一个办法,把更大的32位的段基址放在一个表中,叫做gdt(globe descriptor table),这个表里头可以存放显示操作的段,存放数据data的段,存放显存地址的段,各种段,就这样一折腾使得最大的寻址空间达到了2^32=4gb的空间。

但是cpu并不知道你这个表在哪里,你得使用lgdt命令来把一个结构为32位表头段地址+16位表界限加载到gdtr这个寄存基中来告诉cpu你的表在哪里。

最后就是选择子了,其实也好理解,因为并不是表里的每一个段都是要执行的,就像上面说的

存放显示操作的段
存放数据的段
存放显存地址的段

我们只要执行存放显示操作的段,所以就有了选择子(selector),选择子实际是一个偏移来的,在这里不多讲,有了选择子就可以选择性的执行表中的某一个任务啦。

http://www.360doc.com/content/11/0409/22/6580811_108479867.shtml
这个详细解释了保护模式下的寻址还有代码的解释

http://blog.csdn.net/yeruby/article/details/39718119
这个详细了几个专业术语,gdt,gdtr,ldt,ldtr

看完上面两个就差不多懂了!

0 0