アセンブリ言語はどんなプログラム設計言語ですか?


本教程では、Microsoft Windows 32ビットと64ビットシステムを実行するIntelとAMDプロセッサと互換性のあるマイクロプロセッサプログラムを紹介します。
 
教程ではMicrosoftマクロアセンブラ(MASMという)の最新バージョンを使用しています。Microsoft Visual Studioの大多数のバージョン(専門版、旗艦版、簡潔版…)はMASMを含んでいます。
Visual StudioがMASMにサポートする最新の詳細情報を知ることができます。また、Webサイトには、ソフトウェアの設定方法や使用開始に関する多くの有用な情報が含まれています。
Microsoft Windowsを実行するx 86システムには、他のいくつかの有名なアセンブラが含まれています。TASM(Turboアセンブラ)、NASM(Netwideアセンブラ)とMASM 32(MASMの一種の変体)。GAS(GNUアセンブラ)とNASMはLinuxに基づくアセンブラです。これらのアセンブラでは、NASMの文法はMASMのものと最も似ています。
アセンブリ言語は最も古いプログラミング言語で、すべての言語の中で原生マシン言語に最も近いです。コンピュータのハードウェアに直接アクセスできます。コンピュータアーキテクチャとオペレーティングシステムを理解するようにユーザに要求します。
もしパートナーが学んでいる大学の課程の名称が下記の課程の一つと似ているなら、本教程を通じてもっと多くの専門知識を学ぶことができます。
  • マイクロコンピュータアセンブリ言語
  • アセンブリ言語プログラミング
  • コンピュータシステム構成論
  • コンピュータシステムの基礎
  • 組み込みシステムプログラミング
  • 本教程を通して、コンピュータの体系構造、機械言語と基礎プログラミングの基本原理を学ぶことに役立ちます。十分なアセンブリ言語を習得して、その把握している今最も広範なマイクロプロセッサシリーズの知識をテストします。アナログのコンパイラで「おもちゃ」のコンピュータを作ることはできません。MASMは業界の専門家が使う工業級のアセンブラです。皆さんはプログラマの観点からIntelプロセッサシリーズのアーキテクチャを理解します。
    CまたはC++開発者になるためには、メモリ、アドレス、コマンドがどのように底の部分で働くかを理解する必要があります。高度な言語レベルでは、多くのプログラミングエラーが識別されにくいです。そのため、プログラマは常にプログラム内部に「深く」を必要とすることを発見して、プログラムが動作しない原因を探し出すことができます。
    学習アセンブリの質問があります。
    どんな背景知識が必要ですか?
    本教程を学ぶ前に、Java、C、Python、またはC++などの構造化された高級言語を使用してプログラムを行いました。プログラミング問題を解決するためにIF文、配列、関数の使い方を知る必要があります。
    アセンブラとリンクは何ですか?
    アセンブラは、アセンブリ言語のソースプログラムをマシン言語に変換するためのツールプログラムです。リンク器(linker)も、アセンブラが生成した単一のファイルを実行可能なプログラムに結合するツールプログラムです。もう一つの関連ツールがあります。デバッグといいます。プログラムを実行する時、プログラムをシングルステップで実行してレジスターとメモリの状態を確認することができます。
    どんなハードウェアとソフトウェアが必要ですか?
    32ビットまたは64ビットのMicrosoft Windowsシステムを実行するコンピュータは、最近のバージョンのMicrosoft Visual Studioをインストールしています。
    MASMはどのタイプのプログラムを作成できますか?
    32ビット保護モード(32-Bit Prottected Mode):32ビット保護モードプログラムはすべての32ビットと64ビットバージョンのMicrosoft Windowsシステムで実行されます。それらは通常、実際のモードプログラムよりも簡単に作成され理解されます。これからは32ビットモードと略称します。
    64ビットモード(64-Bit Mode):64ビットプログラムはすべての64ビットバージョンのMicrosoft Windowsシステムで実行されます。
    16ビット実数アドレスモード(16-Bit Real-Address Mode):16ビットプログラムは32ビットバージョンのWindowsと組み込みシステムで実行されます。64ビットのWindowsはこのようなプログラムをサポートしていません。
    アセンブリ言語とマシン言語は何の関係がありますか?
    マシン言語(machine langage)はデジタル言語で、成能を設計してコンピュータープロセッサ(CPU)に理解されます。すべてのx 86プロセッサは共通のマシン言語を理解しています。
    アセンブリ言語は、ADD、MOV、SUB、CALLなどの短い補数で書かれた文を含む。アセンブリ言語とマシン言語は一対の関係です。各アセンブリ言語の命令は一つのマシン言語の命令に対応しています。
    C++とJavaはアセンブリ言語と何の関係がありますか?
    高度な言語はPython、C++とJavaとアセンブリ言語とマシン言語の関係はペアが多いです。例えば、C++の文が複数のアセンブリ命令またはマシン命令に拡張されます。
    ほとんどの人はオリジナルのマシンコードを読むことができませんので、ここで検討しているのは一番近いアセンブリ言語です。例えば、次のC++コードは2つの算術演算を行い、その結果を変数に割り当てます。XとYを整数とする。
      int Y;  int X = ( Y + 4 ) * 3;
    これに相当するアセンブリ言語プログラムは以下の通りです。このような変換には複数の文が必要です。各アセンブリ文は一つのマシン命令にのみ対応しています。
      mov eax,Y  ;Y    EAX      add eax,4  ;EAX        4  mov ebx,3  ;3    EBX      imul ebx   ;EAX   EBX     mov x,eax  ;EAX      X
    レジスター(register)は、操作の中間結果を保存するためにCPUによって名付けられた記憶位置である。この例のポイントはC++とアセンブリ言語のどちらがいいかを説明するのではなく、その関係を示すことです。
    アセンブリ言語は移植できますか?
    一つの言語は、ソースプログラムが様々なコンピュータシステムでコンパイルされ、実行されると、この言語は移植可能な言語と呼ばれています。
    例えば、C++プログラムは、特定のオペレーティングシステムのライブラリ関数を参照する必要がない限り、ほとんどのコンピュータでコンパイルおよび実行できます。Java言語の大きな特徴は、そのコンパイルされたプログラムがほとんどすべてのコンピュータシステムで実行されます。
    アセンブリ言語は、特定のプロセッサシリーズのために設計されているので、移植可能ではない。現在広く使われているのはさまざまなアセンブリ言語があります。どれも一つのプロセッサシリーズに基づいています。
    いくつかのよく知られているプロセッサシリーズについては、例えばMotoola 68×00、x 86、SUN Sparc、Vax、IBM-370は、アセンブリ言語命令が直接にこのコンピュータシステム構造に合致し、または実行時にマイクロコード解釈器と呼ばれるプロセッサ内蔵プログラムで変換されます。
    なぜアセンブリー言語を勉強しますか?
    アセンブリ言語を学ぶことに疑問があるなら、これらの観点を考えてみてください。
  • コンピュータ工学を勉強するなら、組み込みプログラムを書くように要求されるかもしれません。組込みプログラムとは、電話、自動車燃料と点火システム、エアコン制御システム、安全システム、データ収集機器、グラフィックカード、ハードディスクドライブ、モデルチェンジ器、プリンタなどの専用設備を含みます。アセンブリ言語はメモリが少ないため、組み込みプログラムを作成するのに理想的なツールです。
  • シミュレーションおよびハードウェアモニタを処理するリアルタイムアプリケーションは、正確なタイミングと応答を要求する。高度な言語は、コンパイラが生成したマシンコードをプログラマに正確に制御させません。アセンブリ言語は、プログラマがプログラムの実行可能なコードを正確に指定することができます。
  • コンピュータゲームは、コードのサイズを減らし、実行速度を速めることにおいて、ソフトに高度な最適化を要求する。一つのターゲットシステムに対して、ハードウェアの特性を十分に活用できるコードを作成するには、ゲームプログラマーは専門家です。彼らはよくアセンブリ言語をツールとして選びます。アセンブリ言語はコンピュータのハードウェアに直接アクセスできるので、速度を上げるためにコードを手作業で最適化できます。
  • アセンブリ言語は、コンピュータのハードウェア、オペレーティングシステムとアプリケーションとの相互作用の全面的な理解を形成するのに役立つ。アセンブリ言語を使って、コンピュータシステムの構造とオペレーティングシステムの課程から得られた理論知識を運用して検査することができます。
  • いくつかの高度な言語がデータ表現を抽象化しています。これによって、下位のタスクを実行する時、ビット制御のような不便さが見えます。このような状況では、プログラマーはしばしばアセンブリ言語で作成されたサブルーチンを呼び出して彼らの任務を遂行します。
  • ハードウェアメーカーは、販売するデバイスのためのデバイスドライバを作成します。デバイスドライバは、汎用オペレーティングシステム命令をハードウェアの詳細に関する具体的な参照に変換するプログラムです。例えば、プリンタメーカーは彼らが販売する機種ごとに異なるMS-Windowsデバイスドライバを作成しました。通常、これらのデバイスドライバは、大量のアセンブリ言語コードを含んでいる。
  • アセンブリ言語に規則がありますか?
    ほとんどのアセンブリ言語規則は、目的プロセッサとそのマシン言語の物理的限界に基づいています。例えば、CPUは、2つの命令の操作数の大きさが同じであることを要求する。C++またはJavaと比較して、アセンブリ言語の規則はより少ないです。前者は文法規則を使って予期しない論理エラーを減らすため、これは下のデータアクセスを制限することを代価としているからです。
    アセンブリ言語プログラマは、高度な言語の限定的な特徴を簡単に回避することができます。例えば、Javaは特定のメモリアドレスへのアクセスを許可しない。プログラマはJNI(Java Native Interface)クラスを使用してC関数を呼び出してこの制限を回避しますが、結果としてプログラムが維持しにくいです。
    逆に、アセンブリ言語はすべてのメモリアドレスにアクセスできます。しかし、このような自由の対価も高いです。アセンブリ言語プログラマーは大量の時間をかけてデバッグを行う必要があります。
    下一篇:アセンブリ言語の応用