内存分页问题

zssily 2007-06-08 12:36:22
我在学习操作系统,在起用内存分页管理时用如下代码:
mov eax, cr0
or eax,8000h
mov cr0,eax
我用虚拟PC执行是出错重启。
但我改为:
mov eax,cr0
or eax,8000h
push eax
inc eax
mov cr0, eax
mov eax,cr0
pop eax
mov cr0,eax
后能执行,只是不知是否已启动分页。
谁能告诉我为什么这样改后就可以执行,是运行环境的问题吗?改后是否启动了分页管理?
...全文
328 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghoto 2007-06-14
  • 打赏
  • 举报
回复
cr0是32位的, 位0是PE, 位31是PG
所以启用分页机制的代码应该是
mov eax, cr0
or eax, 80000001h
mov cr0, eax
combojiang 2007-06-10
  • 打赏
  • 举报
回复
push eax
mov eax,CR0
and eax,0fffeffffh
mov CR0,eax
pop eax
mengshijie_1981 2007-06-10
  • 打赏
  • 举报
回复
pe位是保护模式位,也是分段位,所以不能使用纯粹的分页机制,只能使用分段机制或者是段页式内存管理机制。
yasky1001 2007-06-10
  • 打赏
  • 举报
回复
分页必须在保护模式下,所以cr0=0x8001,末位的1是保护模式允许位.
zssily 2007-06-10
  • 打赏
  • 举报
回复
楼上说的应该是启动分页分段管理吧!
mengshijie_1981 2007-06-09
  • 打赏
  • 举报
回复
启用分页有这么干的吗?
mov eax,cr0
or eax,8000h

应该是:
mov eax,cr0
or eax,8001h

21,459

社区成员

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

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