当前位置: 技术问答>linux和unix
求助 linux0.01 boot.s
来源: 互联网 发布时间:2016-11-10
本文导语: 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 ....
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代表什么意思 这个是描述符的格式么 他指向内存的那个地址?谢谢了
.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了。
描述符共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了。