汇编语言“段地址x16+偏移地址=物理地址”的本质含义

文章目录[隐藏]

“段地址x16+偏移地址=物理地址”的本质含义是:CPU在访问内存时,用一个基础地址(段地址x16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
更一般地说,8086CPU的这种寻址功能是“基础地址+偏移地址=物理地址”寻址模式的一种具体实现方案。8086CPU中,段地址x16可看作是基础地址。
下面,我们用两个与cPu无关的例子做进一步的比喻说明。
第一个比喻说明“基础地址+偏移地址=物理地址”的思想。
比如说,学校、体育馆、图书馆同在一条笔直的单行路上(参考图2.8),学校位于路的起点(从路的起点到学校距离是0米)。

511遇见

你要去图书馆,问我那里的地址,我可以用两种方式告诉你图书馆的地址:
(1)从学校走2826m到图书馆。这2826m可以认为是图书馆的物理地址。
(2)从学校走2000m到体育馆,从体育馆再走826m到图书馆。第一个距离2000m是相对于起点的基础地址,第二个距离826m是相对于基础地址的偏移地址(以基础地址为起点的地址)。
第一种方式是直接给出物理地址2826m,而第二种方式是用基础地址和偏移地址相加来得到物理地址的。
第二个比喻进一步说明“段地址x16+偏移地址一物理地址”的思想。
我们为上面的例子加一些限制条件,比如,只能通过纸条来互相通信,你问我图书馆的地址我只能将它写在纸上告诉你。显然,我必须有一张可以容纳4位数据的纸条,才能写下2826这个数据。

511遇见

可不巧的是,我没有能容纳4位数据的纸条,仅有两张可以容纳3位数据的纸条。这样我只能以这种方式告诉你2826这个数据。

511遇见

在第一张纸上写上200(段地址),在第二张纸上写上826(偏移地址)。假设我们事前对这种情况又有过相关的约定:你得到这两张纸后,做这样的运算:200(段地址)x10+826(偏移地址=2826(物理地址)。
8086CPU就是这样一个只能提供两张3位数据纸条的CPU

汇编小结

一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。内部总线实现CPU内部各个器件之间的联系,外部总线实现CPU和主板上其他器件的联系。对于一个汇编程序员来说,CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。不同的CPU,寄存器的个数、结构是不相同的。8086CPU有14个寄存器,分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

一、通用寄存器

8086CPU的所有寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX这四个寄存器通常用来存放一般性的数据,被称为通用寄存器。这四个寄存器都可分为两个可独立使用的8位寄存器来用:AX可分为AH和AL;BX可分为BH和BL;CX可分为CH和CL;DX可分为DH和DL。

以AX为例,AX的低8位(0位~7位)构成了AL寄存器,高8位(8位~15位)构成了AH寄存器。

二、字在寄存器中的存储

出于对兼容性的考虑,8086CPU可以一次性处理以下两种尺寸的数据:1.字节:记为byte,一个字节由8个bit组成,可以存在8位寄存器中。

2.字:记为word,一个字由两个字节组成,这两个字节分别称为这个字的高位字节和低位字节。

关于数值的讨论:任何数据,到了计算机中都是以二进制的形式存放的。为了描述不同的问题,又经常将它们用其他的进制来表示。十六进制数的一位相当于二进制数的四位。由于一个内存单元可存放8位数据,CPU中的寄存器又可存放n个8位的数据。也就是说,计算机中的数据大多是由1~N个8位数据构成的。

三、物理地址

CPU访问内存单元时,要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,这个唯一的地址成为物理地址。CPU通过地址总线送入存储器的,必须是一个内存单元的物理地址。

四、8086CPU给出物理地址的方法

8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。当8086CPU要读写内存时:(1)CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址。(2)段地址和偏移地址通过内部总线送入一个称为地址加法器的部件。(3)地址加法器将两个16位地址合成为一个20位的物理地址(4)地址加法器通过内部总线将20位物理地址送入输入输出控制电路(5)输入输出控制电路将20位物理地址送上地址总线(6)20位物理地址被地址总线送到存储器

地址加法器采用物理地址=段地址*16+偏移地址的方法用段地址和偏移地址合成物理地址。

五、“段地址x16+偏移地址=物理地址”的本质含义

本质含义是:CPU在访问内存时,用一个基础地址(段地址x16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

六、CS和IP

CS和IP是8086CPU中两个最关键的寄存器。它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。CPU将CS:IP指向的内容当作指令执行。
好文要顶 关注我 收藏该文


发布日期:

所属分类: 编程 标签:  


没有相关文章!