まず、メモリの1000番地に読み込まれた次のプログラムを見てください。
実行した結果、1500番地には 501 、1501番地には 5 が代入されます。
+--------+--メモリ------------------+ |[番地] | [内容] | +--------+--------------------------+ |0000 | (略) | +〜〜〜〜+〜〜〜〜〜〜〜〜〜〜〜〜〜+ |1000 |相対アドレス500番地に | | |相対アドレス501番地の | | |アドレスを代入 | +--------+--------------------------+ |1001 |相対アドレス500番地の値の | | |指し示すアドレスに5を代入 | +〜〜〜〜+〜〜〜〜〜〜〜〜〜〜〜〜〜+ |1500 |0 | +--------+--------------------------+ |1501 |0 | +--------+--------------------------+今回は、前回と比べて少々難しくなっています。
順々に説明していきましょう。
まず、1000番地の命令により相対アドレス500番地に相対アドレス501のアドレスを代入しています。
即ち、1500番地に 501 が代入されます。
次に、1001番地の命令で相対アドレス500番地の値の指し示すアドレスに5を代入しています。
相対アドレス500番地の値は 501 なので相対アドレス501に5を代入するのと同じ処理になります。
一見、意味を成さないような処理にも思えますが、
これからのC言語のプログラミングにおいて大きな意味を示すので、
ここは必ず理解しておいてください。
メモリ +--------+------+ |[番地] |[内容]| +--------+------+ |1000 | (略) | プログラム開始地点 +〜〜〜〜+〜〜〜+ |1500 |501 |-----+ +--------+------+ | アドレスを指し示す |1501 |0 | <---+ +--------+------+