欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

为啥汇编8086cpu段地址*16+偏移=物理地址 他为什么要乘16呢

更新时间: 2014-01-05 03:17:20 责任编辑: Author_N1

 

为什么汇编8086CPU段地址*16+偏移=物理地址 他为什么要乘16呢?
我想不明白,为什么非的乘以16倍呢。我只是觉得他是16位寄存器,就得乘以16.但是不知道原理,我是新手,麻烦大家帮下我,怎么才弄这个。越想越乱。

现在都是32位CPU了,那他又是怎么得到物理地址的?直接就寻址了,不用8086那种方式了?
--参考方法--
引用:
我想不明白,为什么非的乘以16倍呢。我只是觉得他是16位寄存器,就得乘以16.但是不知道原理,我是新手,麻烦大家帮下我,怎么才弄这个。越想越乱。

现在都是32位CPU了,那他又是怎么得到物理地址的?直接就寻址了,不用8086那种方式了?

  这是历史遗留问题.
  intel 8088时代,计算机的地址总线是20位的,即可以寻址能力可以达到1M字节,但是它的ALU和寄存器都只有16位,也就是表示数的能力只能达64k,再大就逾锅了。那怎么办呢?INTEL想了一个办法,让两个寄存器对来表示一个物理地址,比如说DS:BX,前者叫段寄存器,后者叫偏址寄存器。由于这两个寄存器都是16位,直接相加还是不能匹配20位的地址线的访问能力,因此,INTEL公司变通了一下,人为地将这个组合寻址设计成:在它们组合时,让段寄存器左移四位(假设DS是1234H,左移4位就变成了12340H,至于它内部怎么实现我们不用管它。注意,对于16进制的数来说,乘以16就相当于在原数后面补个0,因为它是逢16进1啊;与10进制数乘10就是后面补0同样道理。)然后与偏址寄存器相加,这样得到的地址最大可以到0FFFFFH。这样行了。
  现在都32位机了,甚至64位了,所以上面的寻址方法在保护模式下不再用了。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:17:20
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/20412/
本文WWW.DOC100.NET DOC100.NET版权所有。