COREWAR

/
Step 5: 左の部屋(A)と右の部屋(B)を書き換える
🎯0000番地のA値(左の値)を 3 にする(0/3)

ミッション一覧 (全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 05 OF 30第1章:画面操作とメモリの基本構造⏱ 読了目安:約4分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

2オペランド・アーキテクチャの対称性と非対称性(AフィールドとBフィールド)

なぜ機械語には2つの数値スロットがあるのか?「情報源(Source)」と「作用先(Destination)」の普遍的文法

#Two-Operand ISA#Source vs Destination#A-Field#B-Field#Vector Operations (.F)
🔬Step 5: 左の部屋(A)と右の部屋(B)を書き換える

今度は A(左の値) と B(右の値) の両方を書き換えて、2つの部屋の違いを完全にマスターしましょう! - 左側の数値が A - 右側の数値が B です。

🎯 やってみよう 0000 番地の DAT の A(左の値)を 3 に、B(右の値)を 7 に書き換えてから、[STEP] を押しましょう!

1. A(左=Source)と B(右=Destination)の文法

Step 5では、0000 番地の『DAT』の左の部屋(A)を『3』に、右の部屋(B)を『7』に書き換えることで、1つのメモリ箱の中に2つの異なる数値を同時に格納できることを確認しました。

なぜCoreWarのすべての箱には、A(左)とB(右)のちょうど2つの数値スロットが用意されているのでしょうか? 1つだけでは足りず、3つでは多すぎる理由は何でしょうか?

コンピュータ科学における命令セットアーキテクチャ(ISA)の設計において、ほとんどの二項演算(足し算、引き算、コピー、比較など)は「2つの対象」を必要とします。たとえば『AをBへコピーする』『AをBに足す』『AとBを比較する』といった具合です。これを表現するために、x86などの多くのアセンブリ言語やRedcodeでは、2オペランド方式(Two-Operand Format)を採用しています。 ・左の部屋(Aフィールド)=「何を / どこから(Source:情報源・入力)」 ・右の部屋(Bフィールド)=「どこへ / 何に対して(Destination:作用先・出力)」 この「左から右へ(A ➔ B)」というエネルギーの流れこそが、Redcodeのすべての命令を貫く基本文法なのです。

       [A-Field : Left Room]          [B-Field : Right Room]
         SOURCE (From / Input)   ───►   DESTINATION (To / Output)
Example:      ADD.AB  #3         ───►         $7
         ("Take literal 3"       ───►   "Add it into cell 7 rows down")

2. データ箱(DAT)における2変数保持とベクトル演算(.F修飾子)

さらに興味深いのは、命令として実行される行だけでなく、単なるデータ箱(DAT)にもAとBの2つの部屋がそのまま存在している点です。今回の実験であなたが作った『DAT.F #3, #7』は、たった1マスのメモリの中に「3」と「7」という2つの数値をパックした「2次元ベクトル(ペア構造体)」として機能しています。

命令名の後ろについている『.F(Full)』という修飾子に注目してください。ICWS-94規格では、たとえば『ADD.F』という命令を使うと、1回のクロックサイクルで「Aの部屋同士の足し算」と「Bの部屋同士の足し算」を2つ同時に(並列で)実行することができます!

現代のCPUには、画像処理や物理演算を高速化するために、1回の命令で複数の数値をまとめて計算する「SIMD(Single Instruction, Multiple Data:単一命令・複数データ)」という並列演算機能が搭載されています。CoreWarの1マスがAとBの2つの部屋を持っているおかげで、熟練したWarriorは1回のADD命令で2つの攻撃ポインタを同時に動かすという、まさにSIMDベクトル演算そのものの高等テクニックを繰り出すことができるのです。

3. メモリ検査(Memory Inspection)と境界値の意識

機械語レベルのプログラミングでは、「どこの番地の、AとBのどちらの部屋に、いくつの数値が入っているか」を1つの曖昧さもなく正確に把握する力が求められます。もしAとBを取り違えて数値をセットしてしまうと、足すはずの数値と足す先の番地が逆転し、プログラムは全く見当違いの方向へ暴走してしまいます。

今回、左の部屋(A)に『3』、右の部屋(B)に『7』を正確にセットしてミッションをクリアしたことで、あなたはメモリセルの内部構造を自在に読み書きする基礎技術を習得しました。次は、数字の横についている謎の記号『#』と『$』の決定的な違いに迫ります。

🔒

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

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