Segment:Offset
のアドレスはSegment
* 0x10 + Offset
と計算できます。しかし、どのように私は反対を計算するのですか?セグメントの計算:絶対アドレスからのオフセット
など。 0xF4170
からF400:0170
まで、0xACF04
からABCD:1234
まではどうすればよいですか?
Segment:Offset
のアドレスはSegment
* 0x10 + Offset
と計算できます。しかし、どのように私は反対を計算するのですか?セグメントの計算:絶対アドレスからのオフセット
など。 0xF4170
からF400:0170
まで、0xACF04
からABCD:1234
まではどうすればよいですか?
複数のSegment:Offset
ペアが同じリニアアドレスにマップできるため、最初にリニアアドレスとともにベースまたはオフセットのいずれかを指定する必要があります。
ので、我々は、セグメント0xF400
とリニアアドレス0xF4170
を持っている場合、我々は0x170
でオフセットされて0xF4170 - (0xF400 << 1)
を取得します。
リニアアドレスを知るだけでこれを行うのは、実際にはほとんど不可能です。我々はセグメントアドレスは16バイトが整列しなければならないという事実を乱用した場合、我々は機能を持っているでしょう:
Segement + k16 = (linear >> 1) & ~16
もちろんの、これは非常に不正確であり、唯一のアドレスの可能な範囲を提供します。
その回答に感謝します。とにかく、ペアの複数の可能性がある場合、私は気にしません。セグメント:オフセット。あなたはセグメントをオフセットとして知っていなくても、どんな種類の "ブルートフォース"もせずに、それらのどれか1つだけを計算する方法を知っていますか? – muffel
@muffel:最新の回答をご覧ください。これは、2つの未知数を解くことができる2つ以上の方程式またはいくつかの副作用が必要な問題の1つです。 – Necrolis
おかげで、ありがとう! – muffel