COREWAR

/
Step 9: 足す「相手の場所(B)」を変えてみよう
🎯0002番地のB値を 5 にする(0/5)

ミッション一覧 (全30ステップ)

第1章:画面とメモリの基本 (1-6)
BASIC★☆☆
Step 1: 時間を進める「STEP」ボタン
🔒
BASIC★☆☆
Step 2: プロセスの停止と「RESET」での復旧
🔒
BASIC★☆☆
Step 3: 「編集できる状態」と「実行中の状態」EDIT
🔒
BASIC★☆☆
Step 4: メモリの箱の3つの部屋(右の部屋 B を変える)EDIT
🔒
BASIC★☆☆
Step 5: 左の部屋(A)と右の部屋(B)を書き換えるEDIT
🔒
BASIC★☆☆
Step 6: 「数値(#)」と「番地($)」の記号の違いEDIT
第2章:代表的な命令とループ (7-13)
🔒
ARITHMETIC★☆☆
Step 7: 足し算の命令「ADD」の観察
🔒
ARITHMETIC★☆☆
Step 8: 足す「数値(A)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 9: 足す「相手の場所(B)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 10: 引き算の命令「SUB」を使ってみようEDIT
🔒
BASIC★☆☆
Step 11: 箱を丸ごとコピーする命令「MOV」EDIT
🔒
CONTROL★☆☆
Step 12: 時間を巻き戻すジャンプ命令「JMP」EDIT
🔒
CONTROL★☆☆
Step 13: 簡単なプログラムを作ろう(自動カウンター)EDIT
第3章:ノイマン型とデジタル生命 (14-18)
🔒
BASIC★☆☆
Step 14: なぜ「DAT」が爆弾になるのか?EDIT
🔒
BASIC★☆☆
Step 15: 自分自身の命令をコピーする(コード=データ)EDIT
🔒
BASIC★☆☆
Step 16: お手本観察:最古の生命体「Imp」をSTEP実行する
🔒
BASIC★☆☆
Step 17: Impの簡単な変更(コピー先の観察と実験)EDIT
🔒
ARITHMETIC★★☆
Step 18: 間接参照(@ポインタ)の仕組みを知るEDIT
第4章:伝統的アルゴリズム (19-24)
🔒
STRATEGY★★☆
Step 19: お手本観察:爆撃機「Dwarf」をSTEP実行で解剖する
🔒
STRATEGY★★☆
Step 20: Dwarfの簡単な変更(爆弾の間隔を変える)EDIT
🔒
STRATEGY★★☆
Step 21: 実戦デビュー:爆弾の間隔を調整して標的を破壊せよEDIT
🔒
CONTROL★★☆
Step 22: お手本観察:分裂命令「SPL」と増殖の仕組み
🔒
CONTROL★★☆
Step 23: お手本観察:条件比較命令「SEQ / CMP」で敵を探すEDIT
🔒
STRATEGY★★☆
Step 24: お手本観察と変更:防衛罠「Imp-Gate」でImpを止めろEDIT
第5章:実戦改造と総合演習 (25-30)
🔒
STRATEGY★★☆
Step 25: 【Stone(石)】高速爆撃機の観察とステップ幅の改造EDIT
🔒
STRATEGY★★☆
Step 26: 【Paper(紙)】自己複製スウォーム「Mice」を観察する
🔒
STRATEGY★★★
Step 27: 【Paperの改造】クローン投下距離を変更して増殖せよEDIT
🔒
STRATEGY★★☆
Step 28: 【Scissors(鋏)】索敵スキャナーの観察とスキャン間隔の改造EDIT
🔒
STRATEGY★★★
Step 29: 【Trap(罠)】敵の魂を誘拐する「Vampire」の観察と改造EDIT
🔒
STRATEGY★★★
Step 30: 卒業試験:愛機のチューニングと総合バトルEDIT
🟢 編集モード(セルをクリックして変更できます)
[番地][命令 (Opcode)][A (左の値)][B (右の値)]
📦 データ領域 / 爆弾 (DAT)
0000
▼MOV
#
$
👈 ここを変更
0001
▼MOV
<
<
0002
↺JMN
$
$
0003
❖SPL
@
#
0004
+ADD
#
$
0005
↺JMP
$
$
0006
■DAT
$0
$0
++ 命令を追加
0007
■DAT
$0
$0
0008
■DAT
$0
$0
0009
■DAT
$0
$0
0010
■DAT
$0
$0
0011
■DAT
$0
$0
0012
■DAT
$0
$0
0013
■DAT
$0
$0
0014
■DAT
$0
$0
0015
■DAT
$0
$0
0016
■DAT
$0
$0
0017
■DAT
$0
$0
0018
■DAT
$0
$0
0019
■DAT
$0
$0
0020
■DAT
$0
$0
0021
■DAT
$0
$0
0022
■DAT
$0
$0
0023
■DAT
$0
$0
0024
■DAT
$0
$0
0025
■DAT
$0
$0
0026
■DAT
$0
$0
0027
■DAT
$0
$0
🏟️ARENA (20 ROWS)SCOPE: 0000 - 0019
[メモリ空間 800番地 (20行 × 40列)]左のエディタと1対1で同期
TASKS: 0
CYC: 0
📖 講義ノート // STEP 09 OF 30第2章:基本命令と自律プログラムの構築⏱ 読了目安:約4分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

ターゲット・アドレッシングとメモリ空間への遠隔作用

右の部屋(Bフィールド)の番地を変えることで、自分の位置を動かさずに遠くの箱を書き換える仕組み

#Destination Addressing#Relative Offset#Address Bus#Spatial Reach#Memory Mutation
🔬Step 9: 足す「相手の場所(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 で講義ノートの全編が解放されます

上段の実験シミュレーターでミッションを達成すると自動的に全編がアンロックされます。(下のボタンから今すぐ全文を先に読むことも可能です)