windows游戏编程X86实模式和保护模式
2024-10-06 16:37:49
本系列文章由jadeshu编写,转载请注明出处。http://blog.csdn.net/jadeshu/article/details/22309359
作者:jadeshu 邮箱: jadeshu@qq.com 欢迎邮件交流
X86实模式下
在实模式下,寻址一个内存地址主要是使用段和偏移值,段值被存放在段寄存器中(如ds),并且段的长度被固定为64KB。段内偏移地址存放在任意一个可用于寻址的寄存器中(如si)。因此,根据段寄存器和偏移寄存器中的值,就可以算出实际指向的内存地址
X86 32位保护模式
在保护模式运行方式下,段的寄存器中存放不再是被寻址段的基地址,而是一个段描述符表(Segment Descriptor Table)中某一描述符项在表中的索引值。索引值指定的段描述符项中含有需要寻址的内存段的基地址、段的长度值和段的访问特权级别等信息。寻址的内存位置是由该段描述符项中指定的段基地址值与一个段内偏移值组合而成。段的长度可变,由描述符中的内容指定。可见,和实模式下的寻址相比,段寄存器值换成了段描述符表中相应段描述符的索引值以及段表选择位和特权级,称为段选择符(Segment Selector),但偏移值还是使用了原实模式下的概念。这样,在保护模式下寻址一个内存地址就需要比实模式下多一个环节,即需要使用段描述符表。这是由于在保护模式下访问一个内存段需要的信息比较多,而一个16位的段寄存器放不下这么多内容。
示意图如下图所示。注意,如果你不在一个段描述符中定义一个内存线性地址空间区域,那么该地址区域就完全不能被寻址,CPU将拒绝访问该地址区域。因而得到了保护,由此而得名
最新文章
- http参数的封装(后台接受参数的场景)
- svg学习(九)path
- js之数据类型
- Docker入门教程(九)10个镜像相关的API
- 解决:Ubuntu12.04下使用ping命令返回ping:icmp open socket: Operation not permitted的解决
- Qt实现桌面动态背景雪花飘落程序
- 工作总结:文件对话框的分类(C++)
- FC网络学习笔记02 -网络配置方法
- angularJS的controller之间如何正确的通信
- node-http-proxy修改响应结果
- 基于MDK的ARM-GCC开发环境建立及新唐M0的HID类设备的C++开发
- Gradle 载入中 Android 下一个.so档
- 将 ext_net 连接到 router - 每天5分钟玩转 OpenStack(145)
- 在CentOS 7中安装Jetty服务器
- springMVC框架核心方法调用源码解析
- RxJava2
- 【C++】如何接收函数return返回来的数组元素
- 2017年前小纪(有关http的一些缓存理论知识)
- 洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
- 【宣讲】德州科技职业学院宣讲关于IT领域趋势分析