步行者

步行者

2.4 8086微处理器的存储器管理

 1.存储单元的地址和内容
  计算机存储信息的基本单位是一个二进制位(bit)。一位可存储一个二进制数:0或1,每8位组成一个字节。
微机中常用的数据类型有:
  ·字节:存储器中存取信息的基本单位。我们常说某存储器容量是64MB,就是说该存储器有64M(1M=220)个字节。其位编号如图2.5(1)所示。
  ·字:一个字16位,占用两个字节,8086的字长就是16位的。一个字的位编号如图2.5(2)所示。
  ·双字:一个双字32位,由4个字节组成。其位编号如图2.5(3)所示。
  ·四字:一个四字64位,由8个字节组成。其位编号如图2.5(4)所示。
图2.5 数据类型
  

  在存储器里以字节为编址单位,也就是说给每个字节分配一个地址号,地址从0开始编号,依次递增1。地址在机器中用无符号二进制数表示,可简写为十六进制数的形式。一个存储单元中存放的信息称为该单元的内容。例如,2号单元中存放了一个数据8,则表示为:(2)=8。

  对于字、双字、四字数据类型,其低地址中存放低位字节数据,高地址中存放高位字节数据。在读写数据时只需给出最低单元的地址号即可,然后依次存取后续字节。

 例如,存储器现存有以下数据(后缀H表示是十六进制数):
地址:
9
8
7
6
5
4
3
2
1
0
内容:
0EH
0DH
0CH
0BH
0AH
89H
67H
45H
23H
01H


  对于不同的数据类型,取地址为2的数据分别是:

  (2)字节=45H
  (2) =6745H
  (2)双字=0A896745H
  (2)4字=0E0D0C0B0A896745H

  可以看出,同一个地址既可看作字节单元的地址,又可看作字单元、双字单元或4字单元的地址,这要根据使用时的情况来确定。而且多字节数据在存储器中是"逆序存放"的。

  字单元的地址可以是偶数,也可以是奇数。但是,在8086中,访问存储器(要求取数或存数)都是以字为单位进行的,也就是说,机器是以偶地址访问存储器的。这样,对于奇地址的字单元,要取一个字需要访问二次存储器,这就需要花费较多的时间。

  如上所述,如果用X表示某存储单元的地址,则X单元的内容可以表示为(X);假如X单元中存放着Y,而Y又是一个地址,则可用(Y)=((X))来表示Y单元的内容。
 2.存储器分段管理
  在8086微处理器中,在描述存储器地址时有三个相关的术语:物理地址、偏移地址和逻辑地址。

  物理地址是由8086的地址引线送出的20位地址码。这20位地址码送到存储器经过译码,最终选定一个存储单元进行读/写。物理地址可写成5位的十六进制数。

  偏移地址是相对于某段首地址的段内偏移量,用16位二进制代码表示,写成4位十六进制数,例如:004AH。

  逻辑地址是在程序中对存储器地址的一种表示方法,由某段的段地址和段内偏移地址组成。写成:段地址 : 偏移地址
例如:2000H : 0080H
  
  对存储器寻址起作用的是物理地址,8086对外有20位地址线,因此,存储器的可寻址范围为220=1MB。但是8086微处理器的内部结构是16位的,用户可用的寄存器也都是16位的。显然用16位的地址码无法寻址1MB的存储空间,为了解决这一矛盾,8086采用了分段的方法对存储器进行管理。

  存储器地址分段的具体做法是:把1MB的存储器空间分成若干段,每段的容量最大64KB,这样段内地址就可以用16位来表示。实际上,可以根据编程的需要来确定段的大小,它可以是64K字节范围内的任意多个字节。

  8086规定:从0地址开始,每16个字节为一小段,段的起始地址必须从任一小段(paragraph)的首地址开始,也就是说,段地址表示成20位的二进制地址码,其最低4位必须是"0"。

  存储器采用分段管理后,每个段的首地址(称为段基地址或段地址)保存在8086内部的CS、DS、SS和ES四个16位的寄存器中,我们可以对段寄存器设置不同的值以指向不同的段。

  16位的段地址和16位的偏移地址组合形成20位的物理地址,这就是8086的工作方式,这在80x86的寻址模式中称为实模式。

  物理地址的计算方法可以表示如下:
  

  也就是说,把段地址左移4位再加上偏移地址值就形成物理地址。或写成:
       段地址 × 16d + 偏移地址 = 物理地址
一般情况下,各段在存储器中的分配是由操作系统负责的,但是,也允许程序员用操作命令来指定所需占用的内存区。存储器各段的位置可以是连续相接的,可以是分离的,也可以是重叠的。
  在8086中,段寄存器和与其对应存放偏移地址的寄存器之间有一种默认的组合关系,如下所示:

          段寄存器             偏移地址寄存器
         
            CS                  IP
           SS                SP或BP
           DS                BX、DI、SI
           ES               DI(用于串指令)

  在这种默认的组合下,程序中不必专门指定其组合关系,但程序如用到非默认的组合关系,则必须用段跨越前缀(如ES:)加以说明。
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