您的位置:首页 > 其它

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

2010-01-19 22:47 603 查看
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位的物理地址。步骤如下:



地址加法器采用 段地址*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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: