今からプログラミングを勉強するとして

このエントリーをはてなブックマークに追加
628以下、名無しにかわりましてVIPがお送りします
多分俺何か勘違いしてるんだけどだれか教えてくだせえ。

アセンブリ言語で何か書いて、機械語にアセンブルするとき、
アドレスに関係する部分はアセンブルして機械語にするときその数値が決まるみたいなことが本に書いてあったんだけど、
そもそもメモリの番地ってプログラムを実行するたびに変わると思うんだけど、
(例えばwindowsMediaPlayer.exeは、実行するたびにHDDからメモリにコピーされて実行されると思うんだけど、
毎回決まった番地にコピーされるわけではない。したがって、特定のアドレスを指す機械語がプログラムに入ってたらおかしなことになる・・・はず)
そうなると機械語訳(アセンブルされた)されたものに特定のメモリアドレス情報が入るのは変だと思うんだけど
そこらへんどうなの?