概要
アセンブリ(Assembly / Assembly Language)は、文脈により全く異なる意味を持つ多義語である:
- アセンブリ言語: CPU が直接実行する機械語と 1:1 対応する低レベルプログラミング言語
- .NET アセンブリ: .NET の実行可能ファイル単位(DLL / EXE)、メタデータ + IL コード
- Java JAR: Java の配布単位、複数クラスを ZIP 圧縮
- 製造業の組立: 部品から製品を組み立てる工程
PC 自作 / プログラミング文脈で最も頻出は (1) のアセンブリ言語で、x86_64(Intel / AMD)/ ARM64(Apple Silicon / Qualcomm)/ RISC-V(OSS)が三大命令セットアーキテクチャ(ISA)。OS カーネル・ブートローダ・暗号ライブラリ・ゲームエンジンの最適化箇所・組込みシステムで現役技術である。
主要命令セットアーキテクチャ(ISA)
| ISA | 採用 CPU | 特徴 |
|---|
| x86_64 / AMD64 | Intel Core / AMD Ryzen / EPYC | デスクトップ / サーバ標準、CISC |
| ARM64 / AArch64 | Apple Silicon / Qualcomm Snapdragon / AWS Graviton | モバイル / Mac / 効率重視 |
| RISC-V | SiFive / Western Digital / 中国系 | OSS、急成長 |
| LoongArch | Loongson 中国 | 中国国産 |
| POWER | IBM Power10 | エンタープライズ |
| MIPS(廃止間近) | レガシー組込 | 衰退 |
アセンブリ言語の例(x86_64)
section .data
msg db "Hello, World!", 10
len equ $ - msg
section .text
global _start
_start:
mov rax, 1 ; sys_write
mov rdi, 1 ; stdout
mov rsi, msg ; メッセージアドレス
mov rdx, len ; 長さ
syscall
mov rax, 60 ; sys_exit
mov rdi, 0 ; exit code
syscall
主要アセンブラ
x86_64 / x86
| ツール | 形態 |
|---|
| NASM(Netwide Assembler) | OSS、Intel 構文 |
| GAS(GNU Assembler) | OSS、AT&T 構文 |
| MASM(Microsoft Macro Assembler) | Windows、Intel 構文 |
| YASM | NASM 互換、改良版 |
| FASM | OSS、自己ホスティング |
ARM64
| ツール | 形態 |
|---|
| GAS ARM | OSS |
| LLVM Clang ARM | OSS |
| ARM Compiler 6 | 商用 |
RISC-V
| ツール | 形態 |
|---|
| GNU RISC-V Toolchain | OSS |
| LLVM RISC-V | OSS |
SIMD(並列演算)命令
| 拡張 | ビット幅 | 採用 |
|---|
| SSE / SSE2-4 | 128bit | x86_64 全 CPU |
| AVX2 | 256bit | Intel / AMD(2014 以降) |
| AVX-512 | 512bit | Xeon / Ryzen(一部) |
| AVX10 | 256/512bit | Intel 次世代統合(2026 年) |
| NEON | 128bit | ARM64 全 CPU |
| SVE2 | 可変 | ARMv9 |
| RVV(RISC-V Vector) | 可変 | RISC-V Vector 拡張 |
アセンブリの現代的な用途
| 用途 | 理由 |
|---|
| OS カーネル ブート | 起動初期の低レベル制御 |
| 暗号ライブラリ | サイドチャネル攻撃対策、定数時間実装 |
| 動画コーデック | x264 / x265 / AV1 の SIMD 最適化 |
| ゲームエンジン | 物理計算 / 3D 数学のホットパス |
| 数値計算 | BLAS / LAPACK の SIMD |
| 組込みシステム | RAM 制限環境 |
| エクスプロイト開発 | Reverse Engineering / Pwn |
| JIT コンパイラ | LLVM / V8 / .NET CLR |
| デバッガ | GDB / WinDbg / lldb |
| プロファイラ | perf / Intel VTune |
.NET アセンブリ(DLL / EXE)
別文脈。.NET の配布単位で、メタデータ + IL(Intermediate Language)コードを含む。実行時に CLR(Common Language Runtime)が JIT コンパイルしてネイティブコード化する。
// .NET アセンブリ作成
public class HelloWorld {
public static void Main() {
System.Console.WriteLine("Hello!");
}
}
// → HelloWorld.dll や .exe として配布
学習リソース(2026 年)
| リソース | 言語 |
|---|
| Compiler Explorer (godbolt.org) | C++ → アセンブリ表示 |
| Easy 6502 オンライン | 6502 入門 |
| RISC-V Reader | RISC-V 詳細 |
| Intel 64 and IA-32 Architectures Software Developer Manual | x86_64 完全リファレンス |
| ARM Architecture Reference Manual | ARM 完全リファレンス |
PC 自作との接点
- CPU 選定: x86_64(Intel / AMD)vs ARM64(Apple)vs RISC-V(将来)
- オーバークロック: CPU 命令の挙動理解が深いほど安全な OC 可能
- コンパイラ最適化: -march=native / -mavx2 等で SIMD 利用
- アセンブリ学習: Visual Studio / godbolt.org でコンパイラ出力確認
関連用語との違い
| 用語 | 違い |
|---|
| 機械語 | バイナリ、アセンブリは可読版 |
| 高級言語 | C/Python 等、アセンブリは低レベル |
| ニーモニック | 命令の英字表記、アセンブリの記法 |
| バイトコード | JVM / .NET 中間形式、機械語の上位 |
よくある質問
Q1: 現代のプログラマがアセンブリを学ぶ価値は?
A: ホットパス最適化 / Reverse Engineering / 組込み / セキュリティ研究で価値大。一般 Web 開発では直接使わないが、コンパイラの出力を読めれば性能チューニングに圧倒的有利。
Q2: x86_64 と ARM64、初学者はどちらを学ぶ?
A: ARM64(命令数少なく直交性高い、Mac / iPhone / モバイル全対応)。x86_64 は歴史的拡張多く複雑、Intel / AMD ハードコア用途で。
Q3: RISC-V はメインストリームになる?
A: 2030 年代に組込 / 一部 PC で採用拡大予測。中国 / インドの国産 CPU、AWS Graviton 系の対抗候補。デスクトップ / サーバ市場で x86_64 / ARM64 を脅かすには 5-10 年要する見込み。
まとめ
- CPU が実行する 機械語に近い低レベル言語(多義語)
- 2026 年は x86_64 / ARM64 / RISC-V が三大 ISA
- OS カーネル / 暗号 / 動画 / ゲームの 最適化に現役