2014-09-25 121 views
1

我正在學習和閱讀關於段:偏移轉換和所有。我們的老師告訴我們如何計算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

正如你所說,從段去:offset對爲絕對地址,你做

Absolute = Segment * 16 + Offset 

由於SegmentOffset都是16位的實體,很顯然,有多個值對的段和偏移量產生相同的絕對地址。通常在過去(我十多年來沒有編碼過任何16位的數據),當走向另一個方向時,我只會把那些不能完整的20位地址的4位數據將在偏移量的段部分中表示,因此,對於您的絕對地址0x9010,段:偏移量地址將爲0x901:x0

請注意,產生完整的20位值0x9010的段和偏移量值的任意組合對於訪問有問題的內存來說同樣適用,因此沒有任何組合比其他訪問方式更好,比如說一個字節。然而,保持偏移部分的大小盡可能小允許迭代最大可能的緩衝區而不必修改地址的段部分。