レッスン
理論 — 小さなCPU:Little Man Computer
フェッチ・解読・実行サイクルは、プロセッサが命令ごとに行う一連の処理です。フェッチでは、PCの値をMARにコピーし、そのメールボックスの内容をMDRに読み出してCIRにコピーします。PCには1を加えます。解読では、命令を操作(百の位)とアドレス(下二桁)に分けます。ただし、901、902、000はそれぞれ全体でINP、OUT、HLTを表すコードで、メールボックスを指定しません。実行では、解読した命令の処理を行います。命令によっては、MARとMDRを通じてさらにメールボックスを読み書きします。
各記号の意味
PC- プログラムカウンタ:次にフェッチする命令のアドレス
MAR- メモリアドレスレジスタ:これから読み書きするメールボックスのアドレス
MDR- メモリデータレジスタ:読み出した値、またはこれから書き込む値
CIR- 現在命令レジスタ:実行中の命令
ACC- アキュムレータ:ADD、SUB、LDAの結果を格納するレジスタ
- 前提
- スチュアート・マドニックが考案したLittle Man Computer(MIT、1965年)では、SUBの結果が0未満になった場合や、ADDの結果が999を超えた場合の動作は定められていません。このシミュレーターのアキュムレータは−999から999までの値を保持し、BRPは符号を調べます。結果がこの範囲を外れると、値を折り返さず、オーバーフローとして実行を停止します。教育用シミュレーターでは、この点の扱いが異なります。アキュムレータの値が常に0から999の範囲に収まるプログラムなら、どれでも同じように動作します。
全プロセスの詳細解説
-
2 × 99には801回、99 × 2には25回の命令実行が必要なのはなぜか 4 ステップ
2 × 99、時間のかかる順を押してから、入力を99、2に変えてください。どちらも198が表示されます。それぞれの実行で命令が何回実行されるか数え、その回数を表す式を求めましょう。積がメールボックスに収まる範囲で、最も時間のかかる入力順では命令数が最大でいくつになるか求めてください。
-
ループに入る前に、INPを2回、STAを2回実行します。計4回です。ループ本体はLDA b、BRZ、SUB one、STA b、LDA total、ADD a、STA total、BRA loopの8命令。これをbの初期値と同じ回数だけ繰り返します。
-
bが0になると、ループ内ではLDA bとBRZだけを実行し、続いてLDA total、OUT、HLTで終了します。最後に加わるのは5回。したがって、実行回数は4 + 8b + 5 = 8b + 9で、aの値には依存しません。
-
b = 99なら8 × 99 + 9 = 801回、b = 2なら25回です。結果の表にも、最初の入力順では801、次の入力順では25と表示されます。
-
メールボックスに格納できる積の最大値は999。1、999と入力すると、ループは999回繰り返され、命令の実行回数は8,001回になります。999、1ならループは1回だけで、命令の実行回数は17回です。
解答
命令の実行回数は8b + 9回。bは二番目の入力値です。 同じ999を求めるにも、入力順によって8,001回と17回、約470倍の差が生まれます。先に入力値を比較し、小さいほうの数だけループを繰り返すプログラムなら、必要な回数は8 × 31 + 9に比較のための命令数を加えた分を超えません。積が999以下のとき、小さいほうの因数は最大でも31だからです。
-
学習の道すじ
コンピュータはどうやってプログラムを動かすのか
参考文献 (4)
- Where the third insight's phrase comes from: the connecting tube between CPU and store, named the von Neumann bottleneck, and the remark that much of its traffic is not data but the names of data: John Backus, "Can programming be liberated from the von Neumann style? A functional style and its algebra of programs." Communications of the ACM 21(8), 613–641, August 1978. The 1977 ACM Turing Award Lecture.
- The date the first insight gives for the stored-program idea first running: The University of Manchester, "How a 70-year-old 'Baby' changed the face of modern computing." News, 21 June 2018.
- The machine itself: Madnick's 1965 design, the instruction codes, and the fact the page's assumes rests on, that a negative or over-999 result is left undefined: "Little man computer." Wikipedia, read 14 October 2026.
- A school simulator's instruction table, with BRP described as branching when the accumulator is zero or positive, the sign convention this page follows: 101computing.net, "LMC Simulator."