アセンブリ言語の定義

アセンブリ言語とは

アセンブリ言語は、コンピューターのハードウェアと直接通信することを目的とした低レベル プログラミング言語の一種です。2 進文字と 16 進文字で構成される機械語とは異なり、アセンブリ言語は人間が読めるように設計されています。

アセンブリ言語などの低レベルのプログラミング言語は、コンピューターの基盤となるハードウェアと、最新のソフトウェア プログラムが記述されている Python や JavaScript などの高レベルのプログラミング言語との間の必要なブリッジです。

重要ポイント

  • アセンブリ言語は、高級言語を機械語に変換するプログラミング言語の一種です。
  • これは、ソフトウェア プログラムとその基盤となるハードウェア プラットフォームとの間の必要なブリッジです。
  • アセンブリ言語は、言語構文、ラベル、演算子、およびディレクティブに依存して、コードを使用可能な機械語命令に変換します。
  • アセンブリ言語は、シングルパスまたはマルチパスのアセンブラを通過する場合があり、それぞれに特定の用途と利点があります。
  • 今日、アセンブル言語が直接記述されることはめったにありませんが、パフォーマンス要件が特に高い場合など、一部のニッチなアプリケーションでは依然として使用されています。

アセンブリ言語のしくみ

基本的に、コンピューターによって実行される最も基本的な命令は、1 と 0 で構成されるバイナリ コードです。これらのコードは、コンピューターの物理回路を流れる電気の「オン」と「オフ」の状態に直接変換されます。本質的に、これらの単純なコードは、プログラミング言語の最も基本的な種類である「機械語」の基礎を形成します。

もちろん、1 と 0 を明示的にプログラミングして最新のソフトウェア プログラムを構築できる人間はいないでしょう。代わりに、人間のプログラマーは、人間にとってより直感的な形式でコマンドを明確に表現できるようにするさまざまな抽象化レイヤーに依存する必要があります。

具体的には、現代のプログラマーは、いわゆる「高水準言語」でコマンドを発行します。これは、英語の単語や文全体などの直感的な構文や、「and」、「or」、「else」などの論理演算子を使用して、日常使いになじみます。

ただし、最終的には、これらの高レベルのコマンドを機械語に翻訳する必要があります。プログラマーは、手動で行うのではなく、これらの高水準言語と低水準言語の間の自動変換を目的とするアセンブリ言語に依存しています。最初のアセンブリ言語は 1940 年代に開発されました。現代のプログラマーや現代の自然言語プロセッサは、アセンブリ言語を扱うのにほとんど時間を費やしていませんが、コンピューターの全体的な機能にとって不可欠なままです。

コンピューティングの黎明期には、システム プログラミングとアプリケーション プログラミングは両方とも完全にアセンブリ言語で行われていました。アセンブリ言語がなければ、現在使用されている多くの最新のコンピューターや高水準言語は実現できなかったでしょう。

アセンブリ言語のコンポーネント

構文

任意のプログラム言語で任意のコードを記述する場合、コンパイラがエラーなしでコードを実行できるようにするために従わなければならない規則の観察可能な特定の順序があります。これらの規則は構文として定義されており、許容される最大文字数、コード行を開始する必要がある文字、特定の記号「セミコロン」の意味などの基準が含まれています。

ラベル

ラベルとは、命令やデータが格納されているアドレスを表す記号です。その目的は、ステートメントで参照されたときに宛先として機能することです。ラベルは、アセンブリ言語でアドレスを使用できる場所ならどこでも使用できます。記号ラベルは識別子の後にコロンが続くもので構成され、数値ラベルは 1 つの数字の後にコロンが続くもので構成されます。

オペレーター

コマンドとも呼ばれる演算子は、ラベル フィールドの後にある論理式です。さらに、少なくとも 1 つの空白文字が先行する必要があります。演算子は、オペコードまたはディレクティブのいずれかです。オペコードはマシン命令に直接対応し、オペコードには命令に関連付けられたレジスタ名が含まれます。あるいは、ディレクティブ オペコードは、アセンブラが認識している命令です。

指令

ディレクティブは、アセンブリ プロセス中に実行する必要があるアクションをアセンブラに指示する命令です。ディレクティブには、変数のメモリを宣言または予約するという重要性があります。これらの変数は、より動的な機能を実行するために、後でプロセスで呼び出すことができます。ディレクティブは、プログラムをさまざまなセクションに分割するためにも使用されます。

大きい

アセンブリ言語マクロは、一連のステートメントまたはパターンのステートメントを表すテンプレート シュー フォーマットです。この一連のアセンブリ言語ステートメントは、複数の異なるプログラムに共通している場合があります。マクロ機能は、マクロ定義を解釈するために使用されますが、マクロ コールは、ステートメントのマクロ セットの代わりに「通常の」アセンブリ コードが入るソース コードに挿入されます。

ニモニック

ニーモニックとは、操作の略語です。各アセンブル プログラム命令の操作コードにニーモニックを入力して、より大きな完全なコード セットを表す短縮された「操作コード」を指定します。たとえば、ニーモニック「multiply by two」には、ニーモニックを実行する完全なコード セットがあります。

高頻度取引

