段的绝对地址:偏移转换

时间:2014-09-25 17:08:15

标签: assembly

我正在学习和阅读有关细分:偏移转换的所有内容。我们的老师告诉我们如何从S:O计算绝对地址,这很简单(* 10 +偏移)。他要求我们将S:O转换成绝对的,我告诉他那是不可能的,他要求我们做进一步的研究'在它上面。

我已经了解了整个重叠段以及有多少S:O可以指向相同的绝对地址。我在这里也读了一个较旧的问题: Calculate Segment:Offset from absolute address

答案说,只使用绝对地址是不可能的,这很有道理。

然后这里有这个问题: finding physical address in 8086 microprocessor

他只是简单地拆分绝对地址,添加零并使其成为S:O。现在我很困惑,这是对的吗?他只是使用绝对地址。

这不是一个家庭作业问题或任何事情。我只想确认我的答案是正确的,即不可能。问题只是08F1:0100,我可以将其翻译为09010。如果我试图获得至少1或2个有效的S:O地址,我该怎么办?

1 个答案:

答案 0 :(得分:1)

正如您所说,要从Segment:Offset对转到您执行的绝对地址

Absolute = Segment * 16 + Offset

由于SegmentOffset都是16位实体,很明显,有多对值的段和偏移量产生相同的绝对地址。

通常在过去(我已经十六年没有对16位进行任何编码),当朝另一个方向进行编码时,我只会将完整的20位地址的4位不能放入在偏移量的段部分中表示,因此,对于您的绝对地址0x9010,段:偏移地址将为0x901:x0

请注意,产生完整20位值0x9010的段和偏移值的任意组合对于访问相关内存都同样有效,因此没有任何一种组合比其他组合更好用于访问,例如,单个字节。然而,保持偏移部分的微小部分尽可能小,允许迭代最大可能的缓冲区而不必修改地址的段部分。