1951年にプログラミングする方法 – EDSACを例に

WARNING

この記事ChatGPTによって中国語から翻訳されたものでいくつかのりがまれているかもしれません。不正確部分があればご了承ください

EDSAC

EDSACケンブリッジ大学数学実験室設計製造されたコンピューターです1949年、プロジェクトチームEDSACいて平方数表生成、印刷することに成功1これはEDSAC正式稼働開始したことを象徴しています

EDSAC基本的計算モデル現代コンピューター非常ており、以下のように要約できます

  1. 32タンクTankがあり、各タンクには32ワードWord格納されていますここでのワード18ビットx86プラットフォーム16ビットとはなりますこれら32タンク現代コンピューターメモリ相当します以下ではこれら32タンクメモリびます
  2. 5つのレジスタがありそのうち2つのレジスタ命令レジスタ、命令アドレスレジスタ制御用、残りの3つのレジスタ計算用です
  3. 計算順序的命令Order実行することで表現され、各命令1ワード1ビット未使用なので、各命令17ビットめますすべての命令データ前述メモリ格納されます実際にはEDSAC設計では、命令データ区別はありません。各命令レジスタメモリきする可能性があります
  4. EDSAC入力デバイス5ポイントパンチテープこのテーププログラム入力具体的意味以下説明します担当しますEDSAC出力デバイス電信式プリンターですまた、電話装備されておりこの電話使って「人間コンピュータインタラクションうことができますEDSAC実装された世界初電子ゲーム三目並議論余地ありこの電話じてインタラクションっていました

EDSACプログラム

前述EDSAC設計では、「計算」「命令順序立てて実行することを意味しますではこれらの命令はどこに格納されているのでしょうか現代コンピューター同様これらの命令メモリ格納されていますしかし、「メモリ格納されているプログラムはどこからるのでしょうか

えは、「メモリ格納されているプログラムパンチテープからまれるというものですEDSAC使用しているテープ5ポイントテープ、以下のようなものです

テープセルには5つのがあり、穴いている場合1、開いていない場合0しますしたがって、理論的にはテープリストなしリスト各要素0から31自然数なすことができます

テープ表現しているのは機械語18ビット命令ではなく、「テキストプログラム直接的エンコードですEDSAC時代、プログラマーはまずテキスト形式プログラム、次keypunchあけ使ってテキスト形式プログラムテープ必要がありました

ではテキスト形式プログラムとはでしょうかこのプログラム今日アセンブリ言語プログラムておりHI出力するプログラム以下のようになります

1T64K
2GK
3ZF
4O5θ
5O6θ
6O7θ
7ZF
8*F
9HF
10IF
11EZ
12PF

これはのことなのでしょうかかにこの形式プログラムはまだ非常みにくいです。一つずつていきましょう

まずこのプログラム各行以下3つの状況のいずれかをしています

  1. 命令
  2. 擬似命令
  3. データ

擬似命令今日アセンブリ言語擬似命令ておりそれは初期化命令必要情報提供するためのものです。初期化命令initial orders我々以下議論する重点であり、一時的にそれを一種アセンブラ理解することができます

上記プログラム注釈けてみましょう

1T64K        擬似命令、現在のプログラムを64番目の単語(2番目の箱の0番目の単語)にロードする意味
2GK          擬似命令、再配置パラメータ(θパラメータ)を現在の位置(次の行、ここではZFの位置)に設定する
3--------------------------------------------------------------
4ZF          ハルト                                              }            
5O5θ         プリンタのオフセットモードを"Letter shift"に設定する     }     
6O6θ         プリンタに位置6の最上位5ビットが表す文字(H)を印刷させる             }
7O7θ         プリンタに位置6の最上位5ビットが表す文字(I)を印刷させる             }      これらの行は実際にメモリにロードされる
8ZF          ハルト                                              }
9*F          O5θ命令インデックスのデータ                                 }
10HF          O6θ命令インデックスのデータ                                 }
11IF          O7θ命令インデックスのデータ                                 }   
12--------------------------------------------------------------
13EZ          擬似命令、EZとPFを同時に使用すると、初期化命令にθパラメータの位置に実行する命令を設定するように指示する
14PF          上記と同じ

このプログラム理解するためには、紙テープEDSAC関係、そして初期化命令をするのかを理解する必要があります

初期化命令

初期化命令EDSACシステム核心的一部分コード、一つのプログラムであり、今日視点からるとそれはEDSACオペレーティングシステム、再配置可能アセンブラローダーえます。初期化命令にはつのバージョンがありそれぞれ初期化命令1初期化命令2ばれています。上述テキスト形式プログラム初期化命令によってられるため、異なる初期化命令によってられるテキスト形式プログラムなります

初期化命令理解するためには、初期化命令視点からテーププログラムがどのようなものであるかを観察するのが最善ですまず、紙テーププログラムテキスト形式プログラム直接的翻訳であり、紙テープユニットつの文字または数字対応しています。例えばT64Kというテープつの対応するユニット生成しますこのようにると、初期化命令取得するプログラムテープテキスト形式プログラムエンコードです。初期化命令はそれを18ビット命令翻訳メモリロードする必要があります

