COREWAR

/
Step 4: メモリの箱の3つの部屋(右の部屋 B を変える)
🎯0000番地の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 04 OF 30第1章:画面操作とメモリの基本構造⏱ 読了目安:約5分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

機械語命令フォーマット(Opcode / A / B)とワード構造の解剖

なぜメモリの箱は「3つの部屋」に分かれているのか? CPUが1行の命令を解釈するための固定長ワード設計

#Instruction Word Format#Opcode#A-Field & B-Field#Fixed-Length Instruction#ICWS-94 Standard
🔬Step 4: メモリの箱の3つの部屋(右の部屋 B を変える)

メモリの列見出しヘッダーを見てみましょう。 CoreWarのメモリは、1行(1つの箱)が必ず 3つの部屋 に分かれています: 1. [命令 (Opcode)]: 何をするか(DAT, ADD, MOV など) 2. [A (左の値)]: 左側の数値(Aフィールド) 3. [B (右の値)]: 右側の数値(Bフィールド)

特に B(右の部屋) は、データをしまっておくメインの引き出しとしてよく使われます。

🎯 やってみよう 0000 番地にある DAT #0, #0 の B(右の値) だけを + ボタン(または直接クリックして数値入力)で 5 に書き換えて、[STEP] を押しましょう!

1. メモリの1行は「1つの構造体(ワード)」である

Step 4では、メモリの1行(1つの箱)が必ず「命令(Opcode)」「A(左の値)」「B(右の値)」という3つの部屋に分かれていることを学び、その一番右の部屋(Bフィールド)の値を『5』に書き換えました。

初めてアセンブリ言語や機械語に触れる人がよく抱く疑問があります。「なぜ普通のメモ帳のように好きな文字を自由に書けるのではなく、わざわざ3つの部屋に区切られた窮屈な箱に数字を入れなければならないのか?」と。

その答えは、CPUというハードウェアが「定型のフォーマット(決まった形の箱)」しか高速に読み取れないからです。人間なら『右の箱に5を入れておいて』という自由な日本語を読めますが、シリコンの電子回路であるCPUには自然言語を読む知能はありません。その代わり、1つのメモリ番地(1ワード)を「①何をする命令か(Opcode)」「②1つ目の数値(Aフィールド)」「③2つ目の数値(Bフィールド)」という固定の区画にきっちりと分割しておくことで、CPUは配線を繋ぐだけで瞬時にそれぞれの値を取り出すことができるのです。

┌─────────────────────────────────────────────────────────────┐
│             1 Memory Cell (ICWS-94 Instruction Word)        │
├───────────────────┬────────────────────┬────────────────────┤
│  Room 1: OPCODE   │   Room 2: A-FIELD  │   Room 3: B-FIELD  │
│  (Action + Mod)   │  (Mode + A-Value)  │  (Mode + B-Value)  │
│      DAT.F        │        #0          │        #5          │
└───────────────────┴────────────────────┴────────────────────┘

2. RISCアーキテクチャと固定長命令の美学

コンピュータの歴史において、CPUの命令設計には大きく分けて2つの流派が存在します。1つはIntelのx86プロセッサに代表される「CISC(複合命令セットコンピュータ)」で、1つの命令の長さが1バイトから15バイトまでバラバラ(可変長)です。もう1つは、Apple Silicon(M1/M2/M3/M4)やスマートフォンのARMプロセッサ、そして最新のオープン規格RISC-Vに代表される「RISC(縮小命令セットコンピュータ)」であり、すべての命令が「きっちり同じサイズ(例:32ビット固定長)」の箱に収まっています。

CoreWarの仮想CPUであるMARS(ICWS-94規格)は、このRISCの哲学を極限まで純粋化したアーキテクチャです。CoreWarでは、どんなに単純なデータ箱(DAT)であっても、どんなに複雑な比較命令(SEQ)や分裂命令(SPL)であっても、必ず「メモリ1マス=1命令ワード(Opcode + A + B)」という完全に均一なサイズで格納されます。

すべての命令とデータが「1マス」という同じ大きさのブロックだからこそ、プログラムカウンタは常に『+1』するだけで次の命令へ進め、また『MOV』命令はどんな命令であっても1マス単位で綺麗にコピーすることができるのです。

3. なぜ「B(右の部屋)」がデータの主役なのか?

今回、私たちはA(左の部屋)ではなく、あえて「B(右の部屋)」に『5』という数値を入れました。実はCoreWarの世界には、「単なる数値を1つだけデータ箱(DAT)に保存したいときは、慣習として右側のBフィールドを使う」という重要な設計ルールがあります。

なぜ左のAではなく右のBなのでしょうか? それは、後ほど学ぶ足し算(ADD.AB #2, $1)や間接ポインタ(@)などの多くの標準動作が、「左のAから数値を取り出し、右のBの部屋へ書き込む(またはBの部屋の数値をポインタとして参照する)」ように設計されているからです。つまり、右側のBフィールドは「計算結果が流れ込むメインの貯蔵庫」としての役割を担っています。この「Bの部屋がデータの主役である」という感覚を掴んでおくと、第2章以降の計算やポインタ操作が驚くほどスムーズに理解できるようになります。

🔒

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

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