实地址模式下存储器的寻址方式
实地址模式下存储器的寻址方式
存储单元的地址和内容
主存储器(内存)存放了计算机要处理的各种信息,如机器代码程序、输入数据和运算结果等。
存储器编址
存储器中 以字节为基本单位存储数据 的单元,称为字节存储单元。字节单元的地址采用线性编制。即从0到1…存储器的编址(编号)称为字节地址。存储器中的信息的读出和写入通常通过地址进行操作。
若存储器的地址宽度为n位(n个二进制位),则说明存储器有2n个字节地址,即有2n个字节存储单元,该存储器的容量为2n个字节。
单元地址
存储单元的类型有字节单元、字单元和双字单元。字单元由两个连续字节组成,双字单元由两个连续的字组成。
字节单元的地址是字节地址,字单元的地址是连续两个字节地址中较低的字节地址。双字单元的地址是连续四个字节地址中最低的字节地址。根据使用数据类型不同,一个地址既可以是字节地址,也可以是字地址或双字地址。
字数据存储方式
按“低对低,高对高”的存储原则,字单元中的高位数据放在高地址的字节单元,低位数据放在低地址的字节单元。双字同理。
存储单元内容
存储单元的内容指的是该单元存放的二进制数据。对地址M,(M)表示地址为M的存储单元的内容。
内容在读出后单元内容保持不变,还可多次读出。若写入,则原先内容被覆盖而消失。
存储器的分段寻址
存储器的寻址机制是程序员寻找存储器中程序指令代码或操作数据的方式。PC系列存储器采用分段寻址的机制。
分段寻址原因
允许一个程序可以使用多个代码段、数据段和堆栈段。方便将代码、数据和堆栈信息放在不同的存储区,可以修改段寄存器内容,实现同一程序的再定位(程序动态的放到主存储器的不同地方并正确执行)。
分段寻址计算方法
存储器内的每个单元的物理地址PA(Physical Address),用“段寄存器中的地址:段内偏移地址”(逻辑地址)来表达。
段基址即段地址SA(Segment Address),是相应段的起始地址,指的是段寄存器中存储的内容左移4位后表示的地址。
段内偏移地址即偏移地址或有效地址EA(Effective Address),是该单元物理地址PA到段地址SA的距离(字节数),即EA = PA - SA 。
为了可以用16位寄存器来寻址实际上的20位的物理地址,将EA作为PA的低16位,段寄存器的内容作为PA的高16位,它们相加形成的20位结果,就是实际上的20位物理地址。即:
SA(段地址) = 段寄存器内容 × 24
PA(物理地址) = SA(段基址) + EA(有效地址)= 段寄存器内容 × 24 + EA
因而十六进制表示20位的段基址最低位为0。
存储器的分段结构不是物理结构,而是逻辑结构。同一PA的存储单元,可以有不同的SA和不同的EA(唯一的物理地址对应不同的逻辑地址),但当SA确定后,则存储单元的EA唯一。
段的分配方式
在传统方式或实地址模式下,每一个存储段(段区)的大小最大为64KB(选择一个段地址,使得其有效地址范围为0 ~ FFFF),最小为16B(段地址为FFFF0,有效地址范围为0 ~ F)。初始段地址一般能被16除尽,称为节地址段边界地址。按照段边界地址划分1MB的主存空间,最多有216个存储段(即段寄存器内为0000 ~ FFFF,对应每个段的有效地址范围为 0 ~ F ),最少有24个存储段(即段寄存器内为0000 ~ F000,对应每个段的有效地址范围为 0 ~ FFFF)。
通常各段在存储器中的分配是由操作系统负责。每个段可独立占用64KB的存储区。
但实际上一般根据程序或数据的大小来占用存储区。即几个段可以放在存储器内的一个64KB的存储区内,称为段重叠。也就是指每个段的大小根据实际情况分配,不一定非要独占64KB的最大段空间。但不允许某个存储单元既存储代码,又存储数据。