assemblyとはアセンブリ言語とも呼ばれる低水準言語の一つ。assemblyを用いることでコンピュータを動作させる機械語が人間でもわかりやすい形で記述することができます。
「Prolog」などのプログラミング言語は高水準言語と呼ばれており、抽象度が高く人間でも理解しやすいことを指しますが、低水準言語は対照的に人間にはわかりづらい機械語もしくは機械語に近いプログラミング言語を意味しています。
また英語でassemblyは「組み立てる」という意味を持っており、IT業界の現場におけるassemblyはプログラミング言語として認識されているのが一般的です。
ではそんなプログラミング言語であるassemblyはどのような歴史を有しているのか、assemblyの誕生から順番に見ていきましょう。
assemblyの誕生の背景には機械語を使ってプログラミングをすることが人間にとっては難しかったことがあります。
機械語は基本的に0と1のみで記述されますが、0 と1だけで様々な命令を記述するのは簡単なことではありません。
assemblyなどプログラミング言語が誕生するまでプログラミングのハードルは現在とは比較にならないほど難しいものだったことがわかります。
そこで生まれた発想が、機械語の意味を単語や記号に持たせることです。このような発想からプログラミング言語であるassemblyは誕生します。
EDSACとは1940年代頃のイギリスの初期のコンピュータですが、このEDSACにもassemblyの機能は取り入れられていました。
これらのことから記号や単語を自動的に機械語に変換するニーズはコンピュータの歴史の初期から存在しており、assemblyはプログラミング語の歴史を語る上では欠かせないプログラミング言語であることがわかります。
assemblyの誕生からもわかるように、assemblyの黎明期とはコンピュータの黎明期でもあります。
パーソナルコンピュータの普及がはじまったのは1970年代ですがそれよりも前の大きな筐体が必要だったコンピュータの黎明期が、assemblyの黎明期でもあるのです。
コンピュータの歴史に目を向けると国内では1942年に国内初の大型アナログ計算機である機械式微分解析機が開発されています。
機械式微分解析機は積分計算を行うことができ、回転する円盤を有しているという特徴があります。
また微分方程式の機械の設計は1800年代前半から行われおり、1912年にはアナログコンピュータの開発が行われてきたという流れもあります。
このような流れを見ていくとコンピュータはそもそも計算ニーズから誕生した機械であることがわかります。
そして1946年には世界初の電子コンピュータである、ENIACが完成されます。
ENIACは現在のコンピュータと比較すると、わずかなメモリしかありませんでしたが広い範囲の計算に対応できるという特徴がありました。
当初はアメリカの弾道計算という軍事利用という目的に開発されたという背景もあります。
また1951年には商用コンピュータであるFerranti Mark 1が開発されます。
Ferranti Mark 1は音を出す機能がありチェスのゲームプログラムが作成されるなど、当時は革新的な機能を有するコンピュータとして知られました。
このように1940年代から1950年代前半にかけては、コンピュータから計算機から飛躍を遂げた時期でもありました。
それに応じてプログラミングのニーズも増え始め、assembly言語が必要とされる機会が徐々に増えていった時期でもあることが分かります。
しかしこの頃はコンピュータそのものが多くの人にとって馴染みがあるものではなくassemblyも業界内でのみ認知されている程度のものだったことが予想できます。
コンピュータの普及がassemblyの普及と関連してきたことは前述の通りですが、1970年代からassemblyも成長期に入ります。
その理由の一つがパーソナルコンピュータの開発です。
1960年代からパーソナルコンピュータという言葉が知られるようになりましたが、その時点では一般的ではありませんでした。
しかし1970年代になるとパーソナルコンピュータは徐々にその存在が多くの人に認識されるようになります。
そのきっかけの一つがIBMの開発したHP-9800シリーズなどのコンパクトなコンピュータです。
当時は決して低い単価ではなかったため当時は企業で使われることがほとんどでしたが、卓上で操作できるほどコンパクトであり、個人でも使えるというコンセプトは多くの人々の関心を集めました。
また1976年には、スティーブ・ジョブズがアップル1を発売しており、翌年にはアップル2を販売してビジネスとしての成功をおさめています。
これらのことから1970年代はパーソナルコンピュータの聡明期となり、これまでとは異なりコンピュータそのものが一般の人にとっても身近になりはじめた時期ともいえます。
コンピュータに触れる人の数が増えればコンピュータを使って何かしたいと考える人が増えるのは自然なことです。
プログラミング言語であるassemblyの成長期にとってパーソナルコンピュータの誕生は重要なキーワードの一つだといえるでしょう。
assemblyは現在では様々な種類が開発されており状況に応じて使い分けがされています。
ではassemblyにはどのような種類があるのか、その一部を見ていきましょう。
エンジニアの登龍門的試験ともいえる情報処理技術者試験では、CASLという試験用に作られたassembly言語が用いられています。
CASLはassemblyに関する特定のエンジニア業務に従事する受験者とそうではない受験者の間で優位性を無くすために開発されたという背景があります。
2001年以降はCASL2が利用されています。
Microsoft Macro AssemblerはMS-DOS上における開発のためにマイクロソフト社が開発したassembly言語です。
構造化プログラミングに対応しており、Windowsのコンソールのアプリとなったバージョンもあります。
現在では単独販売は行われていませんが、それでもVisual C++ .NET 2005 など Visual C ++ に同梱されるなど構成する一部分として利用されています。
GNU(グニュー)アセンブラとはGNUプロジェクトで利用されるassembly言語。
GNUプロジェクトとはマサチューセッツ工科大学にて発表されたプロジェクトであり、ユーザーがソフトウェアを配布・修正などする権利を法的に保証しているプロジェクトです。
ソフトウェアの修正や研究に権利が与えられているこのようやソフトウェアはフリーソフトウェアとも呼ばれています。
LinuxはこのGNUプロジェクトにから誕生した、フリーソフトウェアのオペレーティングシステムでもあります。
またGNUアセンブラはLinuxなどのコンパイルにも利用されています。
ターボアセンブラはx86アセンブラパッケージであり、コマンドラインベースという特徴があります。
ターボTurbo Pascal や Turbo BASICなどと合わせて使うことができ、その速度に定評があります。
使用可能なオペレーティングシステムとしては、WindowsとDOSがあります。
参考 GNU Project
ここまで紹介してきたようにassemblyはコンピュータの黎明期から存在している低水準言語であり、コンピュータの普及・開発とともにニーズが高まったプログラミング言語です。
低水準言語となるためエンジニアでも業務内容によってはassemblyに携わる機会がほとんどないという人も少なくありません。
しかしプログラミング言語を学習する上では、assemblyを理解することは無駄ではありません。
たとえ普段の業務で扱うのが高水準言語に限られていたとしても、機械語に近い低水準言語を学ぶことでプログラミング言語そのものへの理解を深めることができるからです。
また国内でIPAが提供している国家試験「基本情報処理技術者試験」を受験する場合は、選択問題としてアセンブラ言語が出題されています。
assemblyを学ぶことは資格取得にも有用な取り組みでもあるのです。
低水準言語についての理解を深めたい場合はassemblyについて学習してみてはいかがでしょうか。
参考: IPA情報処理推進機構
3つの質問に答えるだけで、フリーランスエンジニアとしての単価相場を算出します。 スキルやご経験にマッチする案件もあわせてご紹介いたしますので、気軽にご活用ください! ※単価相場の算出に個人情報の回答は必要ございません。