| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 977 人关注过本帖, 1 人收藏
标题:汇编8086合成20位地址的问题
只看楼主 加入收藏
asd451006071
Rank: 2
等 级:论坛游民
帖 子:23
专家分:20
注 册:2008-11-30
结帖率:75%
收藏(1)
已结贴  问题点数:20 回复次数:3 
汇编8086合成20位地址的问题
王爽的汇编语言中,说过:“用段地址<<4 &偏移地址”,我有一点不明白的是内部实现原理:
(1),我以前看视频(具体的不记得)说:段基址什么的XXXXh 低两位不用什么的?就是说是不是段地址和偏移地址的4个位都用上,在段地址*4+编译地址,还是约定段地址和偏移地址有一些部分(数位)不用?
(2).如果段地址和偏移地址的数位都用上,那么合成的时候不会出现问题吗?
搜索更多相关主题的帖子: 汇编 地址 
2010-11-13 23:28
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:6 
段地址*16+偏移地址
如:2345H:6789H的物理地址为29BD9H
即2345H*10H+6789H
2010-11-14 16:55
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:6 
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-11-15 17:24
p8x8x8
Rank: 1
等 级:新手上路
帖 子:14
专家分:9
注 册:2009-5-22
收藏
得分:6 
其实只要你把段寄存器赋值了 再给出一个偏移地址 就可以达到内存线段的某一点 也就是说8086机制的0000H:0000H 的地址就是00000H
而段址的高四位是从你赋值开始 直到你再次赋值前是不变的。
2010-11-19 21:19
快速回复:汇编8086合成20位地址的问题
数据加载中...
 
   



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

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