アセンブリとは何ですか?

アセンブリとは何ですか?

バリスティック研究所でENIACを操作するグレン・ベックとベティ・スナイダー。
バリスティック研究所でENIACを操作するグレン・ベックとベティ・スナイダー。

ENIACは最初の汎用電子計算機でした。ペンシルベニア大学で建造され、1945年に完成しました。スナイダーは、それを手作業でプログラムした6人の女性のうちの1人でした。

ENIACのような機械が登場する前は、コンピューターという言葉は手計算で計算を行う人を指しており、ENIACをプログラムした6人の女性もその仕事のために雇われていました。機械をプログラムするには、彼女たちは配線を組み替えました。問題が変わるたびにケーブルを差し込み、スイッチを設定したのです。この配線の組み替えが、アセンブリ言語が存在する歴史的な理由です。数年以内に、ヨーロッパとアメリカの技術者たちは、命令を表す短い記述コードで配線やスイッチ設定を置き換え始め、人がコネクタに触れることなくプログラムを読み、変更できるようになりました。

まず、CPU(中央処理装置)はコンピューターの中心にあるチップで、1つの仕事を担います。それは命令と呼ばれる小さなコマンドの長いリストを、1つずつ、毎秒何十億回も実行することです。各命令はそれ自体は単純で、例えば2つの数を足す、値を移動する、別の場所へジャンプする、といったものです。

アセンブリとは、CPUが実行する命令のうち、人が読める形のものです。各行は(ほぼ)1つの機械命令です。ループやオブジェクト、文字列はありません。レジスタ(プロセッサ内部の小さな記憶スロット)とメモリの間で数を移動させます。

ケンブリッジ大学でEDSACの一部を調べるモーリス・ウィルクス。
ケンブリッジ大学でEDSACの一部を調べるモーリス・ウィルクス。

EDSACはデビッド・ウィーラーのInitial Ordersを実行しました。これは、書かれた命令を機械語に翻訳した最初のプログラムの1つです。

すべてのプロセッサには、書かれた命令を読み取り、ハードウェアが実行する生のビットを生成するプログラム、すなわちアセンブラが必要です。このページのアセンブラは1つの命令セットを対象としています。

このシミュレータはRISC-Vを使用しています。これは実際のチップで使われ、大学でも教えられている現代的な命令セットです。ここで学ぶことはハードウェアに直接応用できます。

2013年に初期のRISC-Vプロトタイプチップを手に持つイ・ユンソプ。
2013年に初期のRISC-Vプロトタイプチップを手に持つイ・ユンソプ。

RISC-Vはオープンな命令セットアーキテクチャです。誰でもその公開された仕様をハードウェアに実装でき、料金も許可も必要ありません。

どんな命令セットの設計も、1つの命令がどれだけの仕事を行うかを決めなければなりません。CISC(複合命令セットコンピュータ)チップは、ほとんどのデスクトップやラップトップコンピュータに見られるx86アーキテクチャを含め、各命令に大量の仕事を詰め込みます。1つの命令がメモリから値を読み取り、それに算術演算を行い、結果を書き戻すことを、すべて1ステップで行うかもしれません。RISC-VはPatterson & Ditzel, 1980が主張した設計に従います。各命令は1つの単純な操作を行い、複雑な振る舞いはこれらの命令を多数組み合わせることで生み出されます。

RISCはReduced Instruction Set Computerの略です。ハードウェアは、少数の単純な命令を高速で実行するように作られています。複雑な振る舞いは、これらの単純で高速なステップを組み合わせることで生み出されます。

ARCのためのキャスリーン・ブースのアセンブラ(Booth, 1947)と、EDSACのためのデビッド・ウィーラーのInitial Orders(Wilkes, Wheeler & Gill, 1951)は、最も初期に動作したアセンブラの1つに数えられ、歴史家たちはどちらが先だったかを今も議論し続けています。このシミュレータが実行する命令セットであるRISC-Vは、誰でも実装できる小さくオープンな命令のリストを定義しています(Asanović & Patterson, 2014)。ここから先のすべてのレッスンは、その命令セットを直接教えます。