汇编2-8086cpu确定物理地址的方式

1.引言

cpu一般是偶运算器、控制器、存储器组成,这些器件也是利用总线相连,只不过这里提及的总线是内部总线,与之前提到的总线不同。运算器负责信息处理,寄存器负责信息存储,控制器控制各个部件工作。对一个汇编程序员来说,最重要的就是寄存器,因为程序员就是通过操作各种寄存器来控制cpu从而实现特定的功能。
不同的cpu寄存器的个数与格式都是不同的。8086一共有14个寄存器:AX、BX CX DX SI DI SP BP IP CS DS SS ES PSW.在后面的学习中我们将接触并认识他们。

2.通用寄存器

8086cpu的所用寄存器都是16位的,其中AX BX CX DX是四个通用寄存器,用来存放一般性的数据。但是由于为了向前兼容,这四个通用寄存器都可以分为独立的两个8位寄存器。
汇编2-8086cpu确定物理地址的方式

3.字在存储器中存储

8086cpu一次性可以处理两种类型的数据:byte(字节型)、word(字型)
1word = 2 byte
其实还可以处理一种数据:dword(双字型),1DWORD = 2 word = 4byte
汇编2-8086cpu确定物理地址的方式

4.8086cpu编址方式

注:

  1. 物理地址:cpu要访问内存单元时,必须给出内存地址,所有的内存单元构成的存储空间是一维线性的,每个存储单元都有唯一的地址编号,这个唯一的地址称之为物理地址
  2. 16位结构的cpu:汇编2-8086cpu确定物理地址的方式

8086cpu拥有20根地址线,但是它偏偏又是16位的结构,这就导致了它拥有1MB的寻址能力,但是一次性却只能处理16位数据,如果将地址从cpu总简单的发出,那么久只有16位地址,也就是寻址能力只有64KB,这样也太浪费资源了。所以前辈们想出了这样一个方法:用两个16位地址形成一个20位地址。
汇编2-8086cpu确定物理地址的方式
从图中可以看到8086采用了段地址+偏移地址这种方式
其中地址加法器进行的操作是:段地址x16+偏移地址
通过这种方式就可以充分利用资源了。
需要注意的是,寄存器并没有被划分为一段一段的,这种方式的核心思想是一个基础地址+一段偏移地址最后得到物理地址


注:

可以根据需要将一段连续的地址空间划分为一个个段,然后用上面提及的方式确定物理地址,段地址x16一定是16的倍数,所以段地址的首地址一定是16的倍数,偏移地址为16位,所以段最大为64KB

5.段寄存器

前面提到了确定物理地址的方式是段地址+偏移地址,那么在cpu中段地址是怎么给出的呢?
段地址存储在cpu中的段寄存器(CS DS ES SS)中。
下面我们通过cs与ip来深入理解8086确定物理地址的方式:
注:

ip:指令指正寄存器
cs:代码段寄存器

cpu通过csx16+ip来确定下一条指令的位置,并执行它。
汇编2-8086cpu确定物理地址的方式
由图可见:
cpu通过cs与ip确定物理地址,通过地址总线把要访问的地址信息传导存储器,访问特定的指令再通过数据总线把指令传导cpu,然后将指令放到指令缓冲器中准备执行。

6.改变CS IP的值

程序员可通过一些方法改变cs或者ip的值。这也就达到了执行某一特定位置代码的目的。
8086提供了jmp指令,可以改变cs与ip.
简单的用法:jmp 段地址:偏移地址 可以同时修改cs与ip
后续会专门介绍。

7.代码段

代码段就是一段存放代码的连续存储空间
汇编2-8086cpu确定物理地址的方式