Hacker News

x86-64 CPU にはいくつのレジスタがありますか? (2020年)

x86-64 CPU にはいくつのレジスタがありますか? (2020年) この探索では多くのことを掘り下げ、その重要性と可能性を検証します — Mewayz Business OS。

1 最小読み取り

Mewayz Team

Editorial Team

Hacker News

x86-64 CPU には 16 個の汎用レジスタがありますが、完全なレジスタ ファイルははるかに大きく、浮動小数点、SIMD、セグメント、制御、およびモデル固有のレジスタを含めると 100 を超えるアーキテクチャ レジスタが含まれます。低レベルのコードを書く場合でも、システムのパフォーマンスをデバッグする場合でも、単にオペレーティング システムの下で何が起こっているかについての好奇心を満たす場合でも、全体像を理解することが重要です。

x86-64 の 16 個の汎用レジスタとは何ですか?

x86 アーキテクチャ (AMD64/Intel 64) の 64 ビット拡張により、IA-32 の元の 8 個の汎用レジスタが 2 倍の 16 個になりました。これらは日常の計算の主力であり、算術演算、メモリ アドレス指定、関数の引数、および戻り値に使用されます。

RAX、RBX、RCX、RDX — オリジナルの「アキュムレータ」、「ベース」、「カウンタ」、および「データ」レジスタが 64 ビット幅に拡張されました

RSI、RDI — ソース インデックスと宛先インデックス。文字列操作や関数の引数によく使用されます。

RSP、RBP — スタック ポインタとベース ポインタ。コール スタックとスタック フレームの管理に重要です。

R8 ~ R15 — 32 ビット アーキテクチャには存在しない、x86-64 で導入された 8 つの新しいレジスタにより、コンパイラの最適化の柔軟性が大幅に向上します。

これらの 64 ビット レジスタのそれぞれには下位互換性があり、下位 32 ビット (EAX など)、16 ビット (AX)、さらには個々の 8 ビットの半分 (AH、AL) をアドレス指定できます。これは、1978 年から Intel 8086 まで遡る設計のレガシーです。

x86-64 には実際に合計レジスタ数はいくつありますか?

💡 ご存知でしたか?

Mewayzは8つ以上のビジネスツールを1つのプラットフォームに統合します

CRM・請求・人事・プロジェクト・予約・eCommerce・POS・分析。永久無料プラン提供中。

無料で始める →

汎用レジスタ以外にも目を向けると、その数は大幅に増加します。最新の x86-64 プロセッサは、ユーザー空間プログラムとオペレーティング システム カーネルの両方にいくつかの異なるレジスタ クラスを公開します。

RFLAGS レジスタは、条件コード (ゼロ フラグ、キャリー フラグ、オーバーフロー フラグ) を保持する単一の 64 ビット レジスタで、すべての算術演算または論理演算後の条件付き分岐を制御します。 RIP レジスタ (命令ポインタ) は、次に実行する命令のアドレスを追跡し、ほとんどの命令では直接変更できません。

6 つのセグメント レジスタ (CS、DS、ES、FS、GS、SS) は、以前の x86 アーキテクチャのセグメント メモリ モデルから残っています。 64 ビット モードでは、ほとんどが痕跡ですが、FS と GS は、スレッド ローカル ストレージと CPU ローカル カーネル データ構造を指すためにオペレーティング システムによって依然として積極的に使用されています。

次に、SSE で導入された 16 個の XMM レジスタ (XMM0 ~ XMM15) があり、それぞれ幅 128 ビットです。 AVX では、これらは 256 ビット YMM レジスタになり、AVX-512 ではさらに 512 ビット ZMM レジスタに拡張され、サポートされているハードウェア上のファイルにさらに 32 レジスタが追加されます。スタックとして編成された従来の 8 つの x87 FPU レジスタ (ST0 ~ ST7) は、80 ビットの拡張精度浮動小数点計算を処理します。

重要な洞察: 一般的な x86-64 プロセスのユーザー空間コードから見えるレジスタの総数は、約 40 ~ 50 (汎用レジスタ、フラグ、命令ポインタ、セグメント、および XMM レジスタ) です。カーネル モード制御レジスタ、デバッグ レジスタ、および数百のモデル固有レジスタ (MSR) を追加すると、完全なアーキテクチャ レジスタ スペースは数千に達します。そのほとんどは、通常のソフトウェアでは決して触れられません。

なぜ x86-64 では汎用レジスタ数が 2 倍になったのでしょうか?

8 個の汎用レジスタから 16 個への汎用レジスタの変更は、AMD が 2000 年代初頭に x86-64 拡張機能を設計したときに行った最も実用的な改善の 1 つです。元の 8 つのレジスタは深刻なボトルネックを引き起こしました。中間値を保持するのに十分なレジスタがなかったため、コンパイラは常に変数をメモリ (スタック) に書き込む必要がありました。この流出によって余分なロード命令とストア命令が生成され、時間とメモリ帯域幅の両方が消費されます。

16 個の汎用レジスターを使用すると、x86-64 呼び出し規約 (Linux/macOS では System V AMD64 ABI、Windows では Microsoft x64 ABI) で、最初のいくつかの関数引数を完全にレジスターで渡すことができます (Linux では 6 つの整数引数 (RDI、RSI、RDX、RCX、R8、R9)) をスタックにまったく触れることなく渡すことができます。

Ready to Simplify Your Operations?

Whether you need CRM, invoicing, HR, or all 207 modules — Mewayz has you covered. 138K+ businesses already made the switch.

Get Started Free →

Mewayzを無料で試す

CRM、請求書、プロジェクト、人事などを網羅するオールインワンプラットフォーム。クレジットカードは不要です。

今日からビジネス管理をスマートに始めましょう。

30,000+社の企業が参加しています。永久無料プラン・クレジットカード不要。

これは役に立ちましたか?共有する。

実践に移す準備はできていますか?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

無料トライアル開始 →

行動を起こす準備はできていますか?

今日からMewayz無料トライアルを開始

オールインワンビジネスプラットフォーム。クレジットカード不要。

無料で始める →

14日間無料トライアル · クレジットカード不要 · いつでもキャンセル可能