ターゲット・アドレッシングとメモリ空間への遠隔作用
右の部屋(Bフィールド)の番地を変えることで、自分の位置を動かさずに遠くの箱を書き換える仕組み
今度は足す数値(A=#5)はそのままにして、足す相手の場所(B) を変えてみましょう! 現在 0000 番地は ADD.AB #5, $1 なので、1つ下の 0001 番地に足し算してしまいます。
🎯 やってみよう 0000 番地の B(右の番地) を $1 から $2(2つ下の箱) に書き換え、[STEP] を押して 0002 番地 のB値を 5 にしましょう!
1. 「どこの箱に作用するか」を決めるBフィールド
Step 9では、足す数値(A=#5)はそのままにして、0000 番地の右側の部屋(Bフィールド)を『$1』から『$2』へと書き換えました。すると、緑色のターゲット矢印が1つ下の 0001 番地を飛び越えて2つ下の 0002 番地を指し示し、[STEP] を押すと 0001 番地は無傷のまま、0002 番地のB値だけが『5』に書き換わりました。
Step 8とStep 9を並べて比較すると、機械語の2つの部屋の役割が完璧なコントラストとして浮かび上がります。 ・Step 8(Aフィールドの変更):同じ箱に対して「どれだけの大きさの作用(#1 ➔ #5)を与えるか」を変えた。 ・Step 9(Bフィールドの変更):同じ大きさの作用(#5)を「どの場所にある箱($1 ➔ $2)に届けるか」を変えた。
つまり、Aフィールドが「作用の強さ(What / How much)」を制御するのに対し、Bフィールドは「作用が届く空間的な距離(Where)」を制御しているのです。
[0000] ADD.AB #5, $2 ──┐
[0001] DAT.F #0, #0 │ (Bypassed! Untouched at 0)
[0002] DAT.F #0, #5 ◄─┘ (Target $2 = 0000 + 2: B-value becomes 5)2. CPUの「アドレスバス」とランダムアクセスメモリ(RAM)
0000 番地にいる命令が、間の 0001 番地を一切通らずに、いきなり 0002 番地の箱を開けて書き換えることができるのはなぜでしょうか?
私たちが普段聞く「RAM(Random Access Memory:ランダムアクセスメモリ)」という言葉の「ランダムアクセス」とは、「デタラメにアクセスする」という意味ではありません。「メモリのどの番地(1番地隣だろうが、400番地離れた場所だろうが)に対しても、途中の箱を順番に辿ることなく、すべて同じ1サイクルの時間で直接(ダイレクトに)アクセスできる」という意味です。
古いカセットテープや磁気テープ(シーケンシャルアクセスメモリ)では、100メートル先の曲やデータを読み書きするためには、物理的にテープをキュルキュルと巻き取って途中の部分をすべて通過しなければなりませんでした。しかし現代のRAMでは、CPUから各メモリ箱へ「アドレスバス(Address Bus:番地指定用の配線束)」が網の目のように繋がっています。Bフィールドに『$2』と書けば0002番地の扉が、『$400』と書けば0400番地の扉が、距離に関係なく一瞬で開くのです。
3. 相対アドレス計算(PC + Offset)のハードウェア機構
MARSプロセッサが『$2』という相対番地を解決するとき、内部では「実効アドレス(Effective Address)の計算」が行われています。 計算式は極めてシンプルです: 【実効アドレス = 現在のプログラムカウンタ(PC) + 相対オフセット(Offset)】
今回、命令が置かれていたのは『0000』番地(PC = 0)で、Bフィールドのオフセットは『$2』でしたから、実効アドレスは『0 + 2 = 0002番地』となります。もし同じ『ADD.AB #5, $2』という命令が『0010』番地に置かれていたなら、実効アドレスは『10 + 2 = 0012番地』になります。常に「自分が立っている行を0(基準点)として、下にいくつ(プラス)、上にいくつ(マイナス)か」を数える感覚を身につけましょう。
🔒 MISSION CLEAR で講義ノートの全編が解放されます
上段の実験シミュレーターでミッションを達成すると自動的に全編がアンロックされます。(下のボタンから今すぐ全文を先に読むことも可能です)