x86实模式段如何重叠有助于节省内存?

时间:2012-01-04 14:08:38

标签: assembly x86-16 memory-segmentation

我正在教我12岁。 8086汇编语言和昨天我们谈论的是内存,寻址和分段。我向他展示了如何将段可视化为从16字节边界开始的重叠64Kb块的序列,其中偏移是段内的8080样式指针。然后他问了一个我无法回答的问题:为什么(为什么目的)重叠

试图研究这个问题,我发现了20位数学的许多副本,并且有一些模糊的提及一些内存节省,这个方案可能允许。有人可以详细说明内存节省部分吗?或者任何其他方法来实际重叠这些重叠?

3 个答案:

答案 0 :(得分:4)

重叠越少,您对物理内存中段开始的选择就越少。这会在无用的段之间产生间隙,从而浪费内存。设计选择永远不会产生大于15个字节的间隙。这或许有点过头但是8086是在一个1兆字节足以让每个人都能满足的时代设计的。购买64千字节会给您的预算带来相当大的影响。非常珍贵,不想浪费在空白上。

答案 1 :(得分:3)

内存节省完全是以错误的方式来看待IMO。该处理器是在16位地址空间真正紧的时候出现的。事实上,其他16位地址空间处理器正在寻找银行转换方法。一个20位的地址空间是一个相当大的认可(24或32位当时只是疯狂的谈话)。他们使用寄存器而不是在外部银行转换(这是一个很难编程)。好吧,猜猜看,处理器内部是16位,所以不妨使用16位寄存器。现在,从一对16位寄存器中获取20位是一个有趣的问题。使用段作为基本段落对齐以最灵活的方式为您提供全范围(加上一点溢出,但这是一个完全不同的问题)(还记得我提到的银行转换的痛苦吗?这主要是因为无法做到这一点以细粒度的方式)。

答案 2 :(得分:2)

假设您在一条狭长的小巷里拥有代客泊车服务,因此车辆都停放在平行停车场。您的一些客户驾驶汽车只使用一个空间。其他人驾驶拉伸豪华轿车需要2个空间。停放车辆的一种方式是为每辆车分配2个空间,无论大小如何。你的索赔票据会说“车辆从0号空间开始停车(最大车辆大小为2个车位)”或“从空间2开始”或“从空间4开始”等等。

这样可行,但是它浪费了空间,因为你只为需要1的汽车预留了2个空间。所以相反,你把车辆打包在一起,车只占用一个空间而豪华轿车需要两个。您的员工知道汽车只占用一个空间,因此如果车票上写着“从空间1开始(最大车辆宽度为2个车位)”,他们就知道“汽车在太空1中,而空间2属于其他人”。汽车的空间2实际上与停在第2和第3空间的豪华轿车重叠,但是使用它或者你将会使豪华轿车凹陷是一个坏主意。