COREWAR

/
Step 12: 時間を巻き戻すジャンプ命令「JMP」
🎯0001番地の JMP のA値を -1(1行上へ戻る)にする(0/-1)

ミッション一覧 (全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 12 OF 30第2章:基本命令と自律プログラムの構築⏱ 読了目安:約5分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

無条件分岐命令「JMP」とループ構造——空間の有限性を時間の無限性へ変える

プログラムカウンタ(PC)の流れを書き換える制御転送命令と、チューリング完全への第一歩

#JMP (Jump)#Control Flow#Program Counter Manipulation#Infinite Loop#Structured Program Theorem
🔬Step 12: 時間を巻き戻すジャンプ命令「JMP」

これまでのプログラムは、数行進むと下の DAT にぶつかって停止してしまいました。 プログラムが死なずに動き続けるには、JMP(ジャンプ)命令 で実行ポインタを上の行へ戻して ループ(繰り返し) を作ります!

- JMP の飛び先は A(左の番地) で指定します。 - マイナスの数字($-1)を指定すると、「1つ上の行(0000番地)へ戻る」という意味になります!

🎯 やってみよう 2行目(0001 番地)の JMP の A(左の番地) を $0 から $-1(- ボタンを1回押す)に変えて、[PLAY](または [STEP] 連打) で Cycle 10 以上 までループさせてみましょう!

1. 自然落下するプログラムカウンタに逆らう「JMP」

Step 1からStep 11までの実験では、プログラムカウンタ(PC:光る実行行)は常に上から下へ(0000 ➔ 0001 ➔ 0002...)と重力に従うように1行ずつ落ちていくだけでした。そのため、数行の命令を実行し終えると、必ず下にある『DAT』にぶつかってプロセスが死んでしまいました。

もしプログラムが上から下へ1回通るだけで終わってしまうなら、100万回の計算をするためには100万行のコードを書かなければなりません。この限界を打ち破り、わずか数行のコードに「永遠の命」を与えたのが、今回体験した無条件ジャンプ命令『JMP(Jump)』です!

『ADD』や『MOV』が「メモリ箱の中のデータ」を書き換える命令だったのに対し、『JMP』はメモリ箱には一切手を触れず、なんと「CPU自身のプログラムカウンタ(PC:次に実行する番地)を直接書き換える」という特別な命令(制御フロー命令)なのです。

[0000] ADD.AB #1, $2  ◄──┐ (Cycle 1, 3, 5, 7, 9...)
         │               │
         ▼               │JMP.A $-1 (Rewrites PC = 0001 - 1 = 0000!)
[0001] JMP.A $-1, #0  ───┘ (Cycle 2, 4, 6, 8, 10...)
[0002] DAT.F  #0, #0       (Never stepped on! Safe below the loop)

2. 負のオフセット($-1)が創り出す「ループ(反復構造)」

今回のミッションでは、2行目(0001 番地)にある『JMP.A $0, #0』の左の値(Aフィールド)を『$-1』に変更しました。 ・もし『JMP.A $0』のままだと、飛び先は「0001 + 0 = 0001番地(自分自身の行)」になるため、その場で足踏みするだけの無意味なループになります。 ・これを『JMP.A $-1』に変えると、飛び先は「0001 - 1 = 0000番地(1つ上の行)」になります!

その結果、何が起きたでしょうか? 1サイクル目:0000 番地の『ADD.AB #1, $2』を実行し、PCが 0001 番地へ進む。 2サイクル目:0001 番地の『JMP.A $-1, #0』を実行し、PCが 0000 番地へと巻き戻される! 3サイクル目:再び 0000 番地の『ADD.AB #1, $2』が実行される!

空間的にはたった2行しかないプログラムが、時間を巻き戻すループ(反復構造)を手に入れたことで、0002 番地のDATに落ちることなく、Cycle 10、Cycle 100、Cycle 1000 へと半永久的に生き続けながら足し算を繰り返す存在へと進化したのです。

3. 構造化定理と「生きたプロセス」の条件

1966年、計算機科学者のコラド・ベーム(Corrado Böhm)とジュゼッペ・ヤコピーニ(Giuseppe Jacopini)は、「どんなに複雑なコンピュータ・プログラムも、①順次進行(上から下へ進む)、②反復(ループ)、③条件分岐のたった3つの制御構造だけで書ける」という歴史的な定理(構造化定理)を証明しました。

また、通常のビジネスアプリでは「終わらないループ(無限ループ)」はバグとして嫌われますが、OS(オペレーティングシステム)の心臓部やゲームのメインループ、そしてCoreWarのデジタル生命においては話が全く逆です。彼らにとって「ループが止まること」はすなわち「死(システム停止)」を意味し、JMPによって永遠に回り続けるループこそが、生命の「心臓の鼓動(ハートビート)」そのものなのです。

🔒

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

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