进入分页保护模式失败,读取后面的代码出错!
yrj 2006-08-29 02:13:46 我使用了大页的分页方式,每页4M 字节。现在我已经进入段式保护模式了,想进一步进入页式保护模式失败了。我用了2个段,GDT中索引1是代码段,索引2是数据段,都是起始地址为0,大小为4G。我使用bochs做虚拟机的。代码如下:
movw $0x10,%ax #赋值ds段寄存器
movw %ax,%ds
movl $0x100000,%esi #我把页目录表放在1M内存的位置
movl $1024,%ecx #1024个页目录项
movl $0,%ebx #第一个页目录项中所所指向的物理起始地址,就是0
NextPageDir:
movl $0x0081,%eax #Page present=1 ,Page size = 1(4M)
orl %ebx,%eax #组织新的页目录项的内容
movl %eax,(%esi) #设置页目录项
addl $4,%esi #下一个页目录项
addl $0x400000,%ebx #下一个页目录项的所指向的物理起始地址
decl %ecx
jnz NextPageDir
movl $0x100000,%eax #页目录表物理地址+(PCD = 0)+(PWT =0 )
movl %eax,%cr3
movl %cr0,%eax
orl $0x80000000,%eax #PG = 1
movl %eax,%cr0 #程序在执行完这个后,就读取下一条指令出错了,读出FF来了。
nop
nop
nop