汇编语言入门:地址和段的概念

时间:2024-04-11 10:09:39

地址是CPU访问内存信息的索引凭证

仍然围绕16位CPU展开(王爽老师《汇编语言》)


物理地址

CPU访问内存单元时要给出内存单元的地址;所有的内存单元构成的存储空间是一个一维的线性空间(显卡、网卡……都有自己的内存空间)

我们将这个唯一的地址称为物理地址


16位CPU的特点

1. 运算器一次可以处理16位的数据

2. 寄存器的最大宽度位16位

3. 寄存器和运算器之间的通路是16位的


8086CPU给出地址,读写内存

汇编语言入门:地址和段的概念

1. CPU的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址

2. 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件

3. 地址加法器将两个16位地址合并成一个20位的地址

地址加法器的工作原理:物理地址=段地址x16+偏移地址
例如,8086CPU访问地址为123C8H的内存单元:
汇编语言入门:地址和段的概念

“段地址x16”更常见的说法是“数据左移4个二进制位”
汇编语言入门:地址和段的概念
一个数据的二进制形式左移N位相当于乘以2^N


段的概念

内存并没有被分段,段的划分来自于CPU(“段”是概念上的)

由于8086CPU用“段地址x16+偏移地址=物理地址”的方式给出内存单元的物理地址,我们用分段的方式来管理内存

汇编语言入门:地址和段的概念

因为一个地址的起始地址=段地址x16,所以一个段的其实地址必然是16的倍数

偏移地址位16位,16位地址的寻址能力位64k,所以一个段的长度最大位64k(64kB)

举几个例子说明“一个物理地址可以由多种不同的段地址和偏移地址组成”:
汇编语言入门:地址和段的概念

如果给定一个段地址,仅通过变化偏移地址来进行寻址,最多可以定位64k个内存单元:分析,偏移地址16位,变化范围位0~FFFF;比如,给定段地址1000H,仅通过偏移地址,CPU的寻址范围为1000H~1FFFFH

数据在某某内存单元中,可以有两种描述方式:例如数据在21F60H的内存单元中,对于8086PC机有的两种描述:1. 数据存在内存2000: 1F60单元中,2. 数据存在内存的200段中的1F60单元中

可能根据需要,将地址连续、其起始地址为16倍数的一组内存单元定义为一个段(再次强调,“段”仅是概念上的东西!)

最后再次说明,CPU只看物理地址


下一篇文章讲解“段寄存器”……