找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1686|回复: 0

物理地址=段地址*16 偏移地址

[复制链接]
  • TA的每日心情
    开心
    2018-10-31 14:26
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    78

    主题

    109

    回帖

    1019

    积分

    高级会员

    积分
    1019

    猴年

    龙龙实名认证 发表于 2015-6-22 02:59:42 | 显示全部楼层 |阅读模式
      
      8086cpu有20根地址总线,每一根线能传输0(或1),可以理解为地址线是二进制的,每根线表示1位,则20根地址总线的物理地址需用20位二进制码(0或1)表示,范围最大2^20=1M
      在Intel 8086时代,计算机的地址总线是20位的,即可以寻址能力可以达到1M字节,但是它的ALU和寄存器都只有16位,也就是表示数的能力只能达64k(2^16=64k),再大就装不下了。
      那怎么办呢?Intel想了一个办法,让两个寄存器对来表示一个物理地址,
      比如说DS:BX,前者叫段寄存器,后者叫偏址寄存器。
      由于这两个寄存器都是16位,直接相加还是不能匹配20位的地址线的访问能力,因此,Intel公司变通了一下,人为地将这个组合寻址设计成:
      物理地址=段地址*16 偏移地址
      在它们组合时,让段寄存器左移四位(每根地址线可传送0或1两种数据,而16=2^4,所以*16就是二进制的地址左移4位。注意,对于16进制的数来说,乘以16就相当于在原数后面补个0,因为它是逢16进1;与10进制数乘10就是后面补0同样道理。假设DS是1234H,左移4位就变成了12340H)然后与偏址寄存器相加,这样得到的地址最大可以到0FFFFFH(即寻址1M)。


    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|虫虫联盟 ( 备案号:蜀ICP备15018121号-1 )

    GMT+8, 2024-4-26 00:29 , Processed in 0.422978 second(s), 26 queries .

    Powered by Discuz! X3.5 Licensed

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表