Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96743
  • 博文数量: 17
  • 博客积分: 366
  • 博客等级: 一等列兵
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-16 16:31
文章分类

全部博文(17)

文章存档

2011年(17)

我的朋友

分类: Delphi

2011-06-30 10:37:46


系统寄存器

前面翻译的Intel微处理器第7版的相关章节里分类介绍了常用的寄存器和主要用途,它们共同组成了80X386系列微处理器的编程模型,所谓编程模型都是程序员编程可用的寄存器。其实除此之外还有一类寄存器,它们只能够在最高特权等级下被程序访问,因而通常应用在内核开发上。尤其是CRX的几个寄存器,读内核分页的相关资料时更是频繁出现。

中断描述符(IDTR):保存中断描述符表的地址。

全局描述符(GDTR):保存全局描述符的地址。

局部描述符(LDTR):保存当前正在运行程序的代码段、数据段和堆栈段的指针。

任务寄存器 (Task Register):保存当前执行任务的任务段(TSS)的地址。

调试寄存器 (Debug Register):用于在调试程序时设置断点等。

控制寄存器 (Control Register)CR0CR2,CR3:包含用于控制系统级操作(任务切换,分页)的状态标志和数据域。

模型专用寄存器(Model-Specific Registers):用于性能监控和机器体系结构检查等系统级操作。

分段与寄存器

在实地址模式下,微处理器使用20位的地址总线可以寻址1MB内存。80X8616位寄存器无法存放20位的地址。Intel的工程师们采用了分段的方法来解决这个问题。使用两个16位整数来表示地址,也被称为段-偏移地址,它包括16位段(存放在CSDSES或者SS)16位偏移值。

保护模式可以寻址4GB的内存。在保护模式下CSDSES寄存器不再是段的基地址,而是存放段描述符表,该表包含段地址,大小等信息。段描述符通常是一个存放在GDTR(全局描述符)中的64位值,从64位中不同的范围可以提取出基地址,界限等信息。

分页与寄存器

分页使一段程序可以映射到不同的内存区域,它可以将一部分未被使用的内容保存到磁盘上,从而给人一种内存“无限大”的错觉。

控制寄存器是与分页密切相关的一类寄存器,其中CR1是预留寄存器,CR2主要用于控制一些错误信息,而CR4仅仅能够用于pentium以上微处理器。最核心的与分页息息相关的两个寄存器是CR0CR1CR0的最左边几位中如果PG被设置为0则直接将线性地址转换成物理地址使用,否则通过分页机制处理线性地址。PE位被设置为1则以保护模式启动,否则为实模式启动。

CR3用于存放页目录的基地址或者根地址和PCDPWT位(仅486以上有效),当PCD被设置为1时将允许外部硬件控制二级缓存和高速缓存,PWT则启用外部缓存对页面透写与回写(1,0)。

在保护模式下,线性地址被分成三部分,页目录区(22-31),页表区(12-21),和内存页偏移地址(0-11)。

页表区控制指示在页目录中的位置(哪个个页表),然后按照页表和页表的偏移地址找到合适的内存。

阅读(2716) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~