初期化命令Iまる命令使ってテープります。例えば

1I2S

これはテープヘッドデータ位置2最下位5ビットむことを意味しますS意味説明します

これにより、私たちはすぐにつの疑問つことになります。英字26個、数字10個、ギリシャ文字4θ ϕ Δ πがありこれらの各記号一意エンコード提供するためにはなくとも40必要です。五点式テープ最大32ではりない場合はないのでしょうか

実際にはパンチャーけるP0Q1W2E3O9まで、同けます

これは問題にならないのでしょうか初期化命令観点からすると、読んだPなのか0なのかどう区別するのでしょうか

えは、初期化命令区別する必要がないということですテキスト形式プログラム各行特定形式っており、形式文法表現するとのようになります

OrderPre N Post \mathsf{Order} \rightarrow \mathsf{Pre}\ \mathsf{N}^*\ \mathsf{Post}

ここで

  • Pre\mathsf{Pre} 命令タイプ、例えばIテープからのOプリンタからの出力します
  • N\mathsf{N}^* 複数ない場合もありその場合はこの部分00-9整数アドレスします
  • Post\mathsf{Post} 各命令サフィックス、初期化命令1設計では、短命令長命令区別するために使用されS短命令、L長命令します。初期化命令2設計ではF短命令、D長命令θはこの命令アドレスθパラメータえることをします

これら3つの部分、実際マシンコード18ビット分割対応しています

えてみるとPost\mathsf{Post}N\mathsf{N}エンコードたないようにすれば、曖昧性じないことがわかりますこれは非常簡単たすことができます

関数呼

1951コンピュータがすでに関数呼しの能力っているとは、驚きです。少安心するのはこの関数呼しはネストできないということです

EDSACでこのように複雑特性である関数呼しがどのように実装されているのでしょうか、初期化命令1プログラムでは関数呼しはできません。初期化命令2登場にこの問題解決するためのものです

初期化命令2一体どのような魔法使ったのでしょうか以前言及したθパラメータしてみてください。命令θわる場合、そのアドレス翻訳時θパラメータ現在える必要がありますこのメカニズム、今日では「再配置」技術ばれていますこれにより、各プログラム相対的独立性つことができ、各プログラム相対アドレス参照することができこれにより、単純コピーだけで関数呼しを実現することができます

具体的にはEDSACには標準ライブラリがありプログラマ特定ライブラリ関数使用したいとき、彼テキスト形式プログラム注記けますそしてパンチャー操作するオペレータがこの位置到達すると、彼テープコピーアライブラリ関数をこのテープ対応する位置コピーします2

ブートストラップ

じられないことはつあるつは、知恵てをげられないこと、二、力てをげられないこと、三、強さがてをつことができないことしたがって、尧知恵があっても人々けがなければ、大きな功績達成できない。乌获があっても人々けがなければ、自分自身げることはできない。贲、育さがあっても戦術がなければ、永遠つことはできないしたがって、達成できない状況があり、成げられないがある。乌获千鈞さをじるが、自身さをじるこれは千鈞よりいわけではなく、状況していないからだ。离硃百歩じるが、眉毛とまつしくじるこれは百歩、眉毛とまついわけではなく、道していないからだしたがって、明智君主乌获自己持不能であるとしてめず、离硃自己視覚不能であるとしてらせない。可能状況利用、容易めることで、力なく使、功績名声てる。時にはりているか空虚、事には利益損害、物には死、人々がこれらつに喜怒すならば、金石れる。聖賢素朴さは。古代明智君主人々観察、自分自身観察させなかった。尧一人では達成できないこと乌获自己持不能であること、贲育自己勝利不能であることを理解、戦術いることで、行動完全理解した

乌获力持ちで、力持ちがくのものをげることができますが、彼自身げることができるでしょうか

直感的にはもちろん無理です。形式的には、「持げる」関係反自反的であるとえます

コンパイラ「自己ブートストラップはこの故事からていますL 言語コンパイラ A L 言語かれていると仮定するとA いて A コンパイルすることは「自己ブートストラップになります

初期化命令ブートストラップ問題っています。初期化命令がなければテーププログラム実行できませんがこれまでに紹介したプログラム入力方法テープからの入力だけです。初期化命令がなければテープむことができずテープむことができなければ、初期化命令 EDSAC 入力することはできません

この問題をどのように解決しますか論文3にはのようにかれています

These orders are known as the initial orders and are permanently wired on a set of uniselectors. When the starting button is pressed, these orders are automatically transferred to the store and they then cause the input tape to be read.

初期化命令ユニセレクタばれる装置じて直接 EDSAC メモリまれることがわかりますこのユニセレクタステッピングスイッチともばれ、電子する知識がないため、完全説明はできません

さな問題

ここまでんで、読者はこんなに偉大初期化命令2何行、あるいは何命令あるのか、自分推測してみて、関連資料調べてみてください。非常くかもしれません