为什么段的大小不能超过64K

如题所述

嗯,这个问题问的好,相信有很多人,对这点不解:为什么实模式下每个段不能超过64K的大小呢。其实如果从最底层去理解就很好理解了。Intel的CPU给上层的程序员提供了两种方式的内存寻址办法:一个是实模式寻址,另一个是保护模式寻址。
实模式下,寻址采用这样的方式:
段基地址:偏移地址
物理地址=段基地址*16+偏移地址
在当时设计CPU的时候,Intel将所有的寄存器都设计为16位,所以根据上述物理地址公式可以看出,当一个段基地址确定下来之后,就只有偏移决定了可寻址的范围,所以一个段的大小被限定在了16bit地址空间里,即2^16=64K
总结一句话:最根本的说,一个段的长度由CPU的寻址方式和寄存器的长度决定。
总线为20位 但是段寄存器为16位的
逻辑地址的形式为,
段地址:偏移地址
16位的偏移地址最大可表示64K
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-27
16位地址线最大能寻址的范围就是2^16 =64 K

为什么段的大小不能超过64K
嗯,这个问题问的好,相信有很多人,对这点不解:为什么实模式下每个段不能超过64K的大小呢。其实如果从最底层去理解就很好理解了。Intel的CPU给上层的程序员提供了两种方式的内存寻址办法:一个是实模式寻址,另一个是保护模式寻址。实模式下,寻址采用这样的方式:段基地址:偏移地址 物理地址=段基地址...

堆栈段为什么小于等于64KB
一个段,是在段寄存器不变的条件下,偏移地址可变,所确定的范围。偏移地址的变化范围,就是0000H~FFFFH,这就是64K。不仅仅是堆栈段,其它的段,地址范围,都是在64K之内的。

汇编基础 关于逻辑段
所以当两个段寄存器取不同值时就有可能使两个逻辑段重叠或者相连或者间隔开来。至于段的实体可能是指物理内存中的段,那当然不能重叠。否则访问就会出错。比方说几个内存条各是64K大小的,那自然要把它们在更高级地址上分开来。总之你理解了那个20位地址怎么来的就应该明白了。再重复一下 段寄存器作为...

一个栈段最大可以设置多大??为什么呢?
1 一个栈段最大可以设置64K 即地址空间为 0000H~FFFFH.2 原因是每一个堆栈段的偏移地址(即有效地址)是16位的 其最小值为0000H 最大值为FFFFH.由0000H~FFFFH整个空间 有64K个单元。呵呵 可惜没有加分呀 就选满意回答吧 ...

程序代码的区段不可以大于或等于 64KB
每个段的大小是定死的,就是64k,这是据内存地址查询的要求而定的。但是继386之后寻址限制放宽了,应该就没有这个问题了吧。我就不太清楚了。补充:1086机器的段内寻址使用4位16进制数,16的4次方+16的3次方+16的2次方+16的1次方 = 64k(65535)因此,1086机器的段最大只能是64k 这回清楚了吧。

相邻段地址之间的最小距离为什么是64k
举个例子:第一个段地址为2000:0000H,对应物理地址为20000H;相邻段地址为2001:0000H,对应物理地址为20010;20000H和20010H相差10H个字节,10H是16D,所以说相邻段地址之间的最小距离为16KB。

LDT为什么最大64kb
由此,我们可以看出,一个段具备两个因素:Base Address和Limit(段的最大长度),而对一个内存地址的访问,则是需要指出:使用哪个段?以及相对于这个段Base Address的Offset,这个Offset应该小于此段的Limit。当然对于16-bit系统,Limit不要指定,默认为最大长度64KB,而 16-bit的Offset也永远不可能大于此Limit。我们在实际...

为什么8086的段不能大于64KB 脑袋抽筋
8086的段寄存器是16位的 所以不会超过64k

8086\/8088系统中,存储器为什么要分段,一个段的最大和最小各为多少字节...
8086\/8088系统中,存储器分段的主要目的是便于存储器的管理,使得可以用16位寄存器来寻址20位的内存空间。一个段最大为64KB,最小为16B。存储器一般用来保存程序的中间结果,为随后的指令快速提供操作数,从而避免把中间结果存入内存,再读取内存的操作。由于存储器的个数和容量都有限,不可能把所有中间结...

一个段的范围是64K吗?
一个段,范围就是64K。段和段,可以重叠,甚至可以完全重合,即共用同一个64K。那么,就是可以随便分,多少段都行。 如果不重叠,最多就是分成16个段。因为:16 × 64K = 1M。分段技术只是逻辑上的概念,并不是说非要把1MB的内存空间划分了,利用段+偏移来寻址,这样有助于数据的访问,不同的段...

相似回答
大家正在搜