1.0 アセンブリ言語の基礎概念
1.1 定義と役割
アセンブリ言語は、特定のプロセッサファミリー向けに設計された低水準プログラミング言語です。高水準言語と、プロセッサが直接実行する生のバイナリマシンコードとの間の、より分かりやすい橋渡しとして機能します。
- 機械言語: プロセッサは1と0の文字列で構成される機械語のみを理解します。この形式は、直接ソフトウェアを開発するには難解で複雑すぎます。
- アセンブリ言語: 記号コード (ニーモニック) とより読みやすい構文を使用して機械語命令を表現し、ハードウェア レベルでより明確にプログラミングできるようになります。
1.2 主な利点
アセンブリ言語を使用すると、特にパフォーマンスが重要でハードウェア中心のアプリケーションでは、いくつかの明確な利点が得られます。
- システム認識: プログラムがオペレーティング システム (OS)、プロセッサ、BIOS とどのようにインターフェイスするか、プロセッサが命令にアクセスして実行する方法、プログラムが外部デバイスとどのように対話するかについて、深い理解を促します。
- パフォーマンス: アセンブリ プログラムは、高級言語で作成されたプログラムに比べて、必要なメモリが少なく、実行時間も短くなります。
- ハードウェア制御: ハードウェアを直接かつ正確に操作できるため、ハードウェア固有の時間重視のタスク、割り込みサービス ルーチン、メモリ常駐プログラムに適しています。
1.3 コアPCハードウェアとデータ表現
効果的なアセンブリ プログラミングは、主要な内部ハードウェアとデータの表現方法を理解することに基づいて構築されます。
- コアコンポーネント: PCの主なハードウェアは、プロセッサ、メモリ、レジスタ(データとアドレスを保持するプロセッサ内部のコンポーネント)で構成されています。プログラムは外部デバイスから内部メモリにコピーされ、プロセッサによって実行されます。
- 基本単位: ビットは記憶の基本単位です(ON/1 または OFF/0)。8ビットの集合が1バイトを構成します。
- データサイズ: プロセッサはさまざまなデータ サイズをサポートします: | 名前 | サイズ | | :— | :— | | ワード | 2 バイト (16 ビット) | | ダブルワード | 4 バイト (32 ビット) | | クアッドワード | 8 バイト (64 ビット) | | 段落 | 16 バイト (128 ビット) | | キロバイト | 1,024 バイト | | メガバイト | 1,048,576 バイト |
- バイト順序: プロセッサは、逆バイト シーケンス (リトルエンディアン) でデータを格納します。つまり、下位バイトは下位メモリ アドレスに格納され、上位バイトは上位メモリ アドレスに格納されます。
1.4 数体系と算術
- バイナリシステム: 位置記法を用いた2進法。8ビットの数値ですべてのビットを1にした場合の値は255(2⁸ - 1)です。
- 16進数システム: 長い2進数表現を省略するために使用される16進数システム。数字は0~9とA~Fです。16進数の各桁は4ビットの2進数シーケンスに対応します。
- 2進演算: 負の2進数は次のように表されます。 2の補数表記数値の負の値を得るには、ビットを反転し、1を加算します。減算は、減数を2の補数に変換し、それを被減数に加算することで行います。