4.5 段寄存器与内存管理

内存管理的定义

CPU 获取内存物理地址的方法,称为内存管理。

为方便程序员在汇编语言程序中表示操作数在内存单元中的保存位置,在程序中一般使用逻辑地址形式表示内存地址。计算机在执行程序时,将程序员提供的逻辑地址转换为物理地址。逻辑地址可以理解为一个占位符:程序中的数据需要一个内存位置保存,内存位置的取值只有在执行程序的时候才能确定。逻辑地址可以表示为:段基址:偏移地址。

进阶:物理地址空间

CPU地址线数量决定了可产生的最大物理地址。n 根地址线,可形成的最大物理地址是 2n-1。 所有可形成的物理地址的集合被称为物理地址空间,Intel 8086 有 20 根地址线,物理地址的范围是 0 到 FFFFF。Intel 80386有 32 根地址线,物理地址的范围是 0 到 FFFFFFFF。

回顾:实模式下的内存管理(分段管理)

分段:将内存空间划分为以段为单位的内存区域,计算机以段为单位来使用内存空间。实模式下,可以使用的最大物理内存空间是1MB;每个段最大为64KB;

为方便程序员表示内存地址,程序使用逻辑地址来表示内存位置。逻辑地址由段基址(16位,存放在段寄存器中)和偏移地址(16位)构成,表示为 段基址:偏移地址 形式。 一般段基址的取值是计算机管理的,是固定的,保存在段寄存器中。偏移地址可以由程序员根据需要指定。

实模式获取物理地址的方法: 程序中的 逻辑地址→物理地址 即: 物理地址=段基址×10H+偏移地址

程序在存储器中的映像

一是代码,代码是要执行的指令序列; 二是数据,数据是要处理加工的内容; 三是堆栈,堆栈是按“先进后出”规则存取的区域。

代码、数据和堆栈分别占用不同的存储器段,相应的段也就被称为代码段、数据段和堆栈段。其段基址分别在CS、DS、SS寄存器中。

一些常见的逻辑地址搭配:

  • CS:IP → 下一条要执行指令的逻辑地址;
  • SS:SP → 堆栈段栈顶逻辑地址;
  • SS:BP → 堆栈段中某个存储单元逻辑地址;
  • DS/FS/GS:偏移量 → 保存某个数据的逻辑地址;
© 2019 kmahyyg <16604643+kmahyyg@users.noreply.github.com>. All rights reserved.

results matching ""

    No results matching ""