| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1617 人关注过本帖
标题:汇编语言的分段的疑问
只看楼主 加入收藏
万士心平
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-1-30
结帖率:55.56%
收藏
 问题点数:0 回复次数:5 
汇编语言的分段的疑问
寄存器是16位 而偏移地址可以是十六位为什么还要分段呢?
 如果寄存器给的段地址为FFFF 而偏移地址为FFFF 则? 怎样
  为什么要分64K  我在网上和书上看到说8086寄存器只是16位只能表示这么多,我知道是2^16是65536 即64K 可我不理解的是
  既然可以加上偏移地址  为什么还是要分成64K 不是超过了吗?
  不好意思,讲这个的时候老师有点带过。。。不得不来这里麻烦大家了 !!
搜索更多相关主题的帖子: 汇编语言 疑问 分段 
2010-10-20 20:36
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
这个的回答在本版很多次了 自己搜一下呗
2010-10-20 21:58
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
收藏
得分:0 
以下是引用万士心平在2010-10-20 20:36:42的发言:

寄存器是16位 而偏移地址可以是十六位为什么还要分段呢?
 如果寄存器给的段地址为FFFF 而偏移地址为FFFF 则? 怎样
  为什么要分64K  我在网上和书上看到说8086寄存器只是16位只能表示这么多,我知道是2^16是65536 即64K 可我不理解的是
  既然可以加上偏移地址  为什么还是要分成64K 不是超过了吗?
  不好意思,讲这个的时候老师有点带过。。。不得不来这里麻烦大家了 !!
我是这么理解你的看法的:认为一个寄存器是16位,已经能表示64K的范围,再加上偏移地址,岂不是64K+64K了吗?(不知道是不是这样?)
我觉得:8086CPU需要两个16位的寄存器来寻址,其中第一个用来表示内存中的某个“起点”,即某个范围开始的地方,然后第二个寄存器表示相对这个“起点”偏移多远。所以,它能寻址的范围(宽度)取决于表示偏移地址的寄存器的宽度。


[ 本帖最后由 ONEPROBLEM 于 2010-10-21 07:13 编辑 ]
收到的鲜花
  • 万士心平2010-10-21 22:19 送鲜花  3朵   附言:我很赞同
2010-10-21 07:12
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:0 
8086的地址总线是20 位,可以传送20位地址,达到1mb的寻址能力,而8086cpu又是16位结构....只能传送16位的地址,寻址能力只有64kb.....(汇编语言-王爽)
为了达到寻址1mb的能力(20位地址线),就采用分段的模式,用两个寄存器表示一个地址,将1mb除以64kb刚好是16,也就是说我们只要十六个64kb(也就是16位寄存器)就行了,也就是说只要拿另外一个寄存器记录十六个段就行了,但我们都知道段寄存器都是16位的(64kb),如果每个数字都表示一个段,然后首尾相接再加到一起,算下,就是64k*64k,恩,太大了,远远超出我们的1mb了(我也知道越大越好,但谁叫我们的地址线只有二十位),办法就是段覆盖,想想扑克牌,我们要用几张牌形成一个两米的长龙,也许只要十六张牌(段)就行了,但现在我们牌多(有一副),还是要完成同样任务,就把他们相互重叠着展开(相当段覆盖)。。。
覆盖倒是可以,但是不能盖到一起啊(就像一副牌全缩到一起,长度也就一张牌长),所以相邻两个段至少也得相隔16字节,(16*64KB(段)=1mb),也就是为什么段起始要是十六的倍数

2010-10-21 21:01
万士心平
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2010-1-30
收藏
得分:0 
谢谢各位了   
2010-10-21 22:20
红成
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2010-10-30
收藏
得分:0 
.....不懂  不懂太深奥了
2010-10-30 11:45
快速回复:汇编语言的分段的疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023915 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved