. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->基础知识
主题 : :  为什么段地址:偏移地址 = 段地址 * 16:偏移地址  [已解决] 回复[ 6次 ]   点击[ 372次 ]  
silekey
[帖 主] [ 发表时间:2008-05-22 16:22 ] 
荣誉值:2
信誉值:4
注册日期:2008-05-22 14:44
而不是:
段地址 * 16^4 + 偏移地址.

本来可以表达    0000 0000 --- FFFF FFFF 的.
而现在只能表达  0000 0000 --- 0010 FFEF 了.

这样 多浪费呀....
black
[第3楼] [ 回复时间:2008-05-23 09:35 ] 
荣誉值:37
信誉值:0
注册日期:2008-01-29 18:06
原理是是这样的
8086cup拥有20根地址总线,所以cup可以访问的地址范围就从 00000 -- fffff 总共有1M空间
但是寄存器的大小为16位,其能寻址的范围为0000--ffff(64k大小的空间),由此可见单单依靠一个寄存器是无法访问到1m空间
8086给出的解决办法就是 使用两个寄存器来表示地址.一个段寄存器,和一个通用寄存器
具体的解决办法是:cpu中有个地址运算单元,它就是将段寄存器的值*16(16为10进制,二进制的话为4位),这样生成一个20位大小的数据,然后在此基础上加上一个16位的偏移,组成最后的20位物理地址

楼主有什么不明白的,回帖
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved