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

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

这样 多浪费呀....
younggay
[第1楼]   [ 回复时间:2008-05-22 17:59 ]   [引用]   [回复]   [ top ] 
荣誉值:273
信誉值:0
注册日期:2008-01-23 20:23
楼主还是不了解情况啊。
寻址能力是由数据总线确定的。8086就20根地址总线,所以寻址最大为FFFFFH。
而使用段地址和偏移地址进行寻址的设计,是因为很多硬件和软件方面的原因进行最终设计的,并不是楼主想的那样。
这个设计理念单单学习汇编是不够的。
norwolfli
[第2楼]   [ 回复时间:2008-05-23 09:22 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:2
注册日期:2008-05-15 17:49
不浪费,如楼上所说:寻址能力是由数据总线确定的。8086就20根地址总线,所以寻址最大为FFFFFH

16位机器怎么才能表示20位的地址呢,采用了段地址左移4位+偏移地址,刚好20位。如果象楼主那样说,左移个千八百位的,表示的不是更多,当然可以,不过没必要啊,只要能表示20位的地址就OK了。
black
[第3楼]   [ 回复时间:2008-05-23 09:35 ]   [引用]   [回复]   [ top ] 
荣誉值: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位物理地址

楼主有什么不明白的,回帖
silekey
[第4楼]   [ 回复时间:2008-05-23 10:37 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:4
注册日期:2008-05-22 14:44
明白了,因为10FFEF 与FFFFF最接近对吧?

那么这样的话,是不是有些地址是无效的呢?
比如FFFF:FFFF = FFFF0 + FFFF = 10 FFEF,
而10FFEF > FFFFF
silekey
[第5楼]   [ 回复时间:2008-05-23 10:40 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:4
注册日期:2008-05-22 14:44
不浪费,如楼上所说:寻址能力是由数据总线确定的。8086就20根地址总线,所以寻址最大为FFFFFH

16位机器怎么才能表示20位的地址呢,采用了段地址左移4位+偏移地址,刚好20位。如果象楼主那样说,左移个千八百位的,表示的不是更多,当然可以,不过没必要啊,只要能表示20位的地址就OK了。
------------------
回复:

左移个千八百位当然可以啦,但是中间就有很多数值无法表示咯。。。
silekey
[第6楼]   [ 回复时间:2008-05-26 11:12 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:4
注册日期:2008-05-22 14:44
此贴由 贴主 于 [ 2008-05-26 11:12 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(younggay):5分   2楼(norwolfli):2分   3楼(black):3分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved