我正在学习和阅读有关细分:偏移转换的所有内容。我们的老师告诉我们如何从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地址,我该怎么办?
答案 0 :(得分:1)
正如您所说,要从Segment:Offset对转到您执行的绝对地址
Absolute = Segment * 16 + Offset
由于Segment
和Offset
都是16位实体,很明显,有多对值的段和偏移量产生相同的绝对地址。
通常在过去(我已经十六年没有对16位进行任何编码),当朝另一个方向进行编码时,我只会将完整的20位地址的4位不能放入在偏移量的段部分中表示,因此,对于您的绝对地址0x9010
,段:偏移地址将为0x901:x0
。
请注意,产生完整20位值0x9010
的段和偏移值的任意组合对于访问相关内存都同样有效,因此没有任何一种组合比其他组合更好用于访问,例如,单个字节。然而,保持偏移部分的微小部分尽可能小,允许迭代最大可能的缓冲区而不必修改地址的段部分。