レジスタ vs メモリ
CoddyのAssemblyジャーニー「基礎」セクションの一部。レッスン 3/45。
コンピューター内でデータが存在できる2つの場所について学びました。
- レジスタ:CPU内部にある小さな記憶ボックス
- メモリ(RAM):CPUの外部にある、番号付きスロットが並ぶ巨大なグリッド
しかし、なぜ2か所あるのでしょうか?なぜCPUはメモリと直接処理できないのでしょうか?
答えは速度です。レジスタはCPUの内部にあるため、非常に高速です。メモリは外部にあるため、より低速です。CPUは1サイクルでレジスタにアクセスできますが、メモリへのアクセスにははるかに長い時間がかかります。
並べて比較:
| 特徴 | レジスタ | メモリ(RAM) |
|---|---|---|
| 場所 | CPU内部 | CPU外部 |
| 速度 | 非常に高速(1サイクル) | 低速(多数のサイクル) |
| 記憶スロットの数 | 非常に少ない(x86-64では16~32) | 数百万または数十億 |
| 各スロットのサイズ | 8バイト(64ビット) | 1バイト |
| アクセス方法 | 名前でアクセス(rax、rbx、rcx...) | アドレスでアクセス(1000、msg、buffer) |
| 揮発性? | はい(電源を切ると消える) | はい(電源を切ると消える) |
アセンブリにおける最も重要なルール:
CPUはメモリ内のデータを直接操作できません。まずデータをレジスタにロードする必要があります。
これは任意ではありません。CPUはそのように設計されています。すべての加算、すべての比較、すべてのデータの移動は、レジスタを通じて行わなければなりません。
常に使用する3段階のパターン:
| 手順 | 処理内容 | 例 |
|---|---|---|
| 1. LOAD | メモリからレジスタにデータをコピーする | mov rax, [count] |
| 2. WORK | レジスタに対して何らかの処理を行う | add rax, 5 |
| 3. STORE | 結果をメモリに戻してコピーする(必要な場合) | mov [result], rax |
このルールを忘れるとどうなりますか?
メモリ内にある2つの数値を加算しようとすると、アセンブラはエラーを出します。CPUは単純にそれを実行できません。まず、それらをレジスタに読み込む必要があります。
自分で試してみよう
このレッスンにはコードチャレンジは含まれていません。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: Assemblyプレイグラウンド