[英]Absolute Address to Segment:Offset Conversion
我正在学习和阅读有关Segment:Offset转换的信息。 我们的老师告诉我们如何从S:O计算绝对地址,这非常简单(* 10 +偏移)。 他要求我们将S:O转换为绝对值,我告诉他这是不可能的,他要求我们对此进行“进一步研究”。
我已经阅读了整个重叠的段,以及有多少S:O可以指向同一绝对地址。 我在这里也阅读了一个较旧的问题:从绝对地址计算Segment:Offset
答案说不可能只使用绝对地址,这是很合理的。
然后是这里的问题: 在8086微处理器中查找物理地址
他只是将绝对地址拆分成零,然后加零并使其变为S:O。 现在我很困惑,这是正确的吗? 他只是使用绝对地址。
这不是家庭作业问题。 我只想确认我的答案正确无误。 问题是08F1:0100
,我可以将其转换为09010
。 如果我试图获得至少1或2个有效的S:O地址,该怎么办?
如您所说,要从Segment:Offset对转到绝对地址,您需要
Absolute = Segment * 16 + Offset
由于Segment
和Offset
都是16位实体,因此很明显,段和偏移有多对值会产生相同的绝对地址。
通常在过去(十年来我一直没有对16位代码进行编码),当朝另一个方向前进时,我只将完整的20位地址中的那4位放置在偏移量中的段部分,因此,对于您的绝对地址0x9010
,segment:offset地址将为0x901:x0
。
请注意,分段和偏移值的任何组合产生0x9010
的完整值0x9010
,对于访问所讨论的内存同样有效,因此,没有任何一种组合比其他组合更能访问例如单个字节。 但是,将偏移部分的大小保持尽可能小允许在最大可能的缓冲区上进行迭代,而不必修改地址的段部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.