出于对兼容性的考虑,8086CPU能够一次性处理两种尺寸的数据:程序员
CPU经过地址总线送入存储器的必须是一个内存单元的物理地址。 在CPU向地址总线上发出物理地址以前,必须在内部先造成这个物理地址。 不一样的CPU能够有不一样的造成物理地址的方式。编程
16位结构的CPU具备下面几方面的结构特性:spa
内存单元的地址在送上地址总线以前,必须在CPU中处理、传输、暂时存放,对于16位CPU,能一次性处理、传输、暂时存储16位的地址。指针
8086CPU有20位地址线,能够传送20位地址,达到1MB的寻址能力。
8086CPU又是16位结构,在内部一次性处理、传输、暂时存储的地址为16位。
从8086CPU的内部结构来看,若是将地址从内部简单地发出,那么它只能送出16位的地址,表现出的寻址能力只有64KB。
事实上,8086CPU采用一种在内部用两个16位地址合成的方法来造成一个20位的物理地址。code
8086CPU相关部件的逻辑结构如图所示: 当8086CPU要读写内存时:
(1).CPU中的相关部件提供两个16位地址,一个称为段地址,一个称为偏移地址
(2).段地址和偏移地址经过内部总线送入一个称为地址加法器的部件
(3).地址加法器将两个16位地址合并成哟个20位物理地址
(4).地址加法器经过内部总线将20位物理地址送入输入输出控制电路
(5).输入输出控制电路将20位物理地址送上地址总线
(6).20位物理地址被地址总线传送到存储器
地址加法器采用物理地址=段地址X16+偏移地址的方法用段地址和偏移地址合成物理地址内存
"段地址"中的“段”的概念,其实来自于CPU。内存并无分段,段的划分来自于CPU。class
段地址在8086CPU的段寄存器中存放。
8086有4个段寄存器:CS,DS,SS,ES。兼容性
当8086CPUCPU要访问内存时由这4个段寄存器提供内存单元的段地址。原理
CS和IP是8086CPU中两个最关键的寄存器,他们指示了CPU当前要读取指令的地址。二进制
在8086PC中,任意时刻,设CS中的内容为M,IP中的内容为N,8086CPU将从内存M×16+N单元开始,读取一条指令并执行。
也能够描述为:8086机中,任意时刻,CPU将CS:IP指向的内容看成指令执行。
如图显示了8086CPU读取、执行指令的工做原理:
在CPU中,程序员可以用指令读写的部件只有寄存器,程序员能够经过改变寄存器的内容实现对CPU的控制。 CPU从何处执行指令是由CS、IP中的内容决定的,程序员能够经过改变CS、IP中的内容来控制CPU执行目标指令。
8086CPU大部分寄存器的值,均可以经过mov指令来改变。mov指令被称为传送指令。
mov指令不能用于设置CS、IP的值,缘由是:8086没有提供这样的功能。
可以改变CS、IP的内容的指令被统称为转移指令。
对于8086PC机,在编程时,能够根据须要,将一组内存单元定义为一段。能够将长度为N(N<=64KB5)的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中。存在这段内存单元中的代码能够成为一个代码段。
将一段内存看成代码段,仅仅是咱们在编程时的一种安排,CPU并不会因为这种安排,就自动的将咱们定义的代码段中的指令看成指令来执行。
CPU只认被CS:IP指向的内存单元中的内容为指令。
要让CPU执行咱们放在代码段中的指令,必需要将CS:iP指向所定义的代码段中的第一条指令的首地址。