Menu
CoddyTech

レジスタ vs メモリ

CoddyのAssemblyジャーニー「基礎」セクションの一部。レッスン 3/45。

コンピューターの中でデータを保存できる場所を2つ学びました。

  • レジスター:CPUの内部にある小さな記憶領域
  • メモリー(RAM):CPUの外部にある、番号付きスロットが並んだ巨大なグリッド

しかし、なぜ2か所あるのでしょうか?CPUはすべてをメモリに保持しないのでしょうか?

答えは速度です。レジスタはCPUの内部にあるため、非常に高速です。メモリはCPUの外部にあるため、より低速です。CPUは1サイクルでレジスタにアクセスできますが、メモリへのアクセスにははるかに時間がかかります。

比較:

特徴レジスタメモリ(RAM)
場所CPUの内部CPUの外部
速度非常に高速(1サイクル)低速(多くのサイクル)
記憶スロットの数ごくわずか(x86-64では16〜32個)数百万または数十億
各スロットのサイズ8バイト(64ビット)1バイト
アクセス方法名前でアクセス(rax、rbx、rcx...)アドレスでアクセス(1000、msg、buffer)
揮発性?はい(電源を切ると消える)はい(電源を切ると消える)

アセンブリで最も重要なルール:

1つの命令で使用できるメモリオペランドは最大1つです。メモリ上にある2つの値を組み合わせるには、まずそのうち1つをレジスタに読み込んでください。

レジスタは、扱う値を保持しておく場所でもあります。メモリへのアクセスは毎回遅いためです。

常に使う3ステップのパターン:

ステップ何が起こるか例
1. LOADメモリからレジスタにデータをコピーするmov rax, [count]
2. WORKレジスタを使って何かをするadd rax, 5
3. STORE結果をメモリに戻してコピーする(必要な場合)mov [result], rax

このルールを忘れるとどうなりますか?

メモリ上にある2つの数値を足そうとすると、アセンブラーはエラーを出します。CPUにはそれができません。まず、どちらか一方をレジスターに読み込む必要があります。

自分で試してみよう

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

quiz icon腕試し

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

基礎のすべてのレッスン

自分で練習してみよう: Assemblyプレイグラウンド