80386中的段寄存器

80386中的段寄存器让系统程序设计者选择内存组织形式的各种模型变得更灵活。设计者可能选择会选择一个应用程序不需要修改段寄存器的模型,这种情况下应用程序员就可以跳过这一节。

一般情况下,完整的程序由许多不同模块构成,每个模块都由指令和数据构成。然而,在程序执行时任意一个时刻,只有程序模块的子集是真正处于使用状态的。80386 架构通过提供支持直接访问当前模块环境的指令和数据的机制来利用好局部性原理,可按需访问其他段。

在任何给定的时刻,执行的80386程序可以立即访问六段存储器。段寄存器 CS、DS、SS、ES、FS 和 GS 用于标识这六个当前段。这些寄存器中的每一个都指定了一种特定类型的段,其特征在于图2-6所示的相关助记符("代码","数据"或"堆栈")。每个寄存器唯一地从构成程序的段中确定一个特定段,即以最高速度立即访问。

包含当前执行的指令序列的段称为当前代码段;它是通过CS寄存器指定的。80386 从此代码段获取所有指令,并将指令指针的内容用作偏移量。CS 由于分段控制-传输指令(例如,CALL 和 JMP)、中断和异常而隐式更改。

DS、ES、FS 和 GS 寄存器允许指定四个数据段,每个段可由当前执行的程序寻址。对四个独立数据区域的可访问性有助于程序有效地访问不同类型的数据结构;例如,一个数据段寄存器可以指向当前模块的数据结构,另一个可以指向更高级别模块的导出数据,另一个指向动态创建的数据结构,另一个指向与另一个任务共享的数据。数据段中的操作数通过直接在指令中指定其偏移量或通过通用寄存器间接指定来解决。

根据数据的结构(例如,数据被打包成一个或多个段的方式),程序可能需要访问四个以上的数据段。要访问其他段,可以在程序执行过程中在程序控制下更改 DS、ES、FS 和 GS 寄存器。这只需要程序在执行访问数据的指令之前执行指令以加载相应的段寄存器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值