0%

汇编语言学习笔记

2.4 物理地址

CPU访问内存单元时要给出内存单元的地址。我们将这个唯一的地址称为物理地址。

2.5 16位结构的CPU

16位结构描述了一个CPU具有以下几个方面特征:

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

2.6 8086CPU给出物理地址的方法

8086有20位地址总线,可传送20位地址,寻址能力为1M

8086内部为16位结构,只能传送16位的地址,寻址能力却只有64k。

8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理空间

  1. cpu中的相关部件提供两个16位的地址,一个称为断地址,一个称为偏移地址;
  2. 段地址和偏移地址通过内部总线送入一个称为 地址加法器 的部件
  3. 地址加法器将两个16位地址合并成一个20位的地址

截屏2021-06-02 上午12.02.00

地址加法器的工作原理

截屏2021-06-02 上午12.06.06

段地址 * 16,即数据左移4位

  • 一个数据的十六进制形式左移1位,相当于乘以16;
  • 一个数据的十进制形式左移1位,相当于乘以10;
  • 一个数据的X进制形式左移1位,相当于乘以X;

2.7 段地址 ✖️16 + 偏移地址 = 物理地址的本质含义

  • 第一个比喻:

    截屏2021-06-02 上午12.09.59

    • 从学校走2826m到图书馆。这2826可以认为是图书馆的物理地址。
    • 可以分解为从学校走2000m到体育馆,从体育馆再走826m到图书馆
      • 第一个距离2000m是相当于起点的基础地址
      • 第二个距离826m是相对于基础地址的偏移地址
  • 第二个比喻:

    用纸条通讯,询问图书馆的地址(目前只有两张可以容纳3位数据的纸条)

    • 第一张:200

    • 第二张:826

      规则:第一张 ✖️10 + 第二张,即可得到地址。

2.8 段的概念

错误认识:

内存被划分成了一个一个的段,每一个段有一个段地址

其实:

内存并没有分段,段的划分来自于CPU,由于8086CPU用“段地址 ✖️ 16 + 偏移地址 = 物理地址”的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存。

  • 段地址 ✖️ 16必然是16的倍数,所以一个段的起始地址也一定是16的倍数;
  • 偏移地址为16,16位的地址的寻址能力为64k,所以一个段的长度最大为64k。

如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位多少内存单元?

结论:偏移地址16位,变化范围为0~FFFFH,仅用偏移地址来寻址最多可寻64k个内存单元。

比如:给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H ~ 1FFFFH。

数据在21F60H内存中。对于8086PC机的两种描述:

  1. 数据存在内存2000:1F60单元中;
  2. 数据存在内存的2000段中的1F60H单元中。

注:段是可以人为定义的,可根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段。