• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MASMのセグメント+オフセットと物理アドレス値)

MASMのセグメント+オフセットと物理アドレス値

このQ&Aのポイント
  • MASMではセグメント値+オフセット値を使ってアドレス値を指定します。
  • セグメント+オフセットは一対一の対応で、物理アドレス値を確定します。
  • しかし、物理アドレス値からはセグメント+オフセットを一意に特定することはできません。

質問者が選んだベストアンサー

  • ベストアンサー
  • e3tatsu
  • ベストアンサー率51% (78/151)
回答No.3

><<機械語で与えられた情報(セグメントとオフセットの組み合わせ)>>は其のままということですね。 >CPU内のMMUが計算するということですね。 > >これでよろしいでしょうか? OKです。

その他の回答 (2)

  • e3tatsu
  • ベストアンサー率51% (78/151)
回答No.2

機械語になってもセグメントはセグメント、オフセットはオフセットのままですよ。 アセンブリ言語と機械語の命令は原則的に1対1で対応しているという大前提を忘れないでください。 機械語で与えられた情報(セグメントとオフセットの組み合わせ)から物理アドレスを計算するのはCPU内にあるMMUの仕事です。 ただCPUの動作モード(RealMode or ProtectedMode)によってセグメント機構の動きは大きく違いますのでそこは注意です。

PHYOPHYO
質問者

補足

何となく解りました。機械語に成った時、”セグメント値” + ”オフセット値” の ”セグメント値” と ”オフセット値” 情報が ”書き換えられて”  ”物理アドレス値” に書き換えてしまっていると考えてました。 <<機械語で与えられた情報(セグメントとオフセットの組み合わせ)>>は其のままということですね。 CPU内のMMUが計算するということですね。 これでよろしいでしょうか?

  • koujikuu
  • ベストアンサー率43% (429/993)
回答No.1

windows では無く MS-DOS での話ですが、セグメント値はプログラマが決めるのではなく MS-DOSが、EXEファイルをメモリにロードした時に決定されます (VRAM等固定アドレスは除く) その為EXEファイルにはセグメント値を書き換える為のリロケート情報を内部に持っています SYMDEB等でメモリに展開しないとプログラムを見ることはできません。