8086汇编-8寄存器(CPU工作原理)03

#pragma once
/* 8-寄存器(CPU工作原理)03

  物理地址
    CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间。我们将这个唯一的地址称为物理地址。虽然实际情况各种内存是在不同的设备上,但是CPU就认为他们就是一块大的逻辑内存!!!

  16位结构的CPU
    概括的讲,16位结构描述了一个CPU具有以下几个方面特征:
        1、运算器一次最多可以处理16位的数据。

        2、寄存器的最大宽度为16位。

        3、寄存器和运算器之间的通路是16位的。              
        以上观点换成64位也是可以套用的.


  8086CPU给出物理地址的方法
    8086有20位地址总线,可传送20位地址,寻址能力为1M。8086内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。
        问题:那么,8086CPU如何用内部16位的数据转换成20位的地址呢? 8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址~

        8086CPU读写内存时,发生了这么一些事:
            CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址;
            段地址和偏移地址通过内部总线送入一个称为地址加法器的部件;         段地址的概念 和 偏移地址的概念 已经引出了
            地址加法器将两个16位地址合并成一个20位的地址;
            ……

  地址加法器工作原理
    地址加法器合成物理地址的方法:
         物理地址=段地址×16+偏移地址      十六进制 ×16 等于整个数据向左移一位.换成二进制就是向左移动4位例如:段地址 = 1230H ,   1230H == 4656D(D代表十进制) ,要知道我们的乘法除法都是十进制的,所以,我们要转
换成十进制来计算,4656D×16 == 74496D == 12300H.从这里开始就已经是20位了,再把后面的偏移地址加上就是物理地址.     任何进制的数(转换成十进制) 乘 它的进制的位数 都是向左移1位
          

  由段地址×16引发的血案……            (搞笑中.......)
    “段地址×16”有一个更为常用的说法就是数据左移4位。(二进制位)   


  由段地址×16引发的血案2……            (搞笑中.......)
     我们通过观察移位次数和各种形式数据的关系:
        (1)一个数据的二进制形式左移1位,相当于该数据乘以2;  (转换成十进制形式做乘法)
        (2)一个数据的二进制形式左移N位,相当于该数据乘以2的N次方;  (转换成十进制形式做乘法)
        (3)地址加法器如何完成段地址×16的运算?        以二进制形式存放的段地址左移4位  == 十六进制左移1位。

  一个馒头引发的分析……                (搞笑中.......)
    经过进一步的思考,我们可以看出:
        一个数据的十六进制形式左移1位,相当于乘以16;
        一个数据的十进制形式左移1位,相当于乘以10;
        一个数据的X进制形式左移1位,相当于乘以X。

  段地址×16+偏移地址=物理地址”的本质含义
    两个比喻说明:
        说明“基础地址+偏移地址 = 物理地址” 的思想:第一个比喻 : 比如说,学校、体育馆同在一条笔直的单行路上(学校位于路的起点0米处)。读者在学校,要去图书馆,问我那里的地址,我可以用几种方式描述这个地址?
            (1)从学校走2826m到图书馆。这2826可以认为是图书馆的物理地址。
            (2)从学校走2000m到体育馆,从体育馆再走826m到图书馆。
                    第一个距离2000m是相对于起点的基础地址;
                    第二个距离826m是将对于基础地址的偏移地址。
                    解释一下就是你可以先从 学校 到 体育馆 ,再从体育馆走826m 就到图书馆啦.


        说明“段地址×16+偏移地址=物理地址”的思想:第二个比喻:比如我们只能通过纸条来通信,读者问我图书馆的地址,我只能将它写在纸上告诉读者。显然我必须有一张可以容纳 4 位数据的纸条才能写下2826这个数据:
不巧的是,没有能容纳4位数据的纸条,仅有两张可以容纳3位数据的纸条。这样我只能以这种方式告诉读者2826这个数据:
            8086CPU就是这样一个只能提供两张3位数据纸条的CPU。 这两张纸条分别是 200和826 (代表十六进制) 那么我想要告诉读者2826 这个数字,就需要把 200向左偏移一位,在去加 826 就等于 2826了.懂了吗?

    

*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值