Menu
Coddy logo textTech

レジスタ 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にはそれができません。まずそれらをレジスタにロードする必要があります。

自分で試してみよう

このレッスンにはコードチャレンジは含まれていません。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン