COREWAR

/
Step 7: 足し算の命令「ADD」の観察
🎯[STEP] を押して 0001番地の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
👁️ お手本観察モード([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 07 OF 30第2章:基本命令と自律プログラムの構築⏱ 読了目安:約5分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

ALU(算術論理演算装置)とRead-Modify-Writeのミクロ過程

たった1回の「ADD」命令の裏側で、CPUがメモリと往復しながら行っている3段階の算術処理

#ALU (Arithmetic Logic Unit)#Read-Modify-Write#In-Place Mutation#Operand Modifier (.AB)#Accumulator
🔬Step 7: 足し算の命令「ADD」の観察

第2章では、メモリを書き換える代表的な命令を学びます。 まずは足し算を行う ADD 命令 のお手本を観察しましょう!

0000 番地には ADD.AB #2, $1 と書かれています。 - A(左の値): 足す数の #2 - B(右の値): 足す相手の場所 $1(1つ下の 0001 番地) - 0001 番地のデータ箱には、最初から 3 が入っています。

🎯 やってみよう(編集不要) [STEP] ボタン を1回押して、0001 番地のB値が 3 から 5(3 + 2)に増える瞬間を観察しましょう!

1. CPUの計算頭脳「ALU(算術論理演算装置)」

第2章の幕開けとなるStep 7では、メモリ上の数値を変化させる最も基本的な算術命令『ADD.AB #2, $1』の動きを観察しました。[STEP] ボタンを1回押した瞬間、1つ下の 0001 番地にあったデータ箱のB値が『3』から『5』へと変化しました。

この「3 + 2 = 5」という計算を実際に実行しているCPU内部のハードウェア回路を『ALU(Arithmetic Logic Unit:算術論理演算装置)』と呼びます。前章で学んだプログラムカウンタ(PC)が「次にどの行を読むかを指し示す案内役」だとすれば、ALUは「案内された命令に従って実際に数値を足したり引いたり比較したりする作業場(工場)」です。

ノイマン型コンピュータにおいて、メモリの箱(RAM)自体には足し算をする能力はありません。メモリの箱はただ数値を記憶しているだけの受動的な倉庫です。では、0000 番地の『ADD.AB #2, $1』が実行された1サイクルの間に、CPU(ALU)とメモリの間ではどのようなデータのやり取りが行われたのでしょうか?

[0000] ADD.AB #2, $1  ──(1. Read Source A = 2 & Target B at 0001 = 3)──► ┌─────────┐
                                                                         │   ALU   │ (3 + 2 = 5)
[0001] DAT.F  #0, #5  ◄────────(2. Write Result 5 back to 0001.B)────────┘─────────┘

2. Read-Modify-Write(読み出し・変更・書き戻し)の3ステップ

画面上では一瞬で『3』が『5』に変わったように見えますが、MARS仮想プロセッサの内部では、1サイクルの中に「Read-Modify-Write(読み出し・変更・書き戻し)」と呼ばれる厳密な3段階のパイプライン処理が走っています。

① Read(オペランドの読み出し):CPUはまず、0000 番地のAフィールドから即値『#2』を取り出します。同時に、Bフィールド『$1(1つ下の0001番地)』を見に行き、そこに現在入っているB値『3』を読み出してALUへ運びます。 ② Modify(ALUでの演算):ALUの内部回路に「2」と「3」が入力され、加算回路によって新しい値「5」が算出されます。 ③ Write(メモリへの書き戻し):算出された「5」を、再び 0001 番地のBフィールドへと送り込み、元の「3」の上から上書き保存(インプレース更新)します。

このように、メモリの値を変化させる命令はすべて「現在の値を読んでから、計算結果を同じ箱へ書き戻す」という往復運動を行っています。だからこそ、元々の値が『0』ではなく『3』であった場合、3が消えて2になるのではなく、3に2が積み重なって『5』になるのです。

3. 修飾子「.AB」が指定する部屋から部屋への配線

命令の後ろについている『.AB』という2文字のアルファベットにも注目してみましょう。第1章で「すべてのメモリの箱にはA(左)とB(右)の2つの部屋がある」と学びました。そのため、CPUが足し算をするときには「コピー元のAとBのどちらの数字を、相手先のAとBのどちらの部屋に足すのか?」を明確に指定する必要があります。

『ADD.AB』の1文字目の『A』は「自分の行のA(左)の部屋の数値(#2)を使う」ことを意味し、2文字目の『B』は「相手先の箱($1)のB(右)の部屋に足し込む」ことを意味します。もしこれが『ADD.A』なら左の部屋同士、『ADD.B』なら右の部屋同士、『ADD.F』なら両方の部屋を同時に足し算します。この修飾子(Modifier)こそが、メモリのどの部屋とどの部屋をALUの配線で繋ぐかを決めるスイッチなのです。

🔒

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

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