进入分页保护模式失败,读取后面的代码出错!

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

...全文
228 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yrj 2006-08-29
  • 打赏
  • 举报
回复
谢谢楼上的,唉!我看Intel的体系结构还是没能全面啊,我现在可以了。谢谢,非常感谢。
Areslee 2006-08-29
  • 打赏
  • 举报
回复
确认
要使用4M页需要把CR4的BIT4置1先
Areslee 2006-08-29
  • 打赏
  • 举报
回复
要使用4M页面好像要设置CR2先,我查查去
WYlslrt 2006-08-29
  • 打赏
  • 举报
回复
进入分页模式时一定要注意虚拟地址和现行地址保持一致。
而且要注意特权级。
还有你的程序运行在物理地址什么地方,不说出来肯定是不行的。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