汇编3——8086CPU的寻址方式

1.物理地址

  每一个内存单元的地址就称为物理地址。

2.16位结构的CPU

  具有以下3个特征:

  •     运算器一次最多可以处理16位的数据;
  •     寄存器的最大宽度为16位;
  •     寄存器和运算器之间的通路位16位;

  8086是16位结构的CPU,也就是说,在8086内部,能够一次性处理、传输、暂时存储的信息的最大长度是16位的。内存单元的地址在送上地址总线之前,必须在CPU中处理、传输、暂时存放,对于16位CPU,能一次性处理、传输、暂时存储16位的地址。

 3.8086的地址产生方法

8086的地址总线是20位,寻址能力为1MB,但在内部,8086一次性只能处理16位的数据,即只能送出16位的地址,表现出的寻址能力只有64KB,为了解决这个问题,8086采用了段地址+偏移地址的方式,来生成20位的物理地址。步骤如下:

汇编3——8086CPU的寻址方式_第1张图片

地址加法器采用 段地址*16+偏移地址 的方法用段地址和偏移地址合成物理地址。

 

例如,8086CPU要访问123C8H的内存单元,此时,段地址为1230,偏移地址为00C8,加法器给段地址1230*16=12300,并与偏移地址00C8相加,就得到了20位的物理地址123C8。即1230*16+00C8=123C8.

 

4.本质含义

段地址*16+偏移地址=物理地址的本质含义是:CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

更一般的说:8086的这种寻址功能是“基础地址+偏移地址=物理地址”。

对16进制数而言,乘以16就相当于左移一位。

 

5.段的概念

段的划分来自CPU,实际中内存并没有分段。

在编程时可以根据需要,将若干地址连续的内存单元看做一个段,用段地址*16定位段的起始地址,用偏移地址定位段中的内存单元。

段地址*16必然是16的倍数,所以一个段的起始地址必然是16的倍数,偏移地址为16位,即一个段的最大长度为64KB.

所以给定一个物理地址,可以有不同的分段方法,也就有不同的基础地址和偏移地址。

例如物理地址21F60H,21F60H = 2000H * 16 + 1F60H =  2100H *16 + 0F60H = 21F0H * 16 + 0060H

你可能感兴趣的:(数据结构,编程)