Segment,8086的地址线是20位(可寻址空间是1M),数据线是16位(可表示的最大数是64K),所以要寻址64K以上的内存,需要使用分段方式,即用 segment offset 的形式来表示某个地址。其中segment可存放于CS、DS、ES、SS几个16位的段寄存器中,而offset也是16位。理论上这两个64K的寄存器可表示的地址范围是64K*64K即2^32个字节,而在8086的年代这样大的内存寻址范围没有实用性,所以从实用角度出发,段偏移量这种类似于“2维”的地址实际映射到线性的物理内存地址时,对应的物理单元地址其实是 段*16(即左移4个2进制位)+偏移,而不采用 段*65536+偏移。于是同一个物理单元则可以由不同的 段偏移 地址来表示。
举例来说,00000401 (以下表示地址的数字均为16进制)这个地址,按前述的计算方式,实际对应的物理单元地址是 段地址0 * 16 +偏移地址0401,即 00401 处的物理单元;同一个物理单元也可由 00400001 这对段/偏移量来表示(计算方法相同),或者由 003F0011 表示(003F0+0011)。
因此,FFFF0000或者F000FFFF表示的都是 FFFF0 这个物理地址(1M空间中倒数16个字节),但在80386等寻址能力超过了1M的CPU的机器上,若 段*16+偏移量 得到的结果大于 FFFFF 时(例如 FFFF0011,计算后得到100001)时,则会发生两种情况:一种是A20针脚没有表示有效的高电平时,此时计算会被限制在1M地址空间内,即计算值超过100000H的部分被舍弃,此时对应的物理单元地址会回滚到从00001这个单元(即00000001);另一种情况,若A20有效,则实际对应的物理单元则为100001H处的内存,这部分需要根据A20的状态决定能否访问的内存,即是大家熟知的高端内存区HMA。MSDOS中,一些软件通过使用这部分高端内存区,使实模式的DOS实际能访问的内存延伸到1M以外的64K,这64K对当时的软、硬件环境来说还是比较宝贵的资源。
本文:段基址是相对而言的?
文章地址:http://www.alipaygame.com/wenda/14935.html 转载请保留链接地址
上一篇:笔记本能玩地下城么?
下一篇:DNF现85版本4人组队配合的最佳职业是什么?
标签:段基址是相对而言的?
《4399三国杀新服》PVE模式天书乱斗限时开启!本次活动场天书乱斗还新增了挑战模式——百战天书,百战天书预设了多重关卡,玩家们通过关卡可以挑选技能获得,并挑选效果:回复体力或摸牌。而且敌将会随关卡递进越来越强大,使整场游戏趣味和挑战性更饱满,快来体验吧!...
《生死狙击2》是一款全新客户端射击游戏,在继承前作《生死狙击》的基础上,全面革新次世代画面,匠心打造全模式玩法!近未来超现实的场景呈现、超丰富的枪械玩法、流畅超激爽的战斗体验,力求让玩家享受最顶尖的枪战快感。...
绿树阴浓夏日长,暑期已至,《4399三国杀》将限时开启智斗三国模式练兵场,可邀请好友一同畅玩游乐。...