竹逸 发表于 2022-5-3 15:44:37

物理内存地址?

8086CPU内部总线宽度是16位的,寻址能力是2^16,可它和外部器件的总线宽度是20位,寻址能力是2^20,

为了充分利用外部器件的的物理地址,就需要用段地址*16+偏移地址来索引物理地址

段地址左移一位就有了5位十六进制数,相当于二进制的20位,那偏移后的20位就已经可以寻址到2^20的地址,那为啥还要再加个偏移地址啊?

竹逸 发表于 2022-5-3 15:51:00

课件里是说用两个16位地址来合成一个物理地址,那它的意思是把一个16位地址用来锁定段地址(每一个地址都是段的索引,是存储单元的集合,而不是一个个的存储单元),一个16位地址用来索引该段中的每一个存储单元?

jackz007 发表于 2022-5-3 16:51:52

本帖最后由 jackz007 于 2022-5-3 16:54 编辑

      8088 CPU 的数据总线是 16 位,表达空间是 2 ^ 16 = 64 KB;地址总线是 20 位,存储单总元总数为 2 ^ 20 = 64 KB x 16,16 位指针可寻址空间为 64 KB ,还有 15 个 64 KB 存储单元无法寻址。就好比车牌编码要求用 5 位数,而你的手上只有 4 位数的车牌,为了凑出 5 位数,就不得不用 2 块车牌拼凑 1 块的方法来解决问题。段地址 + 偏移地址的寻址方式和拼车牌的道理完全一样。
    16位段地址 x 10h + 16位偏移地址 = 20 位内存地址

竹逸 发表于 2022-5-3 16:58:48

jackz007 发表于 2022-5-3 16:51
8088 CPU 的数据总线是 16 位,表达空间是 2 ^ 16 = 64 KB;地址总线是 20 位,存储单总元总数为 2 ...

8086CPU是16位结构的CPU,也就是内部的数据总线、地址总线和控制总线都是16位,20位总线是CPU和外部器件的总线宽度吧?

jackz007 发表于 2022-5-3 17:11:43

竹逸 发表于 2022-5-3 16:58
8086CPU是16位结构的CPU,也就是内部的数据总线、地址总线和控制总线都是16位,20位总线是CPU和外部器件 ...

      是的没错,16 位汇编 20 位地址的概念来自 8088 CPU
      
      请参考:https://baike.baidu.com/item/8088%E8%8A%AF%E7%89%87/10485632

竹逸 发表于 2022-5-3 17:14:27

jackz007 发表于 2022-5-3 16:51
8088 CPU 的数据总线是 16 位,表达空间是 2 ^ 16 = 64 KB;地址总线是 20 位,存储单总元总数为 2 ...

我的问题你可能没听明白,我的意思是段地址经过地址加法器加工后组成了一个5位的地址,也就是向左移了一位,相当于二进制的20位,这个加工后的20位地址就已经可以寻址到2^20的物理地址,那为啥还要再加个偏移地址?

jackz007 发表于 2022-5-3 17:28:01

竹逸 发表于 2022-5-3 17:14
我的问题你可能没听明白,我的意思是段地址经过地址加法器加工后组成了一个5位的地址,也就是向左移了一 ...

          经过左移的段地址相当于
段地址 x 10h
          这的确是一个 20 位的地址,但是,我想问的是,这个地址的末位数它不一直是 0 值吗?抛弃掉偏移,你用什么来表达末位数的改变?

竹逸 发表于 2022-5-3 17:31:34

jackz007 发表于 2022-5-3 17:28
经过左移的段地址相当于

          这的确是一个 20 位的地址,但是,我想问的是,这个地址 ...

哦,对哦,也就是还有 1~F没有表示出来,所以就需要用到偏移地址来补足是吧

jackz007 发表于 2022-5-3 17:55:17

竹逸 发表于 2022-5-3 17:31
哦,对哦,也就是还有 1~F没有表示出来,所以就需要用到偏移地址来补足是吧

       没错!
页: [1]
查看完整版本: 物理内存地址?