dポイントプレゼントキャンペーン実施中!

素人、アセンブリ言語をかじっています。専門的な教育は受けてません。
MASMではアドレス値を指定するのに

セグメント値+オフセット値でしていします。
セグメント値を確定しオフセット値が決まれば当然物理アドレス値はきまります。

セグメント+オフセット -> 物理アドレス値 :一対一に対応しています。

しかし
物理アドレス値 -> セグメント+オフセット :一対一の対応 不可
だと思います。
セグメント値がきまらなければ一対一の対応はしませんし、物理アドレスからセグメント値は決められないと思っています。
物理アドレスからセグメント値がきまるのでしょうか?

この辺の対処はどうなっているのでしょうか?
MASM -> 機械語 
対応はできますが、
機械語->MASM
どう対応するのか?
をふくめて、どうなっているのでしょうか

宜しく願います。

A 回答 (3件)

><<機械語で与えられた情報(セグメントとオフセットの組み合わせ)>>は其のままということですね。


>CPU内のMMUが計算するということですね。
>
>これでよろしいでしょうか?
OKです。
    • good
    • 0

機械語になってもセグメントはセグメント、オフセットはオフセットのままですよ。


アセンブリ言語と機械語の命令は原則的に1対1で対応しているという大前提を忘れないでください。
機械語で与えられた情報(セグメントとオフセットの組み合わせ)から物理アドレスを計算するのはCPU内にあるMMUの仕事です。

ただCPUの動作モード(RealMode or ProtectedMode)によってセグメント機構の動きは大きく違いますのでそこは注意です。

この回答への補足

何となく解りました。機械語に成った時、”セグメント値” + ”オフセット値” の ”セグメント値” と ”オフセット値” 情報が ”書き換えられて”  ”物理アドレス値” に書き換えてしまっていると考えてました。

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

これでよろしいでしょうか?

補足日時:2012/09/18 21:51
    • good
    • 0

windows では無く MS-DOS での話ですが、セグメント値はプログラマが決めるのではなく


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!