MENU

存储器的结构 | 汇编语言

February 26, 2019 • 我爱学习

    本篇文章主要详细讲解了存储器的组织结构,包括存储器构成,段基址和段基值,逻辑地址和物理地址等

一、存储器的组成

1.存储器由若干个存储单元构成,存储单元的数量就表示了存储器的数量。

2.每个存储器中存放着相同长度的二进制数,一个存储单元的长度一般为8位二进制数,即一个字节。

3.每个存储单元有一个唯一的编号——地址,
  8086CPU有20根地址线即它可以产生20位的地址码,他的存储器寻址能力为2^20,即一兆字节空间。

  而且为了书写方便在源程序中常用5位十六进制数或一个符号来表示一个存储单元的地址

4.任何两个相邻字节单元就构成一个字单元。
  一个字存储单元(WORD)的长度为16位二进制数,即两个字节。字单元的地址为两个字节单元中较小的字节单元的地址。

  一个16位长的数据存放规则是:
    所谓的“低对低,高对高”,即低八位存放在较低地址字节单元中,高八位存放在较高地址单元中 。

    例如,将数据3456H放在地址为09235H的字单元中时的存储分配:
    其中第八位为56,高八位为34。即低八位56存放在地址09235H中,高八位34存放在09236H中。

5.在定义一个地址时必须要指出是字节或者是字类型属性。


二、存储器的段结构

    由于8086CPU的可寻址空间为1MB,则需要提供20位长的地址码。但是,CPU内部的寄存器长度只有16位,意味着其能够访问的最大地址空间仅仅是2^16^即64KB。

1.8086CPU将1MB的存储空间划分为若干个分段,每个段的最大长度为64K(65536)个字节单元组成。
    在8086的汇编的源程序中,用户可以根据自己的需求来设定分段的个数、每个段的长度、还有用途。并且代码和数据可以存放在段内的任意单元中。

2.每个段的基址(段基址)必须是一个小节的首址
    段基址——一个段的起始地址
  在存储器中规定从0地址开始,每16个字节单元就称为一个小节.因此,1MB内存就可划分为64K个小节。(2^20^ / 2^4^ 2^16^ 64K)

  由图可以看出,每个小节的首地址最低位必为0(16进制数表示时)。因此段基址只能是上述小节的首址之一。

3.逻辑段是指在汇编语言程序中设置的段
    在物理存储器中的位置关系有四种情况,分别是:邻接的、间隔的、部分重叠的、完全重叠的。
    内存中的物理存储单元可以映像到一个或多个逻辑段中

    其中:段1和段2是邻接的;段3和段5是间隔的;段3和段4是完全重叠的;段2和段3是部分重叠的;

4.在任一时刻,一个程序只能访问4个当前段中的内容
    因为段寄存器只有四个( ̄﹃ ̄ 真实)
    四个段寄存器中分别保存了它们段基址的高16位地址,称为段基值,段基址的最第四位为0.(因为小节首址的最第四位全为0)


三、逻辑地址和我离地址的关系

1.物理地址
    由20位地址线确定的地址,由20个bit表示的地址。

8086的物理地址范围: 00000H ~ FFFFFH

2.逻辑地址
    设计程序时为了方便,从而设计的地址。
    一个逻辑地址包括两个部分:段基值和偏移量
    段基值:段基址的高16位,存放在段寄存器中。
    偏移量:某个存储单元与它所在段的段基址之间的字节距离。

    逻辑地址的表示方法:'段基值: 偏移量'
    例如:'3267H: 0A0H'

3.逻辑地址转化为物理地址
    将逻辑地址的段基值左移四位(二进制),形成20位的段基址(低位为零),然后与16位的偏移量相加。

4.逻辑地址的来源
    操作类型不同,来源也不同。

    说明:
        (1)允许替代的来源叫做段超越(和杨超越没有关系)。
        (2)有效地址EA:通过某种指令所采用的寻址方式(之后会学到)计算得到的偏移量。

Last Modified: September 8, 2021