日期:2014-05-16  浏览次数:20631 次

求助 linux0.01 boot.s
gdt:
.word 0,0,0,0 ; dummy

.word 0x07FF ; 8Mb - limit=2047 (2048*4096=8Mb)
.word 0x0000 ; base address=0
.word 0x9A00 ; code read/exec
.word 0x00C0 ; granularity=4096, 386

.word 0x07FF ; 8Mb - limit=2047 (2048*4096=8Mb)
.word 0x0000 ; base address=0
.word 0x9200 ; data read/write
.word 0x00C0 ; granularity=4096, 386



上面的ox07ff ox0000 ox9a00 ox00c0代表什么意思 这个是描述符的格式么 他指向内存的那个地址?谢谢了

------解决方案--------------------
linux0.11完全注释 书上不说了么,全局描述符,第一个是word 0,0,0,0不用,后两个分别是代码段,数据段描述符

描述符共64位:

代码段:0x00c0 9a00 0000 07ff
 段限长:0x7ff
 基地址:0x0000
 ....其他还有很多,好像是intel当年修修补补,把格式搞的有点乱 

数据段也类似
0x00c0 9200 0000 07ff

具体格式参考那书 4.3.4 段描述符


这些是386的保护模式下,段/页式内存管理的内容,看看这个
http://lwglucky.blog.51cto.com/1228348/338923

GDT可以被放在内存的任何位置,那么当程序员通过段寄存器来引用一个段描述符时,CPU必须知道GDT的入口,也就是基地址放在哪里,所以 Intel的设计者门提供了一个寄存器GDTR用来存放GDT的入口地址,程序员将GDT设定在内存中某个位置之后,可以通过LGDT指令将GDT的入口地址装入此积存器,从此以后,CPU就根据此积存器中的内容作为GDT的入口来访问GDT了。