第二章:寄存器(CPU工作原理)03
让编程改变世界
Change the world by program
物理地址
CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。 我们将这个唯一的地址称为物理地址。16位结构的CPU
概括的讲,16位结构描述了一个CPU具有以下几个方面特征: 1、运算器一次最多可以处理16位的数据。 2、寄存器的最大宽度为16位。 3、寄存器和运算器之间的通路是16位的。8086CPU给出物理地址的方法
8086有20位地址总线,可传送20位地址,寻址能力为1M。 8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。问题:那么,8086CPU如何用内部16位的数据转换成20位的地址呢?
自问自答:8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址~ [caption id="attachment_257" align="aligncenter" width="300"] 8086CPU如何用内部16位的数据转换成20位的地址[/caption]8086CPU读写内存时,发生了这么一些事:
CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;
段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;
地址加法器将两个16位地址合并成一个20位的地址;
地址加法器工作原理
地址加法器合成物理地址的方法:物理地址=段地址×16+偏移地址 例如:8086CPU访问地址为123C8H的内存单元 [caption id="attachment_258" align="aligncenter" width="300"] 8086CPU访问地址为123C8H的内存单元[/caption] 由段地址×16引发的血案…… “段地址×16”有一个更为常用的说法就是数据左移4位。(二进制位) [caption id="attachment_259" align="aligncenter" width="300"] 进制转换[/caption] 我们通过观察移位次数和各种形式数据的关系:一个数据的二进制形式左移1位,相当于该数据乘以2;
一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;
地址加法器如何完成段地址×16的运算?没错,以二进制形式存放的段地址左移4位。
一个馒头引发的分析…… 经过进一步的思考,我们可以看出:一个数据的十六进制形式左移1位,相当于乘以16;
一个数据的十进制形式左移1位,相当于乘以10;
一个数据的X进制形式左移1位,相当于乘以X。