COREWAR

/
Step 19: お手本観察:爆撃機「Dwarf」をSTEP実行で解剖する
🎯12サイクル以上実行して爆撃ループを観察する(0/12)

ミッション一覧 (全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
👁️ お手本観察モード([STEP] で観察)
[番地][命令 (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 19 OF 30第4章:戦闘用Warriorの解剖と並列・知覚制御⏱ 読了目安:約5分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

伝説の爆撃機「Dwarf」の4行解剖——ポインタ演算と間接投射の完全調和

これまでに学んだ「ADD・MOV・JMP・DAT・@ポインタ」が1つの生命体として結晶化した古典的名作

#Dwarf (A. K. Dewdney)#Pointer Arithmetic#Dual-Role DAT#3-Cycle Bombing Loop#Self-Preservation
🔬Step 19: お手本観察:爆撃機「Dwarf」をSTEP実行で解剖する

第4章では、いよいよ本物のバトル用プログラム(Warrior)を解剖します! まずはこれまでに学んだ4つの要素が完璧に合体した伝説の爆撃機 「Dwarf(ドワーフ)」 の完成形を観察しましょう:

1. 0000: ADD.AB #4, $3 ➔ 3つ下の宛先メモ(0003番地)のB値に 4 を足す。 2. 0001: MOV.I $2, @2 ➔ 0003番地の DAT 爆弾を、宛先メモ(@2)が指す場所へ投下! 3. 0002: JMP.A $-2, #0 ➔ 0000番地へ戻って繰り返す(結果、4マスおきに次々と爆弾が落ちる!)。 4. 0003: DAT.F #0, #0 ➔ 宛先メモ 兼 投げるデータ爆弾。

🎯 やってみよう(編集不要) [STEP] を繰り返すか [PLAY] を押して、4マスおき(0007, 0011, 0015番地…)に次々と DAT 爆弾が投下される様子を観察しましょう!

1. 4行に凝縮された「戦う状態機械」の完成形

第4章の最初となるStep 19では、A. K. デュードニーが1984年の初代CoreWar論文で「Impの好敵手」として発表した歴史的プログラム『Dwarf(ドワーフ)』の完成形をステップ実行で解剖しました。

Dwarfのコードはわずか4行(0000〜0003番地)しかありません。しかしその4行には、あなたが第1章から第3章までの18ステップで積み上げてきた知識のすべてが、1つの無駄もなく完璧な歯車として噛み合っています。 ・1行目(0000):『ADD.AB #4, $3』 ➔ ポインタ演算器(3つ下の0003番地のB値に、毎周 4 を足して狙いを進める) ・2行目(0001):『MOV.I $2, @2』 ➔ 間接投射砲台(2つ下の0003番地のDAT爆弾を、0003番地のポインタが指す遠くの番地へ投下する) ・3行目(0002):『JMP.A $-2, #0』 ➔ 循環心臓部(2つ上の0000番地へ戻り、3サイクルで1発の爆撃ループを永久に繰り返す) ・4行目(0003):『DAT.F #0, #0』 ➔ 宛先ポインタ 兼 弾薬庫(最初は0、ループごとに 4, 8, 12... と増える)

┌──► [0000] ADD.AB #4, $3  ──(1. Increments [0003].B: +4, +8, +12...)──┐
│    [0001] MOV.I  $2, @2  ──(2. Fires [0003] to 0003 + [0003].B)──────┼──► 💥 [0007], [0011], [0015]...
└─── [0002] JMP.A $-2, #0  ◄─(3. Loops back to 0000 every 3 cycles)    │
     [0003] DAT.F  #0, #0  ◄─(4. Dual Role: Target Pointer & Bomb!)────┘

2. 0003番地「DAT」が演じる驚異の一人二役(ポインタ兼弾薬)

Dwarfの設計で最もエレガント(芸術的)な部分は、4行目(0003番地)の『DAT』の使われ方にあります。2行目の『MOV.I $2, @2』という命令の左右のオペランド($2 と @2)をよく見てください。 ・左のAオペランド『$2』は、「何を投げるか(コピー元)」を指定しています。0001番地から2つ下($2)なので、『0003番地のDAT箱そのもの』を爆弾として拾い上げています。 ・右のBオペランド『@2』は、「どこへ投げるか(コピー先ポインタ)」を指定しています。同じく2つ下(@2)にある『0003番地のDAT箱のB値』を宛先メモとして読み取り、その番地へ爆弾を飛ばしています。

つまり、0003番地のたった1つの『DAT』箱が、「狙う番地を記憶するポインタ変数」と「敵に投げつけるDAT爆弾のテンプレート」という一人二役を同時にこなしているのです! そのため、1発目に0007番地へ着弾する爆弾の中身は『DAT #0, #4』になり、2発目に0011番地へ着弾する爆弾の中身は『DAT #0, #8』になります。DATの中身の数字が4だろうが8だろうが、踏んだ敵が即死する『DAT爆弾』としての威力は全く同じであるため、ポインタ箱と弾薬箱をわざわざ2つに分ける必要がなく、コードを最小の4行に圧縮できているのです。

3. なぜDwarfは一周して戻ってきても自分を爆撃しないのか?

もう1つ、Dwarfには数学的な魔法が隠されています。Dwarfは3サイクルごとに4マスずつ先(0007, 0011, 0015...)へ爆弾を投げ続けます。やがて800マス(または8,000マス)の円環メモリをぐるりと一周して、自分の本体がいる 0000〜0003 番地の近くへ爆弾が戻ってきたとき、Dwarfは自分で自分を爆撃して自滅してしまわないのでしょうか?

計算してみましょう! 爆弾は必ず『0003番地(ポインタの位置)+ 4の倍数』の番地に落ちます。 800(または8,000)は「4で綺麗に割り切れる数(4の倍数)」です。したがって、メモリを一周して戻ってきたとき、爆弾が落ちるのは 0799 番地(0003 - 4)であり、その次の爆弾は『0799 + 4 = 0003 番地(自分自身のDAT箱の上!)』に着弾します! 自分の命令コードがある 0000, 0001, 0002 番地は綺麗に飛び越され、0003 番地のDAT箱の上に同じDATが上書きされるだけなので、Dwarfは永久に自爆することなく何周でも安全に爆撃を続けられるのです。

🔒

🔒 MISSION CLEAR で講義ノートの全編が解放されます

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