私は非常勤で大学の講義を担当しており、その中には全専攻を対象とした一般的なコンピューティングのトピックに関するコースもあります。このコースは、コンピューティングにまつわる神話を解明するために、テクノロジーがどのように機能するかを学生に教える入門コースです。
機械語プログラミング
Apple II、TRS-80、IBM PCのような初期のパーソナル・コンピューターでは、ユーザーはキーボードでプログラムを入力し、その結果を画面に表示することができました。しかし、コンピュータには常に画面とキーボードがついていたわけではありません。
Altair 8800 と IMSAI 8080 では、ユーザーはパネル上の「スイッチとライト」入力手順を使用する必要があります。スイッチのセットを使って機械語でコマンドを入力すると、機械が各バイナリコマンドの1と0を表すLEDを点灯させます。
トイCPUのプログラミング
トイCPUは非常にシンプルなレトロコンピュータでした。わずか256バイトのメモリと最小限の命令セットで、「スイッチとライト」のプログラミングモデルを再現しながら、物事をシンプルに保つように設計されました。そのインターフェースはAltair 8800を模倣しており、カウンター、命令、アキュムレーター、ステータスを表す8つのLEDが並んでいます。
Toy CPUを起動すると、メモリをクリアして「起動」をシミュレートします。起動すると画面右下のステータスランプに "INI "と表示されます。PWR "ランプはToy CPUの電源が入っていることを示します。
Toy CPUのプログラムは常にカウンタ0から始まります。
入力」モードでは、上下矢印キーで各プログラムカウンタを表示し、Enter キーで現在のカウンタの命令を編集します。編集」モードに入ると、Toy CPU のステータスランプに「EDT」と表示されます。
Toy CPUには、ディスプレイの前面に "テープ止め "されたクイックリファレンス表があります。この表には、Toy CPUが扱えるさまざまなオペコードが列挙されています。
STOP): プログラムの実行を停止します。- アキュムレータのビットを右に 1 つシフトします。値は、 になります。
- アキュムレータのビットを左に 1 つシフトします。値は、 になります。
- アキュムレータに対してバイナリ非演算を実行します。例えば、値は .
- アドレスに格納された値で、アキュムレータにバイナリ演算を実行します。このアドレスは次のカウンタに格納されます。
- アドレスに値が格納されたアキュムレータに対してバイナリ演算または演算を実行します。
- アドレスに値が格納されたアキュムレータに対してバイナリ差分 OR 演算を実行します。
- アドレスの値をアキュムレータにロードします。
- アキュムレータの値をアドレスに格納します。
- アドレスに格納された値をアキュムレータに加算します。
- アキュムレータからアドレスの値を減算します。
- カウンターアドレスに移動します。
- アキュムレータがゼロの場合、カウンタ・アドレスに移動します。
- これは安全に無視できます。
Edit "モードでは、左矢印キーと右矢印キーを使ってオペコードのビットを選択し、スペース・バーを押してオフとオンの間で値を反転させます。編集が終了したら、Enter キーを押して "Enter" モードに戻ります。
サンプルプログラム
2つの値を加算し、その結果をToy CPUのメモリに格納する短いプログラムを入力して、Toy CPUを探求してみたいと思います。事実上、これは算術演算A+B=Cを実行します。このプログラムを作成するには、いくつかのオペコードが必要なだけです:
LOAD)ADD)STORE)STOP)
LOAD、ADD、STORE命令では、常に次のカウンタ位置にあるメモリアドレスが必要です。例えば、プログラムの最初の2つの命令は次のようになります。
カウンタ1:最初の値Aが格納されるメモリアドレス。
カウンタ 0 の命令は LOAD 命令で、カウンタ 1 の値は値を格納するメモリアドレスです。この2つの命令により、メモリ上の値がToy CPUのアキュムレータにコピーされ、その値を演算することができます。
数値 A をアキュムレータにロードした後、数値 B をアキュムレータに加算する 必要があります。これを行うには、以下の 2 つの命令を使用します:
カウンタ3:2番目の値Bを格納するメモリアドレス
アキュムレータに値をロードし、その値を加算したとします。アキュムレータの値は .この 2 つの命令を使用して、値を別のメモリ・アドレスにコピーする必要が あります:
カウンタ5:新しい値を保存できるメモリアドレス
この2つの値を足し合わせたら、この指示でプログラムを終了します:
カウンター6:
カウンタ 6 以降の命令は、プログラムによって記憶メモリとして使用できます。つまり、カウンタ 7 のメモリを値 A の格納に、カウンタ 8 のメモリを値 B の格納に、カウンタ 9 のメモリを値 C の格納に使用することができます:
すべての命令とA、B、Cのメモリ位置を把握した後、完全なプログラムをToy CPUに入力することができます。このプログラムは1と3を足して4とします:
プログラムを実行するには、"INPUT "モードで R キーを押します。
Toy CPU にはかなりの遅延があるため、プログラムの各ステップを実行しているのがわかります。プログラムが進むにつれて、カウンタが .カウンタから .カウンタに移動するのがわかります。カウンタ 1 の後、プログラムはメモリ位置 7 から値をロードし、アキュムレータを .カウンタ 3 の後、 プログラムは値を加算し、アキュムレータの表示を更新します。アキュムレータは、カウンタ 5 の後にプログラムがメモリ位置 9 に値を 入れるまでこの状態を維持し、カウンタ 6 で終了します。
機械語プログラミングの探究
Toy CPUを使って他のプログラムを作成し、機械語プログラミングをさらに探求することができます。機械語でプログラムを書いて、創造性を試してみましょう。
アキュムレータを点滅させるプログラム
アキュムレータの右 4 ビット、左 4 ビット、全ビットの順に点灯できますか?このプログラムは 2 つの方法で書くことができます。
簡単な方法は、次のように異なるメモリアドレスから3つの値をロードすることです:
カウンタ 0: LOADカウンター1:「右”カウンター2:LOADカウンター3:「左”カウンター4:LOADカウンター5:「すべて”カウンター6:STOP
このプログラムを書くもう一つの方法は、NOTとORの2進演算を使ってみることです。そうすれば、より小さなプログラムになるでしょう:
カウンタ 0: LOADカウンター1:「右”カウンター2:NOTカウンター3:ORカウンター4:「右”カウンター5:STOP
数字からのカウントダウン。
Toy CPUをカウントダウンタイマーとして使用することができます。このプログラムでは IFZERO テストを実行し、アキュムレータがゼロのときだけ新しいカウンタにジャンプします:
カウンタ 0: LOADカウンタ1:「初期値”カウンター2:IFZEROカウンター3:「終了”カウンター4:SUBカウンター5:「1”カウンター6:GOTOカウンター7:「スタート”カウンター8:STOPカウンター001
Toy CPUは機械語を学ぶのに最適です。私は入門コースでToy CPUを使いましたが、学生たちは、最初のプログラムを書くのは難しいが、次のプログラムを書くのはずっと簡単だと言っていました。Toy CPUは教育的で楽しいものです!





