若余相思 发表于 2017-7-16 12:00:18

《汇编语言》第二章2.4节~2.8节


2.4节 物理地址
CPU在访问内存地址单元时,必须给出内存单元的地址,而内存单元构成的空间是一个一维的线性空间,每一个内存单元在这个空间都有唯一的地址,而这个地址就是物理地址。
CPU送给存储器的必须是一个物理地址
下面几节就是讨论CPU在内部是如何形成物理地址的?

2.5节 16位结构的CPU
一个16位结构的CPU(如8086CPU)有如下结构特性:
1、运算器一次最多可以处理16位的数据;
2、寄存器的最大宽度为16位;
3、寄存器和运算器之间的通路位16位。

概括来讲就是16位的CPU在内部能够一次性处理、传输、暂时存储的信息最大的长度是16位。

2.6节 8086CPU给出物理地址的方法
8086CPU有20位的地址总线,而CPU内部一次性只能处理最大为16位的信息。下面就说的是用某一办法将2个16位的数据转换为20位的物理地址
步骤:
(1)CPU相关部件提供一个16位段地址和16位的偏移地址;
(2)将段地址和偏移地址送入地址加法器;
(3)在地址加法器中将16位的地址合成为一个20位的物理地址;
(4)地址加法器通过内部总线将物理地址传送到输入输出控制电路;
(5)输入输出控制电路将20位物理地址送上地址总线;
(6)20位物理地址被地址总线送到寄存器。

其中地址加法器采用物理地址 = 段地址 * 16 + 偏移地址的方法合成物理地址
如:有段地址1230,偏移地址00C8。它们通过地址加法器合成一个1230 * 16 + 00C8 = 123C8的20位的物理地址,最后通过地址总线送到内存中。

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

2.8节 段的概念
段地址并不是一段地址,段地址只是某一个具体地址,如:基础地址为:10000H,那么它的段地址就是1000H
需要注意的是:段地址必须是16的倍数,所以一个段的起始地址也是16的倍数;偏移地址为16位,所以它的范围为0~FFFFH,段地址也是如此。

总结:
(1)段地址 * 16 + 偏移地址 = 物理地址,即SA * 16 + EA = 物理地址
(2)偏移地址为16位,所以它的范围为0~FFFFH,段地址也是如此
(3)段地址必须是16的倍数,所以一个段的起始地址也是16的倍数
(4)可根据需要将地址连续、起始地址为16的倍数的一组内存单元定义为一个段
页: [1]
查看完整版本: 《汇编语言》第二章2.4节~2.8节