8086当中的段寄存器重叠问题。

2025-03-22 14:38:07
推荐回答(3个)
回答1:

段重叠有部分重叠和全重叠,这两种情况都有可能发生你担心的后果,为了避免数据被覆盖,就要精确地计算各段所需占用的字节数,保证各部分不要有交叉。
如果是全重叠,各段的段地址一样,但偏移地址要不同,使各段有充分的空间可以存放信息,这样就不会发生数据覆盖了。
不是非要使用段重叠,如果觉得很难保证不出错,那就为每个段设置独立的段地址。

回答2:

假如代码段和堆栈段重叠,代码是从低向高储存(指储存地址),堆栈是从高向低储存,如果2者合计超过64K,就会发生数据覆盖。

回答3:

8086 对内存实行分段管理,每个段的大小,固定就是 64K。

如果你的内容少,占不满 64K,为了节约内存,你就可以把其它的段,安置在没有被占用的地方。

(你可以修改段寄存器的内容,来确定某个段的首地址。)

这时,段和段,就重叠了。

某个段的内容究竟有多少?

如果你实在弄不清楚,那么,就不要重叠吧。

重叠的示例如下:

各个段的范围

在图中,代码段(红色部分)占用了 64K。

紧接着的就是数据段(蓝色部分)。

但是,数据量,较少。

所以就把附加段(黄、绿色部分),重叠在数据段的下半部了。

黄色部分,就是两个段重叠的区域。