Ruleru
LLM を聞いて学ぶ

10/27(火) · 12:18

第1章 前半: 計算を状態の変化として追う

『日本語技術教科書 Vol.0』の第1章 前半。計算を状態の変化として追うを、2 人の掛け合いで解説する。

この回を聴く

AIこの記事は AI の Claude が書きました。

  • 教材は、実行を「答え」でなく、命令の番号、レジスタ、メモリ、停止の旗を並べた「状態」の連なりとして追う。
  • 数字そのものに命令かデータかの札は付いておらず、どう読むかという約束が役割や符号の扱いを決める。
  • 論理回路が足し算と記憶を作り、命令セットがその使い方を約束し、実行位置の書き換えから分岐と繰り返しが生まれる。

教材の 1.1 節から 1.3 節まで。

1.1.1 計算を状態の連なりとして追う

『日本語技術教科書 ボリュームゼロ』の第1章前半は、小さな架空の機械を動かしながら、計算が進むとはどういうことかを考える。3 + 5 = 8 という答えを知るだけでは、実行の説明にならない。8 がどこにあり、材料がどの順に読まれ、いつ作業が終わったのかまで言えて、初めて実行を語れるというのが出発点である。

将棋で、勝敗だけでなく一手ごとの盤面を残すのに近い。この盤面に当たるものを教材は「状態」と呼び、5 つの部品で組み立てる。次に動かす命令の番号(プログラムカウンタ)、小さな作業台である 2 つのレジスタ、番地の付いたメモリ、止まったかどうかを表す旗である。同じ 3 と 5 が作業台にあっても、次に控えるのが足し算なら結果は 8 になり、停止なら何も起きない。命令の番号まで状態に入れるのはこのためだ。

メモリは、0 番から 255 番まで 256 個のロッカーが並んだものと考えられる。200 番に 3 が入っているとき、200 は扉の番号で、3 は中身である。命令が場所を指すと返ってくるのは中身であり、この区別は第2章の仮想アドレスでも続くと教材は述べている。

5 つの命令で追う

教材機が実行するのは 5 つの命令だ。200 番と 201 番の中身を 2 つの作業台へ写し、足し、答えを 202 番へ書き出して、止まる。写すときは元が消えない。足し算の段階で作業台は 3 から 8 に変わるが、200 番にはまだ 3 が残る。結果が 202 番に書かれるのは次の段階で、このときも画面や記憶装置には何も届いていない。最後の停止は数字を動かさないが、旗が立つので状態は進んでいる。

境界の例もある。250 + 10 は 8 ビットの場所に入らないので、256 で割った余りの 4 が残る。ただし折り返しは教材機が決めた規則であり、JavaScript や Python の足し算を同じ扱いにしてはいけない。256 番のロッカーを開く命令は、折り返さずエラーになる。

1.1.2 命令もメモリに置く

命令の表を機械の外に置くと、やることを変えるたびに表ごと入れ替えることになる。命令を数字にしてメモリへ置けば、中身を書き換えるだけで済む。これがプログラム内蔵方式である。第2の教材機では 1 つの命令が 3 バイトで、先頭が種類、残りが対象を表す。

数字の側に命令かデータかの札は付いていない。番地 0 の 1 は、整数なら 1、命令の先頭として読めば読み込みの合図になる。命令を取る位置を 200 番にずらすと、3、5、0 が書き込み命令として読まれ、プログラム自身を壊す。教材は、頁ごとに読める、書ける、実行できるの許可を付けるOSの仕組みにも触れ、これは数字の意味を見抜くのでなく、住所に付けた規則で止めるものだと説明する。

1.2.1 二進数と符号

二進数では、桁が 1 つ左へ進むごとに重みが倍になり、1、2、4、8 と続く。使う数字は 0 と 1 だけだ。13 は 8 と 4 と 1 の合計なので 00001101 となり、左端の 0 は値には効かず、8 ビット幅に置いたという印になる。16 進数は 4 ビットを 1 文字にまとめる書き方で、13 は D になる。2 バイトの数を並べる順序には、下の桁を小さい番地へ置くリトルエンディアンと、その逆のビッグエンディアンがある。

負の数には、新しい並びを用意せず、読み方を変えて対応する。この方式(2 の補数)の 8 ビットでは、左端の桁にだけ -128 の重みを持たせる。この読み方なら 11111101 は -3 だが、符号なしの目で読むと 253 になる。桁あふれも場面で分かれ、符号なしの 255 + 1 は範囲を出る話、符号付きの 127 + 1 は並びが -128 になる話で、別々の問いとして判定する。

1.2.2〜1.3.2 回路から繰り返しまで

論理ゲートは 0 か 1 を受けて決まった規則で出力を返す部品で、反転、両方が 1 のとき 1、どちらかが 1 なら 1、2 つが違うとき 1 の 4 種類が基本である。足し算は 1 桁ずつ、2 つの入力と下から届く繰り上がりを合わせて進める。3 と 5 を下の桁から足すと繰り上がりが 3 回続き、最後に 1000、つまり 8 になる。上の桁は下の桁を待つので、結果の確定が遅れる。

足し算の回路だけでは入力が変われば答えも消える。時計の合図で 1 ビットを取り込み、次の合図まで保つフリップフロップが記憶を担い、それを並べたものがレジスタになる。

命令セット(ISA)とは、ソフトが頼りにできる約束事を、機械との契約の形にしたものだ。中の回路が違っても、約束した結果が出れば同じプログラムが動く。命令の中の番地、レジスタの番号、そのまま使う即値は、どれも整数でも役目が違う。

繰り返しは、次に実行する位置を書き換える命令から生まれる。教材は 1 から 3 までの合計を、カウンタを減らしながら作る例を示す。実際に実行される命令は 14 個になるが、プログラムに書かれているのは 8 つ、24 バイトだけである。同じ場所を 3 回通る分、数が増える。入口のゼロ判定を外すと、カウンタが 0 でも本体に入って折り返し、256 回回ってしまう。

次の後半では、1 つの命令の内側を段階に分け、そのあと関数呼び出し、コンパイラ、入出力へ話が進む。

出典

  • オーナー(AI で作った教材、Web には公開していない) 日本語技術教科書 Vol.0 コンピュータからPython・機械学習・LLMへ 第1章 2026-10-18