今日、アセンブリ言語はコンピュータ サイエンスの学生の研究対象であり続けています。これは、最新のソフトウェアがその基盤となるハードウェア プラットフォームとどのように関係しているかを学生が理解できるようにするためです。場合によっては、パフォーマンスに対する要求が特に高い場合や、問題のハードウェアが現在の高水準言語と互換性がない場合など、プログラマはアセンブリ言語で記述し続ける必要があります。

金融に関連するそのような例の 1 つは、一部の金融会社が使用する高頻度取引 (HFT) プラットフォームです。この市場では、HFT取引戦略が収益性を証明するために、取引の速度と正確さが最も重要です。したがって、競合他社に対して優位に立つために、一部の HFT 企業はトレーディング ソフトウェアをアセンブリ言語で直接記述しており、これにより、高水準言語からのコマンドが機械語に変換されるのを待つ必要がなくなりました。

多くの人は、アセンブリ言語は学習曲線が最も急峻であり、学習するのが最も難しいコンピューティング言語であると考えています。

長所と短所

アセンブリ言語は通常、高級言語よりも高速に実行できます。アセンブリ言語コードのコンポーネントを挿入したり削除したりするのは比較的簡単で、アセンブリ言語は通常、他の種類の言語と比較して、タスクを完了するために必要な命令が少なくて済みます。

アセンブリ言語は、アセンブリ言語を使用するとハードウェアを直接操作できるため、コンピューターをより細かく制御したいプログラマーによってもよく使用されます。その速度と重要性のために、一部のプログラムはアセンブリ言語を使用して特別に作成されます。これは、通常、コードをより小さく保つことができるためです。

アセンブリ言語にはいくつかの欠点があります。アセンブリ言語を使用して記述された長いプログラムは通常、より重い計算能力を必要とし、小さなコンピューターでは実行できません。アセンブリ言語の構文は覚えにくいと感じる人もいれば、アセンブリ言語は複雑なため、コーディングに時間がかかる場合もあります。さらに、アセンブリ言語は通常、異なるメーカーの異なるコンピューター間で移植できません。会社を変えると従業員の福利厚生が失われるのと同じように、言語をさまざまなコンピューターにシームレスに翻訳することはできません。

長所
  • 実行は他の言語に比べて簡単かもしれません

  • 通常、実行は他の言語に比べて高速です

  • ハードウェアの直接制御が可能

  • コードは他の言語に比べて小さいままかもしれません

短所
  • プログラミングは、高級言語に比べて習得するのが難しい場合があります

  • アセンブリ言語の構文が難しい

  • マシン間で移植不可

アセンブラの種類

アセンブリ言語は、アセンブラを使用して機械語に変換する必要があります。アセンブラには主に 2 つのタイプがあります。

シングルパス アセンブラは、プログラムを 1 回スキャンして、同等のバイナリ プログラムを作成します。このタイプのアセンブラは、ニーモニック コード テーブルでコードを検索することにより、アセンブリ言語コードを検証します。多くの場合、シングルパス アセンブラはマルチパス アセンブラよりも高速であり、通常は中間コードを構築する必要はありません。

マルチパス アセンブラとは、アセンブラが複数のパスを使用することを意味します。マルチパス アセンブラは、最初のパスですべてのシンボルとそれぞれの値を含むテーブルを作成し、その後のパスでそのテーブルを使用して新しいコードを生成します。通常、個別のパスはそれぞれ異なる特定のタスクを処理します。通常は低速ですが、モジュラー構造を持つマルチパス アセンブラーは、多くの場合、別のマシンで再利用できます。

アセンブリ言語コードの例

以下は、Netwide Assembler (NASM) アセンブリ言語コードの例です。

アセンブリ言語コードの例。

ロヨラ・メリーマウント大学

この例では、コードの末尾にある SYSCALL 命令が、オペレーティング システム サービスが格納されているメモリの一部をトリガーします。次に、コード RAX を使用してコードの書き込みを呼び出し、次に RDI を終了します。SYSCALL 関数は、オペレーティング システムを呼び出すためと、コードが終了して終了する時期をシステムに示すために 2 回使用されます。

アセンブリ言語の例は何ですか?

最も一般的に使用されるアセンブリ言語には、ARM、MIPS、および x86 があります。

C++ はアセンブリ言語ですか?

C++ はアセンブリ コードで構成されていません。C++ コンピューティング言語は、コンパイラが実行可能なマシン コードに変換する C++ コードで構成されています。

Python はアセンブリ言語ですか?

Python は、アセンブリ言語よりも高度です。アセンブリ言語は低レベル言語と見なされますが、C、Java、または Python などの高レベル言語は、数字、記号、および略語の代わりに 0 と 1 を使用します。

アセンブリ言語は今日どのように使用されていますか?

より高度な言語に比べて低レベルの言語と見なされていますが、アセンブリ言語は依然として使用されています。アセンブリ言語は、ハードウェアを直接操作したり、特殊なプロセッサ命令にアクセスしたり、重要なパフォーマンスの問題を評価したりするために使用されます。これらの言語は、高頻度の取引などの時間に敏感な活動のために、高級言語よりも速度の利点を活用するためにも使用されます。

結論

アセンブリ言語は、コーディング言語を使用して入力された命令と、マシンがコード命令を解釈する方法との間の強い関係に依存する低レベル コードです。コードは、入力をマシンの認識可能な命令に変換するアセンブラを使用して、実行可能なアクションに変換されます。コンピューティングの初期には一般的でしたが、より大規模なシステムの多くは高水準言語を使用しています。