80x86寻址方式

1、  首先需要理解知道的概念

    80x86有20根地址总线。

    80x86访问内存时需要用到 段寄存器(如ES、CS、SS、DS、FS)  和偏移地址IP

 

2、物理地址的表述

         物理地址就是内存单元的编号,一堆二进制码,如果从数字电路的角度讲 就是一堆导线的线与

         描述一: 物理地址 = 基础地址 + 偏移地址 

         描述二: 物理地址 = 段地址 * 16  + 偏移地址

   所以: 基础地址 =    段地址 * 16 

   所以:  基础地址 必然能被16整除

  (1)为什么要如此描述物理地址

     答:CPU有20根地址总线 ,如果直接访问 势必需要 一下你能存储 20位(0/1)的寄存器  。但是 我们的80x86CPU只有 16位的寄存器

    如此看来矛盾产生了.

        矛盾:

          16位的寄存器(xxxx xxxx xxxx xxxx )如何 存储 20位(xxxx xxxx xxxx xxxx xxxx)的数据 

           矛盾的解决:

          加法:两个16位寄存器 存储的数 通过 一个加法 使得他们变成为20位

          加的方式: 我的理解是更像是 错位相加(错位是指 错开 而不是 错误 )

               寻求基地址:

               假如将A这个寄存器存储的数左移四位,从而变为20位(xxxx xxxx xxxx xxxx 0000) 注意观

               察错位后的数刚好为16的整数倍, 所以就导致我们在寻求这个 错位后的值x 的时候 必然能

               被16整除,数学上如何保证呢? 简单x = y * 16,就相当于  基础地址 =    段地址 * 16 。

               这地方就是巧用了数学进制运算的规律,只有这样才找到这样的一个数(xxxx xxxx xxxx xxxx 0000)。

               偏移地址:

               寻求到基地址后我们得到了有一个20位的数据,现在需要在该地址基础上找要访问的单元,离基地址的这段

               距离这个数又得从 一个16位寄存器中取出,所以他能装的最大值 0FFFFH(1111 1111 1111 1111)。

               当我们定这个范围的 偏移地址 后地址加法器就会将 20位的基地址和 16位的偏移地址高位补0得到20位 加

                 在一起 得到最终的物理地址,或者说内存编号。

 

3、物理地址的计算方法

    a、 物理地址 = 基础地址 + 偏移地址   

      基础地址 需要自己计算是不是能被16整除

    b、 物理地址 = 段地址 * 16  + 偏移地址  

      基础地址 肯定能被16整除

 

4、比喻理解(此理解参考网上)

   a、 物理地址  迟子的每个刻度

          基地址   厘米刻度 * 厘米段内的毫米数

          段地址    厘米刻度

          偏移地址 厘米的毫米刻度

   b、《王爽—汇编语言》 第30页比喻

      

              

               

            

              

      

    

 

 

 

posted @ 2013-05-17 11:07  皮哈儿  阅读(420)  评论(0)    收藏  举报