アセンブリ言語
アセンブリ言語は低水準プログラミング言語であり、C言語などの高級言語より抽象度が低い。すなわち言語機能(構文や型)が少ない。次の表は「基本的なアセンブリ言語」と高級言語の間にある言語機能差である。
この差はあくまで言語機能の差である。「高級言語でのみ可能、アセンブリ言語では不可」という意味ではない。例えばアセンブリ言語に関数構文は存在しないが関数に相当するパターンが存在する(関数プロローグ・エピローグ(英語版))。より正確な言い方をすれば、アセンブラで頻出するパターンを1つの機能として言語仕様に組み込んで抽象度を上げていった言語が高級言語である。
構造化プログラミングの要素を取り入れたアセンブラもある。最初期には "Concept-14 macro set" がSystem/360のマクロアセンブラにIF/ELSE/ENDIFなどの制御構造を導入した。また8080/Z80プロセッサ向けの A-natural ではブロック構造や命令実行順序の制御が採用された。
また構造化プログラミングとは若干異なるが、キャリーラボはBASIC風の文法のアセンブリ言語 BASE を開発した。Z80用のBASE-80とMC6809用のBASE-09がある。BASEの表記例は下記の通り(BASE-09)。
上記の記述は下記のアセンブラ表記に対応する。
アセンブリ言語が用いられる事例として以下が挙げられる。
組み込みシステム: 省フットプリントでのハードウェア操作が目的 電話機のファームウェア 自動車の燃料・点火システム センサー
デバイスドライバや割り込みハンドラ、ブートコード、BIOS、POST ハードウェアないしはファームウェアの呼び出し規約をアセンブリ言語によりカーネルやドライバにて使用している高級言語の規約へ変換することにより、主要な機能を高級言語で実装することができる。
暗号化: 高級言語非対応命令の使用が目的 ビット単位ローテート命令
数値計算: 高速化が目的 コンピュータゲーム ライブラリ: 例 - BLAS, 離散コサイン変換(x264のSIMDアセンブリ版)
リアルタイムシステム: リアルタイム性が目的 フライ・バイ・ワイヤシステム: 航空航法システムの一種。テレメトリを厳密な制限時間内に解釈して対応する必要 医療装置
暗号アルゴリズムは常に厳密に同じ時間で実行することで、タイミング攻撃を防ぐ。
高度なセキュリティが要求され、環境を完全に制御する必要がある場合。
監視・トレース・デバッグのための命令セットシミュレータで、追加のオーバーヘッドを最小に保ちたい場合。
リバースエンジニアリング: 挙動理解が目的 デバッグ: 例 - コンパイラ最適化の確認 ソフトウェア改造: 例 - 商用コンピュータゲームの改造 ハッキング: 例 - コピープロテクト解除 学習: コンピュータの理解
自己書き換えコード
コードサイズの上限に制限がある環境 ブートセクタに格納するブートローダ。例として、MBRでは最大446バイト。 トラップ処理やシグナルハンドラ起動などのために、カーネルがプロセスのアドレス空間へ見せるコード。