電子書籍の厳選無料作品が豊富!

人間がハンドアセンブル際にアセンブリ言語と機械語の対応表を見比べて翻訳する作業を、コンピュータの黎明期に機械語で最初に作られたアセンブラはどのように行っていたのかということを教えて下さい。

プログラミング言語の歴史を考えてみると、(フォン・ノイマン型)コンピュータの黎明期では全てのプログラムは最初人間が直接真空管やディップスイッチのオン/オフを切り替えることで、機械語でプログラムを入力していたと思います。その後アセンブラが開発されたことで、人間はパンチカードやカセットテープなどを通してアセンブリ言語でプログラミングを行えるようになったと聞きました。

アセンブリ言語は機械語と1対1で結びついたもので、アセンブラはアセンブリ言語を機械語に翻訳するのだと言うことは分かります。しかし、パンチカードやカセットテープで入力したアセンブリ言語も、コンピュータにとっては根本的には0/1(スイッチのオン/オフ)という点では変わりはなく、最初のアセンブラはその0/1をどのようにして正しい機械語の0/1に変換することが出来たのでしょうか?

少し質問の意味が分かりにくいかもしれませんが、例えば

MOV B, A //Bレジスタの内容をAレジスタに送る

といったアセンブリ言語は、機械語では

01000000

に相当するかもしれません。しかしコンピュータがパンチカードを読み込んだ時点では

01010100

といった信号として入力されるとしたら、機械語で最初にアセンブラを作成した人はどのようにしてそれを適切な機械語(ここでは01000000)に翻訳出来たのでしょうか?

想像では最初に機械語で非常に超簡単なアセンブラの原型とも言えるプログラムを作って、それを元にした簡単なアセンブリ言語(の原型)でより高度なアセンブラを作る、といったことを繰り返していまのアセンブラが開発されていったと思いますが、では最初のアセンブラの原型とはメモリ上ではどのように実現されていたのか、ということが気になったので質問させていただきました。アセンブリ言語で実際にプログラムのイメージはこんな感じでは?ということを書いて下さっても構いません。

よろしくお願い致します。

A 回答 (11件中11~11件)

最初のアセンブラですか?


あくまで想像ですが、機械語で書いたと思います。
機械語でアセンブラプログラムを作って、そのプログラムがパンチカードやテープからアセンブラソースコード(テキストコード)を読み込んでアセンブルしたのです。

例えば、マイコンの初期段階では2進コードを入力SW(8ビット分!)で直接RAMに書き込むハードを作ってそれでマシン語を直接入力してましたしね。汎用機でも直接マシン語を入力する方法をカスタマーエンジニア(CE)さんに教えてもらったことがあります。

この回答への補足

ご回答ありがとうございます。
>機械語でアセンブラプログラムを作って、
ということですが、質問の意図としてはそのアセンブラプログラムはどのようなロジックになっているのだろうか?ということです。

僕の推測ではメモリのデータ領域に読み込まれた01010100というデータが、アセンブラによって01000000に変換されるのには、一つずつ01010100と各命令とをCMP命令などで比較していき、当てはまった場合は該当する機械語命令を書き込むといった流れになっていると思ったのですが、この推測は正しいでしょうか?

つまり、

  ・アセンブラを実行
  ・アセンブラはパンチカードから入力されたプログラムの最初のデータをレジスタに送る
  ・CMPでレジスタの内容(この場合は01010100)と各命令の対応表にあるデータ(0010011ならLOAD命令,0010100ならADD命令というように)が一致するか一つずつ比較する
  ・一致した場合はその命令の機械語をプログラム領域として確保してあるメモリアドレスに書き込む。この場合は対応表から01010100がMOV B,Aと一致するので01000000を翻訳した機械語プログラムとしてあるメモリアドレスに書き込む
  ・次の行のアセンブリプログラムを読み込み、上記を繰り返す

といった流れになるのでしょうか?

妙な質問かもしれませんが、情報工学を独学で勉強しており、また初心者ゆえC言語やPHPなどのプログラム自体は書けますがそもそも非常に根本的なところでプログラムやコンピュータというのがどう発展してきたのかというところに興味があります。どうぞよろしくお願い致します。



といった感じでしょうか? 

補足日時:2009/06/09 00:41
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!