x86


X86

は、一般的なIntelマイクロプロセッサアーキテクチャについてです。「x86」とも呼ばれるこのアーキテクチャの32ビット世代については、IA-32を参照してくださいx86は、Intel8086マイクロプロセッサとその8088バリアントに基づいてIntelによって最初に開発された命令セットアーキテクチャのファミリです。8086は、Intelの8ビット8080マイクロプロセッサの完全な16ビット拡張として1978年に導入され、プレーンな16ビットアドレスでカバーできるよりも多くのメモリをアドレス指定するためのソリューションとしてメモリセグメンテーションを備えています。「x86」という用語はされて入ってきたので、「86」、など、インテルの8086プロセッサ側には、いくつかの後継者の名80186、80286、80386および80486 プロセッサ。 x86 デザイナー Intel、AMD ビット
16ビット、32ビット、64ビット
紹介された
1978(16ビット)、1985(32ビット)、2003(64ビット)
設計 CISC タイプ
レジスタメモリ
エンコーディング
変数(1〜15バイト)
分岐
条件コード
エンディアンネス
少し
ページサイズ
8086 – i286:なしI386、i486の4 KBページP5 ペンティアム:追加4メガバイトのページ(レガシーPAE:4キロバイト2 MB)x86-64で:追加の1 GBページ
拡張機能
x87、IA-32、x86-64、MMX、3DNow!、SSE、MCA、ACPI、SSE2、NXビット、SSE3、SSSE3、SSE4、SSE4.2、AES-NI、CLMUL、RDRAND、SHA、MPX、SME、SGX、XOP、F16C、ADX、BMI、FMA、AVX、AVX2、AVX512、VT-x、VT-d、AMD-V、AMD-Vi、TSX、ASF、TXT
開ける
一部。一部の高度な機能では、x86にIntelからのライセンスが必要な場合がx86-64には、AMDからの追加ライセンスが必要な場合が80486プロセッサは30年以上市場に出回っているため、特許クレームの対象にはなりません。したがって、x86アーキテクチャの586より前のサブセットは完全にオープンです。
レジスター
一般的用途
16ビット:6つの半専用レジスタ、BPおよびSPは汎用ではありません
32ビット:EBPおよびESPを含む8つのGPR
64ビット:RBPおよびRSPを含む16 GPR
浮動小数点
16ビット:オプションの個別のx87 FPU
32ビット:オプションの個別または統合x87 FPU、後のプロセッサの統合SSEユニット
64ビット:統合されたx87およびSSE2ユニット、後の実装はAVX2およびAVX512に拡張されました
x86アーキテクチャは、1978年に最初にリリースされたIntel8086マイクロプロセッサチップに基づいていました。
Intel Core 2 Duo、x86互換の64ビットマルチコアプロセッサの例
AMD Athlon(初期バージョン)、技術的には異なりますが、完全に互換性のあるx86実装
何年にもわたって多くの追加と拡張がx86命令セットに追加されており、ほぼ一貫して完全な下位互換性がこのアーキテクチャは、Intel、Cyrix、AMD、VIA Technologies、およびその他の多くの企業のプロセッサに実装されています。Zet SoCプラットフォーム(現在は非アクティブ)などのオープンな実装もそれにもかかわらず、それらのうち、Intel、AMD、VIA Technologies、およびDM&P Electronicsのみがx86アーキテクチャライセンスを保持しており、これらのうち、最初の2つだけが最新の64ビットデザインを積極的に作成しています。
この用語は、IBM PC互換機と同義ではありません。これは、他の多数のコンピューターハードウェアを意味するためです。組み込みシステムと汎用コンピュータは、PC互換機市場が始まる前にx86チップを使用していましたが、 IBM PC(1981)がデビューする前にそれらのいくつかを使用していました。
2021年の時点で、販売されているほとんどのパーソナルコンピュータ、ラップトップ、およびゲーム機はx86アーキテクチャに基づいていますが、スマートフォンやタブレットなどのモバイルカテゴリはARMによって支配されています。ハイエンドでは、x86が引き続きコンピューティング集約型のワークステーションおよびクラウドコンピューティングセグメントを支配しますが、最速のスーパーコンピューターはARMベースであり、上位4つはx86ベースではなくなりました。

コンテンツ
1 概要2 年表 3 歴史
3.1 他のメーカー 3.2 ワードサイズの拡張
4 アーキテクチャの基本的なプロパティ
4.1 浮動小数点とSIMD
5 現在の実装
6 セグメンテーション
7 アドレッシングモード
8 x86レジスタ
8.1 16ビット 8.2 32ビット 8.3 64ビット 8.4 128ビット 8.5 256ビット 8.6 512ビット 8.7 その他/特別な目的 8.8 目的 8.9 構造
9 動作モード
9.1 リアルモード 9.2 非現実モード 9.3 システム管理モード 9.4 保護モード
9.4.1 仮想8086モード
9.5 ロングモード
10 拡張機能
10.1 浮動小数点ユニット 10.2 MMX 10.3 3DNow! 10.4 SSEおよびAVX 10.5 物理アドレス拡張(PAE) 10.6 x86-64 10.7 仮想化 10.8 AES
11 も参照してください
12 ノート
13 参考文献
14 参考文献
15 外部リンク

概要
1980年代と1990年代初頭、8088と80286がまだ一般的に使用されていたとき、x86という用語は通常8086互換のCPUを表しています。ただし、今日、x86は通常、80386の32ビット 命令セットともバイナリ互換性があることを意味します。これは、この命令セットが多くの最新のオペレーティングシステムで最小公分母になっているためであり、おそらく1985年に80386が導入されてから、この用語が一般的になりました。
8086および8088の導入から数年後、Intelは、野心的であるが運命の悪いIntel iAPX 432プロセッサの「iAPX」がより成功した8086ファミリのチップで試されたため、命名スキームと用語にいくらかの複雑さを加えました。 d]一種のシステムレベルのプレフィックスとして適用されます。8087や8089などのコプロセッサを含む8086システム、およびより単純なIntel固有のシステムチップは、iAPX86システムとして説明されました。 iRMX(オペレーティングシステム用)、iSBC(シングルボードコンピューター用)、およびiSBX(8086アーキテクチャに基づくマルチモジュールボード用)という用語も、すべてMicrosystem80という見出しの下にありました。 しかし、この命名スキームは非常に一時的なものであり、1980年代初頭の数年間続いた。
8086が主のために開発された組込みシステム大きく成功8080互換に対する応答として、及び小マルチユーザーまたはシングルユーザコンピュータザイログZ80、のx86ラインはすぐ機能と処理能力に成長しました。現在、x86は、固定およびポータブルの両方のパーソナルコンピューターに普及しており、ミッドレンジコンピューター、ワークステーション、サーバー、およびTOP500リストのほとんどの新しいスーパーコンピューター クラスターでも使用されています。多数のx86オペレーティングシステムを含む大量のソフトウェアが、x86ベースのハードウェアを使用しています。
ただし、最新のx86は組み込みシステムでは比較的まれであり、小型の低電力アプリケーション(小さなバッテリーを使用)や、家電製品やおもちゃなどの低コストのマイクロプロセッサー市場には、x86の重要な存在感が欠けています。ここでは単純な8ビットおよび16ビットベースのアーキテクチャが一般的ですが、x86互換のVIA C7、VIA Nano、AMDのGeode、Athlon Neo、Intel Atomは、一部で使用されている32ビットおよび64ビットの設計の例です。比較的低電力で低コストのセグメント。
Intelによるものを含め、最初の単純な8ビットマイクロプロセッサから直接設計された「不法な」x86アーキテクチャの市場支配を終わらせるためのいくつかの試みがありました。この例としては、iAPX 432(元々はIntel 8800 という名前のプロジェクト)、Intel 960、Intel 860、およびIntel / Hewlett- PackardItaniumアーキテクチャがただし、x86マイクロアーキテクチャ、回路、および半導体製造の継続的な改良により、多くのセグメントでx86を置き換えることは困難になります。AMDの64ビット拡張x86(Intelは最終的に互換性のある設計で対応)と、最新のマルチコアCPUの形でのx86チップのスケーラビリティは、確立された業界の継続的な改良の例としてx86を強調しています。標準は、完全に新しいアーキテクチャとの競争に抵抗することができます。

年表
 「X86」  
次の表に、x86命令セットのバリエーションを実装するプロセッサモデルとモデルシリーズを時系列で示します。各ラインアイテムは、大幅に改善された、または商業的に成功したプロセッサマイクロアーキテクチャ設計によって特徴付けられます。
x86プロセッサの年表
世代 序章 著名なCPUモデル アドレス空間 注目すべき機能
線形 バーチャル 物理的x86 1位 1978年
Intel 8086、Intel 8088(1979)
16ビット NA 20ビット
16ビット ISA、IBM PC(8088)、IBM PC / XT(8088) 1982年 Intel 80186、Intel 80188 NEC V20 / V30(1983)
8086-2 ISA、組み込み(80186/80188) 2位 Intel80286とクローン
30ビット
24ビット
プロテクトモード、IBM PC / XT 286、IBM PC / AT
3位(IA-32) 1985年 Intel 80386、AMD Am386(1991)
32ビット
46ビット
32ビット
32ビット ISA、ページング、IBM PS / 2
4番目(パイプライン、キャッシュ) 1989年 Intel 80486 Cyrix Cx486S、DLC(1992)AMD Am486(1993)、Am5x86(1995)
パイプライン、オンダイx87 FPU(486DX)、オンダイキャッシュ
5位(スーパースカラー) 1993年 Intel Pentium、Pentium MMX(1996)
スーパースカラー、64ビット データバス、より高速なFPU、MMX(Pentium MMX)、APIC、SMP 1994年 NexGen Nx586 AMD 5k86 / K5(1996)
離散マイクロアーキテクチャ(µ-op変換) 1995年 Cyrix Cx5x86 Cyrix 6×86 / MX(1997)/ MII(1998)
動的実行
6日(PAE、µ-op変換) 1995年 Intel Pentium Pro
36ビット(PAE)
µ-op変換、条件付き移動命令、動的実行、投機的実行、3ウェイx86スーパースカラー、スーパースカラーFPU、PAE、オンチップL2キャッシュ 1997年 Intel Pentium II、Pentium III(1999)Celeron(1998)、Xeon(1998)
オンパッケージ(Pentium II)またはオンダイ(Celeron)L2キャッシュ、SSE(Pentium III)、SLOT 1、Socket370またはSLOT2(Xeon) 1997年 AMD K6 / K6-2(1998)/ K6-III(1999)
32ビット
3DNow!、3レベルキャッシュシステム(K6-III)
強化されたプラットフォーム 1999年 AMD Athlon Athlon XP / MP(2001)Duron(2000)Sempron(2004)
36ビット
MMX +、3DNow!+、ダブルポンプバス、スロットAまたはソケットA 2000年 トランスメタクルーソー
32ビット
CMS搭載のx86プラットフォームプロセッサ、VLIW -128コア、オンダイメモリコントローラ、オンダイPCIブリッジロジック
Intel Pentium 4
36ビット
SSE2、HTT(Northwood)、NetBurst、クアッドポンプバス、トレースキャッシュ、Socket 478 2003年 Intel Pentium M Intel Core(2006)Pentium Dual-Core(2007)
µ-opフュージョン、XDビット(ドーサン)(Intel Core “Yonah”)
トランスメタエフィセオン
CMS 6.0.4、VLIW -256、NXビット、HT IA-64 64ビット移行1999-2005 2001年 Intel Itanium(2001-2017)
52ビット
64ビットEPICアーキテクチャ、128ビットVLIW命令バンドル、オンダイハードウェアIA-32 H / W対応x86 OSおよびx86アプリケーション(初期世代)、ソフトウェアIA-32 EL対応x86アプリケーション(Itanium 2)、Itaniumレジスタファイルx86レジスタに再マップされます x86-64 2001年から64ビット拡張
x86-64はx86の64ビット拡張アーキテクチャであり、そのレガシーモードは変更されていないx86アーキテクチャ全体を保持します。x86-64プロセッサのネイティブアーキテクチャ:64ビットモードに存在し、セグメンテーションにアクセスモードがなく、64ビットアーキテクチャを提供します-線形アドレス空間を許可します。ほとんどのx86アプリケーションをサポートするために、互換モードと64ビットモードに対応するIA-32アーキテクチャが提供されています。 2003年 Athlon 64 / FX / X2(2005)、Opteron Sempron(2004)/ X2(2008)Turion 64(2005)/ X2(2006)
40ビット
AMD64(純粋のx86プロセッサとして提示一部Sempronプロセッサを除く)、オンダイメモリコントローラ、ハイパー、オンダイデュアルコア(X2)、AMD-V (アスロン64オーリンズ)、ソケット754 / 939 / 940又はAM2 2004年 Pentium 4(プレスコット)Celeron D、Pentium D(2005)
36ビット
EM64T(Pentium4およびCeleronDの選択されたモデルで有効)、SSE3、第2世代。NetBurstパイプライン、デュアルコア(オンダイ:Pentium D 8xx、オンチップ:Pentium D 9xx)、Intel VT(Pentium 4 6×2)、ソケットLGA 775 2006年 Intel Core 2 Pentiumデュアルコア(2007)Celeronデュアルコア(2008)
Intel 64(<< == EM64T)、SSSE3(65 nm)、ワイドダイナミック実行、µ-opフュージョン、16ビットおよび32ビットモードでのmacro-opフュージョン、 オンチップクアッド- core(Core 2 Quad)、Smart Shared L2 Cache(Intel Core 2 "Merom") 2007年 AMD Phenom / II(2008)Athlon II(2009)Turion II(2009)
48ビット
モノリシッククアッドコア(X4)/トリプルコア(X3)、SSE4a、Rapid Virtualization Indexing(RVI)、HyperTransport 3、AM2 +またはAM3 2008年 Intel Core 2(45 nm)
40ビットSSE4.1 Intel Atom
ネットブックまたは低電力スマートデバイスプロセッサ、P54Cコアの再利用
Intel Core i7 Core i5(2009)Core i3(2010)
QuickPath、オンチップGMCH(Clarkdale)、SSE4.2、仮想化用の拡張ページテーブル(EPT)、64ビットモードでのマクロ操作の融合、 (Intel Xeon “Bloomfield” with Nehalem microarchitecture) VIA Nano ハードウェアベースの暗号化; 適応型電力管理2010年 AMD FX
48ビット
オクタコア、CMT(クラスター化マルチスレッド)、FMA、OpenCL、AM3 + 2011 AMD APU AおよびEシリーズ(Llano)
40ビット
オンダイGPGPU、PCI Express 2.0、Socket FM1
AMD APU C、E、Zシリーズ(Bobcat)
36ビット
低電力スマートデバイスAPU
Intel Core i3、Core i5、およびCore i7(Sandy Bridge / Ivy Bridge)
内部リング接続、デコードされたµ-opキャッシュ、LGA1155ソケット 2012年 AMD APU Aシリーズ(ブルドーザー、トリニティ以降)
48ビット
AVX、BulldozerベースのAPU、SocketFM2またはSocketFM2 +
Intel Xeon Phi(Knights Corner)
XEONベースのシステム用のPCI-Eアドオンカードコプロセッサー、メニーコアチップ、インオーダーP54C、非常にワイドなVPU(512ビットSSE)、LRBni命令(8×64ビット) 2013年 AMD Jaguar(Athlon、Sempron)
SoC、ゲーム機、低電力スマートデバイスプロセッサ
Intel Silvermont(Atom、Celeron、Pentium)
36ビット
SoC、低/超低電力スマートデバイスプロセッサ
Intel Core i3、Core i5、およびCore i7(Haswell / Broadwell)
39ビット
AVX2、FMA3、TSX、BMI1、およびBMI2命令、LGA1150ソケット 2015年 Intel Broadwell-U(Intel Core i3、Core i5、Core i7、Core M、Pentium、Celeron)
SoC、オンチップBroadwell-U PCH-LP(マルチチップモジュール) 2015-2020 Intel Skylake / Kaby Lake / Cannon Lake / Coffee Lake / Rocket Lake(Intel Pentium / Celeron Gold、Core i3、Core i5、Core i7、Core i9)
46ビット
AVX-512(Cannon Lake-UおよびSkylakeのワークステーション/サーバーバリアントに限定) 2016年 Intel Xeon Phi(Knights Landing)
48ビット
Xeonシステム用のメニーコアCPUおよびコプロセッサー、Airmont(Atom)ベースのコア 2016年 AMDブリストルリッジ(AMD(Pro)A6 / A8 / A10 / A12)
ダイ、SoC、AM4ソケットに統合されたFCH 2017年 AMDRyzenシリーズ/ AMDEpycシリーズ
AMDによるSMTの実装、オンチップマルチダイ 2017年 Zhaoxin WuDaoKou(KX-5000、KH-20000)
Zhaoxinの最初の真新しいx86-64アーキテクチャ 2018-2021 Intel Sunny Cove(Ice Lake-UおよびY)、Cypress Cove(Rocket Lake)
57ビット
コンシューマーセグメント向けのインテルのAVX-512の最初の実装。ベクトルニューラルネットワーク命令(VNNI)の追加 2020 Intel Willow Cove(Tiger Lake-Y / U / H)
デュアルリング相互接続アーキテクチャ、更新されたGaussian Neural Accelerator(GNA2)、新しいAVX-512ベクトル交差命令、制御フロー強制テクノロジ(CET)の追加
時代 リリース CPUモデル 物理アドレス空間 新機能

歴史

他のメーカー
image"
  Am386、1991年にAMDによってリリースされました
以前のIA-32互換プロセッサメーカーのリスト
IBM、NEC、 AMD、TI、STM、Fujitsu、OKI、Siemens、Cyrix、Intersil、C&T、NexGen、UMC、DM&Pなどの企業は、さまざまな時期に x86プロセッサ(CPU)の設計または製造を開始しました。)パーソナルコンピュータおよび組み込みシステムを対象としています。このようなx86の実装はめったに単純なコピーではありませんが、多くの場合、電子レベルと物理レベルで異なる内部マイクロアーキテクチャと異なるソリューションを採用しています。当然のことながら、初期の互換性のあるマイクロプロセッサは16ビットでしたが、32ビットの設計はずっと後に開発されました。以下のためのパーソナルコンピュータ市場、実際の量はで1990年頃現れ始めのi386とi486の多くの場合、Intelのオリジナルのチップに似た名前の互換プロセッサ、。x86またはx87プロセッサを設計または製造した他の企業には、ITT Corporation、National Semiconductor、ULSI System Technology、Weitekなどが
完全にパイプライン化された i486に続いて、Intelは新しいスーパースカラーx86デザインのセットにPentiumブランド名(番号とは異なり、商標登録可能)を導入しました。x86の命名スキームが法的にクリアされたため、他のx86ベンダーは、x86互換製品に異なる名前を選択する必要があり、最初は番号付けスキームのバリエーションを継続することを選択しました。IBMはCyrixと提携して5×86を製造し、その後非常に効率的でした。 Cyrixデザインの6×86(M1)および6×86 MX(MII)ライン。これは、投機的実行を可能にするレジスタリネーミングを実装した最初のx86マイクロプロセッサでした。AMDは、その間に設計され、高度な製造が、遅れて5k86(K5)、内部的に、密接にAMDの以前に基づいていた29K RISCのデザインを。NexGenのNx586と同様に、専用のパイプラインステージがx86命令を均一で扱いやすいマイクロオペレーションにデコードするという戦略を使用しました。これは、今日までほとんどのx86設計の基礎となっている方法です。
これらのマイクロプロセッサのいくつかの初期バージョンには、熱放散の問題がありました。6×86は、いくつかのマイナーな互換性の問題の影響も受けました。Nx586には浮動小数点ユニット(FPU)と(当時は重要な)ピン互換性がありませんでしたが、K5は(最終的に)導入されたときに多少期待外れのパフォーマンスでした。K5はPentiumとの互換性が非常に高く、6×86は整数コードのPentiumよりも大幅に高速であったにもかかわらず、Pentiumシリーズの代替品を顧客が知らなかったため、これらの設計は比較的成功しませんでした。 AMDは後に、K6のプロセッサセットとの真剣な競争相手に成長し、非常に成功したAthlonとOpteronに道を譲りました。Centaur Technology(以前のIDT)、Rise Technology、Transmetaなどの他の候補もありました。VIA Technologies社のエネルギー効率のよいC3とC7によって設計されたプロセッサ、ケンタウルスの会社は、長年にわたり販売されています。Centaurの最新の設計であるVIANanoは、スーパースカラーと投機的実行を備えた最初のプロセッサです。それ以来、インテル初の「インオーダー」プロセッサとほぼ同時に導入されたP5 ペンティアム、インテルAtom。

ワードサイズの拡張
命令セット・アーキテクチャは2倍に拡張されたワードサイズ。1985年、Intelは32ビット80386(後にi386として知られる)をリリースしました。これは、その後数年間でコンピュータの初期の16ビットチップ(通常は組み込みシステムにはありません)に徐々に取って代わりました。この拡張プログラミングモデルは、もともと(最初の実装と同様に)i386アーキテクチャと呼ばれていましたが、Intelは後に(無関係の)IA-64アーキテクチャを導入したときにIA-32と呼んでいました。
1999〜 2003年に、AMDはこの32ビットアーキテクチャを64ビットに拡張し、初期のドキュメントではx86-64と呼び、後にAMD64と呼びました。IntelはすぐにIA-32eという名前でAMDのアーキテクチャ拡張を採用し、後にEM64Tという名前を使用し、最後にIntel64を使用しました。MicrosoftおよびSunMicrosystems / Oracleも「x64」という用語を使用しますが、多くのLinuxディストリビューションおよびBSDも「amd64」を使用します。 “” 学期。たとえば、Microsoft Windowsでは、32ビットバージョンを「x86」、64ビットバージョンを「x64」と指定していますが、64ビットWindowsバージョンのインストールファイルは「AMD64」というディレクトリに配置する必要が

アーキテクチャの基本的なプロパティ
x86アーキテクチャは可変命令長であり、主に下位互換性に重点を置いた「CISC」設計です。ただし、命令セットは一般的なCISCではありませんが、基本的には単純な8ビット8008および8080アーキテクチャの拡張バージョンです。バイトアドレス指定が有効になり、ワードはリトルエンディアンのバイト順序でメモリに格納されます。アラインされていないアドレスへのメモリアクセスは、すべての有効なワードサイズで許可されます。整数演算およびメモリアドレス(またはオフセット)の最大ネイティブサイズは、アーキテクチャの生成に応じて16、32、または64ビットです(新しいプロセッサには、より小さい整数の直接サポートも含まれています)。以下に説明するように、複数のスカラー値は、後の世代に存在するSIMDユニットを介して同時に処理できます。即時アドレス指定オフセットおよび即時データは、-128..127の範囲で十分な、頻繁に発生するケースまたはコンテキストの8ビット量として表すことができます。したがって、一般的な命令の長さは2バイトまたは3バイトです(ただし、はるかに長いものもあれば、シングルバイトのものもあります)。
エンコーディングスペースをさらに節約するために、ほとんどのレジスタは3ビットまたは4ビットを使用するオペコードで表されます。後者は64ビットモードのオペコードプレフィックスを介して表現されますが、命令の最大1つのオペランドをメモリロケーションにすることができます。ただし、このメモリオペランドはデスティネーション(またはソースとデスティネーションの組み合わせ)でもかまいませんが、他のオペランドであるソースはレジスタまたはイミディエートのいずれかです。他の要因の中でも、これは8ビットマシンに匹敵するコードサイズに貢献し、命令キャッシュメモリの効率的な使用を可能にします。比較的少数の汎用レジスタ(これも8ビットの祖先から継承されます)により、レジスタ相対アドレス指定(小さなイミディエートオフセットを使用)が、特にスタック上のオペランドにアクセスする重要な方法になっています。したがって、アクセスされたデータがトップレベルのキャッシュで利用できるほとんどの状況で、レジスタアクセスと同じくらい高速なアクセス、つまり1サイクルの命令スループットを実現するために多くの作業が費やされてきました。

浮動小数点とSIMD
オリジナルの8086用に、80ビットの内部レジスタを備えた専用の浮動小数点プロセッサ8087が開発されました。その後、このマイクロプロセッサは拡張80387に発展し、その後のプロセッサは、メインプロセッサと同じマイクロプロセッサにこの機能の下位互換性のあるバージョンを組み込みました。これに加えて、最新のx86設計にはSIMDユニット(以下のSSEを参照)も含まれており、命令は(1つまたは2つの)128ビットワードで並列に動作でき、それぞれに2つまたは4つの浮動小数点数(それぞれ64または32)が含まれます。それぞれビット幅)、または代わりに、2、4、8、または16の整数(それぞれ64、32、16、または8ビット幅)。
ワイドSIMDレジスタが存在するということは、既存のx86プロセッサが1つの命令で最大128ビットのメモリデータをロードまたは格納でき、完全な128ビット量に対してビット単位の演算(整数演算ではない)を並列に実行できることを意味します。IntelのSandyBridgeプロセッサは、Advanced Vector Extensions(AVX)命令を追加し、SIMDレジスタを256ビットに拡張しました。Knights Corner Xeon Phiプロセッサによって実装されたIntelの初期メニーコア命令、およびKnights Landing Xeon PhiプロセッサとSkylake-Xプロセッサによって実装されたAVX-512命令は、512ビット幅のSIMDレジスタを使用します。

現在の実装
実行中、現在のx86プロセッサは、いくつかの追加のデコード手順を使用して、ほとんどの命令をマイクロオペレーションと呼ばれる小さな部分に分割します。次に、これらはx86セマンティクスに準拠してバッファリングおよびスケジュールする制御ユニットに渡され、いくつかの(多かれ少なかれ特殊な)実行ユニットの1つによって部分的に並行して実行できるようになります。これらの現代のx86のデザインは、このようにしているパイプライン化、スーパースカラを、ともできるためのアウトと投機的実行(を経由して分岐予測、名前の変更登録、及びメモリ依存予測彼らは同時に複数の(部分的または完全な)のx86命令を実行することができることを意味する)、および必ずしも命令ストリームで指定された順序と同じである必要はありません。一部のIntelCPU(Xeon Foster MP、一部のPentium 4、および一部のNehalem以降のIntel Coreプロセッサ)およびAMD CPU(Zen以降)は、コアごとに2つのスレッドで同時にマルチスレッド化することもできます(XeonPhiには芯)。一部のIntelCPUは、トランザクションメモリ(TSX)をサポートしています。
1990年代半ばに導入されたとき、この方法は、一部はマーケティング上の理由から、またこれらのマイクロオペレーションが特定のタイプのRISC命令といくつかのプロパティを共有するため、「RISCコア」または「RISC変換」と呼ばれることもありました。ただし、従来の マイクロコード(1950年代以降に使用)も本質的に同じプロパティの多くを共有しています。新しい方法は主に、マイクロオペレーションへの変換が非同期で行われるという点で異なります。実行ユニットをデコードステップと同期する必要がないため、(バッファリングされた)コードストリームをさらに分析できる可能性がしたがって、並行して実行できる操作を検出し、同時に複数の実行ユニットにフィードすることができます。
最新のプロセッサも、必要に応じて逆のことを行います。特定のx86シーケンス(比較とそれに続く条件付きジャンプなど)を組み合わせて、実行モデルにより適したより複雑なマイクロオペレーションを作成します。これにより、より高速に、またはより少ないマシンリソースで実行できます。
パフォーマンスを向上させるもう1つの方法は、デコードされたマイクロオペレーションをキャッシュすることです。これにより、プロセッサは、デコードされたマイクロオペレーションを再度デコードするのではなく、特別なキャッシュから直接アクセスできます。Intelは、NetBurstマイクロアーキテクチャ(Pentium 4プロセッサの場合)および後でデコードされたストリームバッファ(Sandy Bridge以降のCoreブランドのプロセッサの場合)の実行トレースキャッシュ機能を使用して、このアプローチに従いました。
Transmetaは、Crusoex86互換CPUでまったく異なる方法を使用しました。彼らはジャストインタイム変換を使用して、x86命令をCPUのネイティブVLIW命令セットに変換しました。Transmetaは、CPUが従来のx86実装の複雑なデコード手順を省略できるため、このアプローチにより電力効率の高い設計が可能になると主張しました。

セグメンテーション
x86メモリセグメンテーション
1970年代後半のミニコンピューターは、メモリが安価になったため、16ビットの64KBアドレス制限に達していた。PDP-11のような一部のミニコンピューターは、複雑なバンク切り替えスキームを使用するか、DigitalのVAXの場合、32ビットのアドレス指定とデータを直接処理できるはるかに高価なプロセッサーを再設計しました。オリジナルの8086は、シンプルな8080マイクロプロセッサから開発され、主に非常に小型で安価なコンピュータやその他の特殊なデバイスを対象としており、代わりにメモリアドレス幅をわずか4ビット増加させるシンプルなセグメントレジスタを採用しました。64 KBのアドレスに16を掛けることで、20ビットのアドレスは合計1メガバイト(1,048,576バイト)をアドレス指定できます。これは、当時の小さなコンピューターではかなりの量でした。セグメントレジスタの概念は、セグメントレジスタを使用してさまざまなタスクにすばやくスワップする多くのメインフレームにとって新しいものではありませんでした。実際には、x86では、多くの一般的なプログラミングタスクとコンパイラを非常に複雑にする非常に批判的な実装でした。ただし、アーキテクチャはすぐに線形32ビットアドレス指定(1985年後半の80386から開始)を許可しましたが、主要なアクター(Microsoftなど)は16ビットベースのシステムを変換するのに数年かかりました。したがって、80386(および80486)は、長年にわたって高速(ただし16ビットベース)の8086として主に使用されていました。
データとコードは、合計1MBのアドレス空間の64KB部分内の「近い」16ビットセグメント内で管理できます。または、コンパイラは、1  MBsegment:offsetに達する(のみ)32ビットペアを使用して「遠い」モードで動作できます。それはまた、非常に1980年代半ばによって限定することを証明するだろうが、それは新興PC市場のために働いていた、そしてそれは非常に単純な古いからソフトウェアを翻訳するために作られた8008、8080、8085、およびZ80新しいプロセッサへ。1985年、386設計では、32ビットオフセットレジスタの導入により、16ビットセグメントアドレス指定モデルが効果的に除外されました。
リアルモード、セグメンテーションすることによって達成されるシフト4ビット左セグメントアドレスを、最終的な20ビット・アドレスを受信するためにオフセットを加えます。たとえば、DSがA000hでSIが5677hの場合、DS:SIは絶対アドレスDS×10h + SI = A5677hを指します。したがって、リアルモードでの合計アドレス空間は2 20バイト(1 MB)であり、1978年には非常に印象的な数値です。すべてのメモリアドレスは、セグメントとオフセットの両方で構成されています。すべてのタイプのアクセス(コード、データ、またはスタック)には、デフォルトのセグメントレジスタが関連付けられています(データの場合、レジスタは通常DS、コードの場合はCS、スタックの場合はSSです)。データアクセスの場合、セグメントレジスタを明示的に指定して(セグメントオーバーライドプレフィックスを使用)、4つのセグメントレジスタのいずれかを使用できます。
このスキームでは、2つの異なるセグメント/オフセットペアが単一の絶対位置を指すことができます。したがって、DSがA111hでSIが4567hの場合、DS:SIは上記と同じA5677hを指します。このスキームでは、一度に4つ以上のセグメントを使用することはできません。CSとSSは、プログラムが正しく機能するために不可欠です。そのため、DSとESのみを使用して、プログラムの外部(より正確には、プログラムの現在実行中のセグメント)またはスタックの外部のデータセグメントを指すことができます。
保護モード80286に導入され、セグメントは、もはやセグメントの先頭の物理アドレスが含まれていないが、システム・レベルの構造を指しと呼ばれることを「選択」を含むレジスタセグメント記述子。セグメント記述子には、セグメントの先頭の物理アドレス、セグメントの長さ、およびそのセグメントへのアクセス許可が含まれています。オフセットはセグメントの長さに対してチェックされ、オフセットはセグメント外の場所を参照して例外を引き起こします。セグメント内の場所を参照するオフセットは、セグメントの先頭の物理アドレスと組み合わされて、そのオフセットに対応する物理アドレスを取得します。
セグメント化された性質により、ニアポインタとファーポインタの使用がパフォーマンスに影響を与えるため、プログラミングとコンパイラの設計が困難になる可能性が

アドレッシングモード
16ビットx86プロセッサのアドレッシングモードは、次の式で要約できます。 : : :
E :   (( [] + )。+ I l e e {{ begin {matrix} { mathtt {CS}}:\ { mathtt {DS}}:\ { mathtt {SS}}:\ { mathtt {ES}}: end {行列}} { begin {pmatrix} \ { begin {bmatrix} { mathtt {BX}} \ { mathtt {BP}} end {bmatrix}} + { begin {bmatrix} { mathtt {SI}} \ { mathtt {DI}} end {bmatrix}} \\ end {pmatrix}} + { rm {displacement}}}
{ {begin{matrix}{mathtt {CS}}:\{mathtt {DS}}:\{mathtt {SS}}:\{mathtt {ES}}:end{matrix}}  {begin{pmatrix}\{begin{bmatrix}{mathtt {BX}}\{mathtt {BP}}end{bmatrix}}+{begin{bmatrix}{mathtt {SI}}\{mathtt {DI}}end{bmatrix}}\\end{pmatrix}}+{rm {displacement}}}   32ビットx86プロセッサのアドレッシングモードおよび64ビットx86プロセッサの32ビットコードのアドレッシングモードは、次の式で要約できます。 : : :
E : : :   [ E E E E E E E 私
E 私] +(( [ E E E E E E 私
E 私 ] ∗
[ 12 4 8 ] )。+ I l e e {{ begin {matrix} { mathtt {CS}}:\ { mathtt {DS}}:\ { mathtt {SS}}:\ { mathtt {ES}}:\ { mathtt {FS}}:\ { mathtt {GS}}: end {matrix}} { begin {bmatrix} { mathtt {EAX}} \ { mathtt {EBX}} \ { mathtt {ECX}} \ { mathtt {EDX}} \ { mathtt {ESP}} \ { mathtt {EBP}} \ { mathtt {ESI}} \ { mathtt {EDI} } end {bmatrix}} + { begin {pmatrix} \ { begin {bmatrix} { mathtt {EAX}} \ { mathtt {EBX}} \ { mathtt {ECX}} \ { mathtt {EDX}} \ { mathtt {EBP}} \ { mathtt {ESI}} \ { mathtt {EDI}} end {bmatrix}} * { begin {bmatrix} 1 \ 2 \ 4 \ 8 end {bmatrix}} \\ end {pmatrix}} + { rm {displacement}}}
  64ビットx86プロセッサ上の64ビットコードのアドレッシングモードは、次の式で要約できます。
{{ : :   [ ⋮⋮ ] +(( [ ⋮⋮] ∗
[ 12 4 8 ] )。 I }+ I l e e {{ begin {Bmatrix} \ { begin {matrix} { mathtt {FS}}:\ { mathtt {GS}}: end {matrix}} { begin {bmatrix} vdots \ { mathtt {GPR}} \ vdots end {bmatrix}} + { begin {pmatrix} \ { begin {bmatrix} vdots \ { mathtt {GPR}} \ vdots \ end {bmatrix}} * { begin {bmatrix} 1 \ 2 \ 4 \ 8 end {bmatrix}} \\ end {pmatrix}} \\ hline \ { begin {matrix} { mathtt {RIP}} end {matrix}} \\ end {Bmatrix}} + { rm {displacement}}}
  64ビットコードでの命令相対アドレス指定(RIP +変位、RIPは命令ポインタレジスタ)は、位置に依存しないコードの実装を簡素化します(一部のオペレーティングシステムの共有ライブラリで使用されます)。
8086は持っていた 64 KBの8ビット(または代わりに16ビットの32Kワード)I / Oスペース、およびコンピュータハードウェアでサポートされているメモリ内の64KB(1セグメント)スタック。スタックにプッシュできるのはワード(2バイト)のみです。スタックは数値的に低いアドレスに向かって成長し、SS:SPは最後にプッシュされたアイテムを指します。256の割り込みがあり、ハードウェアとソフトウェアの両方で呼び出すことができます。割り込みは、スタックを使用してリターンアドレスを格納し、カスケードできます。

x86レジスタ

CPUレジスタの一般的な概念の説明については、プロセッサレジスタを参照してください 16ビット
オリジナルのIntel8086および8088には、14個の16ビットレジスタがそれらのうちの4つ(AX、BX、CX、DX)は汎用レジスタ(GPR)ですが、それぞれに追加の目的がある場合がたとえば、ループ命令のカウンタとして使用できるのはCXのみです。それぞれを2つの別々のバイトとしてアクセスできます(したがって、BXの上位バイトはBHとしてアクセスでき、下位バイトはBLとしてアクセスできます)。2つのポインタレジスタには特別な役割がSP(スタックポインタ)はスタックの「最上位」を指し、BP(ベースポインタ)はスタック内の他の場所、通常はローカル変数の上を指すためによく使用されます(フレームポインタを参照)。)。レジスタSI、DI、BX、およびBPはアドレスレジスタであり、配列のインデックス作成にも使用できます。
4つのセグメントレジスタ(CS、DS、SS、およびES)は、メモリアドレスを形成するために使用されます。FLAGSレジスタが含まれているフラグのようなキャリーフラグ、オーバーフローフラグ及びゼロフラグ。最後に、命令ポインタ(IP)は、メモリからフェッチされて実行される次の命令を指します。このレジスタには、プログラムから直接アクセス(読み取りまたは書き込み)することはできません。
インテル80186及び80188は、オンチップ・ペリフェラルを添加して、それぞれ、本質的にアップグレード8086または8088 CPUであり、それらは(周辺機器用インターフェース・レジスタに加えて)8086及び8088と同じCPUレジスタを有しています。
8086、8088、80186、および80188は、オプションの浮動小数点コプロセッサ8087を使用できます。8087は、CPUの一部としてプログラマーに表示され、8つの80ビット幅のレジスタst(0)からst(7)を追加します。各レジスターは、32、64、または7つの形式のいずれかで数値データを保持できます。 80ビット浮動小数点、16ビット、32ビット、または64ビット(バイナリ)整数、および80ビットパック10進整数。 :S-6、S-13..S-15はまた、独自の16ビットのステータスを介してアクセス可能なレジスタ有する
fntsw命令、単にそれをコピーして分岐するため、そのビットの一部を使用することが一般的であるに通常のフラグ。
インテル80286、サポートする保護モードを、3つの特殊レジスタは、ディスクリプタテーブルアドレス(GDTR、LDTR、ホールドIDTR)、及び第四のタスクレジスタ(TR)は、タスク切り替えのために使用されます。80287は、 80286用の浮動小数点コプロセッサであり、同じデータ形式と8087と同じレジスタを有しています。

32ビット
image
  x86-64命令セットで使用可能なレジスタ
32ビット80386プロセッサの出現により、16ビットの汎用レジスタ、ベースレジスタ、インデックスレジスタ、命令ポインタ、およびFLAGSレジスタが32ビットに拡張されましたが、セグメントレジスタは拡張され命名法は、x86アセンブリ言語のレジスタ名の前に「E」(「拡張」を表す)を付けることでこれを表しています。したがって、AXレジスタは新しい32ビットEAXレジスタの下位16ビットに対応し、SIはESIの下位16ビットに対応します。汎用レジスタ、ベースレジスタ、インデックスレジスタはすべてアドレッシングモードのベースとして使用でき、スタックポインタを除くすべてのレジスタをアドレッシングモードのインデックスとして使用できます。
2つの新しいセグメントレジスタ(FSとGS)が追加されました。レジスタ、命令、およびオペランドの数が増えると、マシンコード形式が拡張されました。下位互換性を提供するために、実行可能コードを含むセグメントは、16ビットまたは32ビットの命令を含むものとしてマークできます。特別なプレフィックスを使用すると、32ビット命令を16ビットセグメントに含めることができます。その逆も可能です。
80386には、オプションの浮動小数点コプロセッサ80387がありました。8087や80287のように、st(0)からst(7)、の8つの80ビット幅のレジスタがありました。80386は80287コプロセッサを使用することもできます。と80486と後続のすべてのx86モデルは、浮動小数点演算ユニット(FPU)は、オンチップで集積されます。
ペンティアムMMXは、レジスタ(MMX7にMMX0、80ビット幅のFPUスタックと共有下位ビット)の整数8の64ビットMMXを加えました。とのPentium III、Intelは32ビットの添加ストリーミングSIMD拡張命令(SSE)コントロール/ステータスレジスタ(MXCSR)と8つの128ビットSSE浮動小数点レジスタ(XMM7にXMM0を)。

64ビット x86-64 始まるAMDのOpteronプロセッサ、x86アーキテクチャは、16個の32ビットの拡張が行われた方法と同様に、64ビットのレジスタに32ビットレジスタを拡張しました。Rの( “”登録”の場合)-prefixは、64ビット・レジスタ(RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、RFLAGS、RIP)、8つの追加の64ビット汎用レジスタ(R8-R15を識別する)は、x86-64の作成でも導入されました。ただし、これらの拡張機能は、ロングモードでのみ使用可能な2つのモードの1つである64ビットモードでのみ使用できます。アドレッシングモードが32ビットモードから劇的に変更されたことはありませんが、アドレッシングが64ビットに拡張され、仮想アドレスが64ビットに符号拡張され(仮想アドレスのモードビットを禁止するため)、その他のセレクターの詳細が劇的に削減されました。 。さらに、一部のオペレーティングシステムの共有ライブラリで使用される位置に依存しないコードの実装を容易にするために、RIP(命令ポインタ)に関連するメモリ参照を可能にするアドレッシングモードが追加されました。

128ビット
参照:
ストリーミングSIMD拡張命令§レジスタ
SIMDレジスタXMM0〜XMM15。

256ビット
参照:
高度なベクトル拡張§新機能
SIMDレジスタYMM0〜YMM15。

512ビット
参照:
高度なベクトル拡張§AVX-512
SIMDレジスタZMM0〜ZMM31。

その他/特別な目的
プロテクトモードを持つx86プロセッサ、つまり80286以降のプロセッサには、3つの記述子レジスタ(GDTR、LDTR、IDTR)とタスクレジスタ(TR)も
32ビットx86プロセッサ(80386以降)には、制御レジスタ(CR0〜4、64ビットのみのCR8 )、デバッグレジスタ(DR0〜3、プラス6および7)、テストレジスタなどのさまざまな特殊/その他のレジスタも含まれています。(TR3から7、80486のみ)、およびモデル固有のレジスタ(MSR、Pentium で表示)。
AVX-512には、ZMM内の要素を選択するための8つの追加の64ビットマスクレジスタが

目的
メインレジスタ(命令ポインタを除く)は、32ビットバージョンと64ビットバージョンの命令セットでは「汎用」であり、あらゆる用途に使用できますが、当初は、次の目的:
AL / AH / AX / EAX / RAX:アキュムレータ
BL / BH / BX / EBX / RBX:ベースインデックス(アレイで使用)
CL / CH / CX / ECX / RCX:カウンター(ループおよびストリングで使用)
DL / DH / DX / EDX / RDX:アキュムレータの精度を拡張します(たとえば、32ビットコードで64ビット整数演算を行うために32ビットEAXとEDXを組み合わせます)
SI / ESI / RSI:ソースインデックスのための文字列操作。
DI / EDI / RDI:文字列操作の宛先インデックス。
SP / ESP / RSP:スタックのトップアドレスへのスタックポインタ。
BP / EBP / RBP:現在のスタックフレームのアドレスを保持するためのスタックベースポインタ。
IP / EIP / RIP:命令ポインタ。次の命令のアドレスであるプログラムカウンタを保持します。
セグメントレジスタ:
CS:コード
DS:データ
SS:スタック
ES:追加データ
FS:追加データ#2
GS:追加データ#3
64ビットモードでのみ使用可能な他の8つのレジスタについては、特別な目的は想定されていませんでした。
一部の命令は、設計された目的でこれらのレジスタを使用すると、より効率的にコンパイルおよび実行されます。たとえば、ALをアキュムレータとして使用し、それにイミディエートバイト値を追加すると 、04hのALオペコードへの効率的な追加が生成されます。一方、BLレジスタを使用すると、80C3hの汎用のより長いレジスタオペコードへの追加が生成されます。もう1つの例は、特にAXレジスタとDXレジスタで機能する倍精度の除算と乗算です。
最近のコンパイラーは、レジスターを均一に(ミニコンピューターのように)処理できるようにするsibバイト(scale-index-baseバイト)の導入の恩恵を受けました。ただし、sibバイトを普遍的に使用することは、必要なときに選択的に使用するよりも長いエンコーディングを生成するため、最適ではありません。(sibバイトの主な利点は、直交性とそれが提供するより強力なアドレッシングモードです。これにより、命令を保存したり、インデックスのスケーリングなどのアドレス計算にレジスタを使用したりできます。)一部の特別な命令はハードウェア設計で優先順位を失いました。同等の小さなコードシーケンスよりも遅くなりました。注目すべき例はLODSW命令です。

構造
汎用レジスタ(A、B、C、およびD)
64 56 48 40 32 24 16 8
処方箋元 ?NS
?NS ?L
64ビットモードのみの汎用レジスタ(R8、R9、R10、R11、R12、R13、R14、R15)
64 56 48 40 32 24 16 8? ?NS ?W ?NS
セグメントレジスタ(C、D、S、E、F、G)6 8 ?NS
ポインタレジスタ(SおよびB)
64 56 48 40 32 24 16 8R?P E?P ?NS ?PL
注:?PLレジスタは、64ビットモードでのみ使用できます。
インデックスレジスタ(SおよびD)
64 56 48 40 32 24 16 8R?I E?I
?私 ?IL 注:?ILレジスタは64ビットモードでのみ使用できます。
命令ポインタレジスタ(I)
64 56 48 40 32 24 16 8RIP EIP
IP

動作モード

リアルモード
リアルモード
リアルアドレスモードは、一般にリアルモードと呼ばれ、8086以降のx86互換CPUの動作モードです。リアルモードは、20ビットのセグメント化されたメモリアドレス空間(1 MiBをわずかに超えるメモリしかアドレス指定できないことを意味します)、周辺ハードウェアへの直接ソフトウェアアクセス、およびハードウェアでのメモリ保護やマルチタスクの概念がないことを特徴としています。レベル。80286シリーズ以降のすべてのx86CPUは、電源投入時にリアルモードで起動します。80186 CPU以前には、動作モードが1つしかありませんでした。これは、後のチップのリアルモードと同等です。(IBM PCプラットフォームでは、BIOSはリアルモード用に作成されているため、IBM BIOSルーチンへの直接ソフトウェアアクセスはリアルモードでのみ使用できます。ただし、これはx86 CPUのプロパティではなく、IBM BIOS設計のプロパティです。)
64 KBを超えるメモリを使用するには、セグメントレジスタを使用する必要がこれは、「near」、「far」、「huge」などの奇妙なポインタモードを導入して、セグメント化されたアーキテクチャの暗黙的な性質をさまざまな程度に活用するコンパイラ実装者にとって大きな問題を引き起こしました。一部のポインタには、暗黙のセグメント内に16ビットオフセットが含まれています。セグメントアドレスとセグメント内のオフセットを含むポインタ。4つのセグメントレジスタすべてを一度に設定し、16ビットオフセット(オプションでデフォルトセグメントオーバーライドプレフィックス付き)のみを使用することにより、コードとデータに最大256 KBのメモリを使用し、コードに最大64KBを使用することが技術的に可能です。アドレスメモリですが、これにより、データのアドレス指定方法とメモリオペランドの組み合わせ方法にかなりの制限が課せられ、個別のデータ項目(配列、構造、コードユニットなど)を次のようにするというIntel設計者のアーキテクチャ上の意図に違反します。 16ビットアドレススペースを備えた以前の8ビットプロセッサから移植されていない新しいプログラムでは、個別のセグメントに含まれ、独自のセグメントアドレスでアドレス指定されます。

非現実モード
非現実的なモード
非現実モードは、一部の16ビットオペレーティングシステムと一部の32ビットブートローダーで使用されます。

システム管理モード
参照:
システム管理モード
システム管理モード(SMM)は、システムファームウェア(BIOS / UEFI)でのみ使用され、オペレーティングシステムやアプリケーションソフトウェアでは使用されません。SMMコードはSMRAMで実行されています。

保護モード
プロテクトモード
リアルモードに加えて、Intel 80286はプロテクトモードをサポートし、アドレス指定可能な物理メモリを16 MBに、アドレス指定可能な仮想メモリを1  GBに拡張し、プログラムが相互に破損するのを防ぐプロテクトメモリを提供します。これは、メモリに格納されている記述子テーブルにインデックスを格納するためにのみセグメントレジスタを使用することによって行われます。このようなテーブルは、グローバルディスクリプタテーブル(GDT)とローカルディスクリプタテーブル(LDT)の2つで、それぞれ最大8192のセグメント記述子を保持し、各セグメントは64KBのメモリにアクセスできます。80286では、セグメント記述子が24ビットのベースアドレスを提供し、このベースアドレスが16ビットのオフセットに追加されて絶対アドレスが作成されます。テーブルのベースアドレスは、セグメントレジスタのリテラル値がリアルモードで果たすのと同じ役割を果たします。セグメントレジスタは直接レジスタから間接レジスタに変換されています。各セグメントには、ハードウェアベースのコンピュータセキュリティに使用される4つのリングレベルのいずれかを割り当てることができます。各セグメント記述子には、セグメントで使用できる最大オフセットを指定するセグメント制限フィールドも含まれています。オフセットは16ビットであるため、80286保護モードではセグメントはそれぞれ64KBに制限されます。
セグメントレジスタがプロテクトモードでロードされるたびに、80286は6バイトのセグメント記述子をメモリから隠し内部レジスタのセットに読み込む必要がしたがって、セグメントレジスタのロードは、リアルモードよりもプロテクトモードの方がはるかに遅く、セグメントを頻繁に変更することは避けて80286以降には、命令の実行と並行してセグメント制限に対してオフセットをチェックするハードウェアがあるため、プロテクトモードセグメントを使用した実際のメモリ操作はそれほど遅くなりません。
インテル80386 32ビットに各セグメント記述子の拡張オフセットと、セグメントの制限フィールド、全メモリ空間にまたがるセグメントを可能にします。また、ページングの保護モードでのサポートも導入されました。これは、ページングされた仮想メモリ(4 KBのページサイズ)を使用できるようにするメカニズムです。ページングにより、CPUは仮想メモリ空​​間の任意のページを物理メモリ空間の任意のページにマップできます。これを行うために、ページテーブルと呼ばれるメモリ内の追加のマッピングテーブルを使用します。80386の保護モードは、ページングを有効または無効にして動作できます。セグメンテーションメカニズムは常にアクティブであり、仮想アドレスを生成します。仮想アドレスは、有効になっている場合はページングメカニズムによってマップされます。セグメンテーションメカニズムは、すべてのセグメントを0のベースアドレスとアドレス空間全体に等しいサイズ制限を持つように設定することによって効果的に無効にすることもできます。これには、4つの記述子のみの最小サイズのセグメント記述子テーブルも必要です(FSおよびGSセグメントを使用する必要がないため)。
ページングは​​、最新のマルチタスクオペレーティングシステムで広く使用されています。Linux、386BSD、およびWindows NTは、ページングと32ビットセグメントオフセットをサポートする最初のIntelアーキテクチャCPUであるため、386用に開発されました。386アーキテクチャは、x86シリーズの今後のすべての開発の基礎となりました。
プロテクトモードをサポートするx86プロセッサは、古い8086クラスのプロセッサとの下位互換性のためにリアルモードで起動します。電源投入時(別名ブート)、プロセッサはリアルモードで初期化され、命令の実行を開始します。ROMに保存されている可能性のあるオペレーティングシステムのブートコードにより、プロセッサが保護モードになり、ページングやその他の機能が有効になる場合がプロテクトモードで設定された命令は、リアルモードで使用されたものと同様です。ただし、リアルモードに適用される特定の制約(のアドレス指定でax、cx、dxを使用できないなど)は、プロテクトモードでは適用されません。逆に、リアルモードコードで一般的に行われているセグメント演算は、プロテクトモードでは許可され

仮想8086モード
仮想8086モード
仮想8086モードと呼ばれる32ビット保護モード(別名80386保護モード)の動作のサブモードもこれはV86モードとも呼ばれます。これは基本的に、プロテクトモードスーパーバイザオペレーティングシステムの制御下でリアルモードプログラムとオペレーティングシステムを実行できるようにする特別なハイブリッドオペレーティングモードです。これにより、プロテクトモードプログラムとリアルモードプログラムの両方を同時に実行する際の柔軟性が大幅に向上します。このモードは、32ビットバージョンのプロテクトモードでのみ使用できます。16ビットバージョンのプロテクトモードまたはロングモードには存在しません。

ロングモード
ロングモード
1990年代半ば、x86アーキテクチャの32ビットアドレス空間が、大規模なデータセットを必要とするアプリケーションでのパフォーマンスを制限していたことは明らかでした。32ビットのアドレス空間では、プロセッサは4 GBのデータのみを直接アドレス指定できます。これは、ビデオ処理やデータベースエンジンなどのアプリケーションが超えるサイズです。ほとんどの64ビットアーキテクチャは完全な64ビットアドレス空間へのアクセスをサポートしていませんが、64ビットアドレスを使用すると、16EiBのデータを直接アドレス指定することができ ます。たとえば、AMD64は64ビットアドレスから48ビットのみをサポートし、4つのページングレベルに分割されます。
1999年に、AMDはx86アーキテクチャの64ビット拡張の(ほぼ)完全な仕様を公開しました。これは、作成する意図があると主張してx86-64と呼ばれていました。この設計は現在、組み込みシステムを対象としたいくつかの例外を除いて、ほぼすべてのx86プロセッサで使用されています。
一般市場向けに大量生産されたx86-64チップは、4年後の2003年に、テストと改良のためのプロトタイプの作業に時間を費やした後、利用可能になりました。ほぼ同時に、初期名x86-64がAMD64に変更されました。AMD64プロセッサラインの成功とIA-64アーキテクチャの生ぬるい受信により、IntelはAMD64命令セットの独自の実装をリリースすることを余儀なくされました。Intelは以前にAMD64のサポートを実装していましたが、Itaniumの新しいIA-64命令セットが広く採用される前にAMDがAMD64を市場に投入しないことを期待して、サポートを有効にしないことを選択しました。それはようAMD64の実装をブランドEM64T、およびそれを後で改名インテル64。
MicrosoftとSunは、その文献と製品バージョン名で、WindowsおよびSolarisオペレーティングシステムではAMD64 / Intel64をまとめてx64と呼んでいます。Linuxディストリビューションでは、これを「x86-64」、そのバリアント「x86_64」、または「amd64」のいずれかと呼んでいます。BSDシステムは「amd64」を使用しますが、macOSは「x86_64」を使用します。
ロングモードは主に32ビット命令セットの拡張ですが、16ビットから32ビットへの移行とは異なり、64ビットモードでは多くの命令が削除されました。これは、実際のバイナリの下位互換性(これらの命令のサポートを保持する他のモードでレガシーコードを実行する)には影響しませんが、新しいコードのアセンブラーとコンパイラーの動作方法を変更します。
x86アーキテクチャの主要な拡張が開始され、Intel以外のメーカーによって開始されたのはこれが初めてでした。インテルがこの種のテクノロジーを外部から受け入れたのも初めてでした。

拡張機能

浮動小数点ユニット x87 浮動小数点ユニット
初期のx86プロセッサを用いて拡張することができる浮動小数点浮動小数点の一連の形でハードウェア数値 コプロセッサのような名前を持つ8087、80287と80387、略称のx87。これは、NPX(Numeric Processor eXtension)とも呼ばれます。コプロセッサーは主に浮動小数点計算に使用されますが、2進形式と10進形式の両方で整数演算を実行するため、適切な名前です。ごくわずかな例外を除いて、80486以降のx86プロセッサは、このx87機能をチップに統合し、x87命令をx86命令セットの事実上の不可欠な部分にしました。
ST(0)からST(7)として知られる各x87レジスタは、80ビット幅であり、IEEE浮動小数点標準の二重拡張精度フォーマットで数値を格納します。これらのレジスタは、ST(0)を最上位とするスタックとして編成されています。これは、オペコードスペースを節約するために行われたため、レジスタ間命令のいずれかのオペランドに対してのみ、レジスタにランダムにアクセスできます。ST0は、他のオペランドがST(x)であるかメモリオペランドであるかに関係なく、常にソースまたはデスティネーションの2つのオペランドのいずれかである必要がただし、スタックレジスタへのランダムアクセスは、指定されたST(x)をST(0)と交換する命令を介して取得できます。
操作には、三角関数や指数関数などの算術関数や超越関数、および常用対数(0、1、e、自然対数の基数、log2(10)、log10(2)など)を次のいずれかにロードする命令が含まれます。スタックレジスタ。整数機能は見過ごされがちですが、x87は、8086、80286、80386、または64ビット拡張機能のないx86 CPUよりも大きな整数を単一の命令で操作でき、小さな値(たとえば、 16ビット)は、x86CPUとx87で整数命令を並列に実行することで高速化できます。(x86 CPUは、x87コプロセッサーが計算している間も実行を続け、x87は、終了時にx86に信号を設定するか、エラーのために注意が必要な場合はx86に割り込みます。)

MMX
MMX(命令セット)
MMXは、Intelによって設計され、1997年にPentiumMMXマイクロプロセッサ用に導入されたSIMD命令セットです。MMX命令セットは、Inteli860で最初に使用された同様の概念から開発されました。これは、Intelおよび他のベンダーによって後続のほとんどのIA-32プロセッサでサポートされています。MMXは通常、ビデオ処理に使用されます(たとえば、マルチメディアアプリケーションで)。
MMXは、MM0からMM7(以降、MMnと呼びます)と呼ばれる8つの新しいレジスタをアーキテクチャに追加しました。実際には、これらの新しいレジスタは、既存のx87FPUスタックレジスタの単なるエイリアスでした。したがって、浮動小数点スタックに対して行われたことはすべて、MMXレジスタにも影響します。FPスタックとは異なり、これらのMMnレジスタは相対ではなく固定されているため、ランダムにアクセスできました。命令セットはスタックのようなセマンティクスを採用していなかったため、既存のオペレーティングシステムは、変更なしでマルチタスクを実行するときに、レジスタの状態を正しく保存および復元できました。
各MMnレジスタは64ビット整数です。ただし、MMX命令セットの主な概念の1つは、パックされたデータ型の概念です。つまり、レジスタ全体を単一の64ビット整数(クアッドワード)に使用する代わりに、2つの32ビット整数を含めるために使用できます。 (ダブルワード)、4つの16ビット整数(ワード)または8つの8ビット整数(バイト)。MMXの64ビットMMnレジスタがFPUスタックにエイリアスされ、各浮動小数点レジスタが80ビット幅であるとすると、浮動小数点レジスタの上位16ビットはMMXでは使用されません。これらのビットは、NaNまたは無限大の浮動小数点表現に対応するMMX命令によってすべて1に設定されます。

3DNow! 3DNow! 1997年、AMDは3DNow!を発表しました。このテクノロジーの導入は、3Dエンターテインメントアプリケーションの台頭と同時に行われ、グラフィックを多用するアプリケーションのCPUのベクトル処理パフォーマンスを向上させるように設計されました。3Dビデオゲーム開発者と3Dグラフィックハードウェアベンダーは3DNow!を使用しています。AMDのK6およびAthlonシリーズのプロセッサでのパフォーマンスを向上させるため。
3DNow!整数から浮動小数点へのMMXの自然な進化であるように設計されました。そのため、MMXとまったく同じレジスタ命名規則(MM0からMM7)を使用します。唯一の違いは、これらのレジスタに整数をパックする代わりに、2つの単精度浮動小数点数が各レジスタにパックされることです。FPUレジスタのエイリアスの利点は、FPUレジスタの状態を保存するために使用されるのと同じ命令およびデータ構造を使用して3DNow!を保存できることです。状態を登録します。したがって、オペレーティングシステムについて特別な変更を加える必要はありません。

SSEおよびAVX
ストリーミングSIMD拡張命令、SE2、 SE3、 SSE3、
SSE4、および SSE5 1999年、IntelはストリーミングSIMD拡張命令(SSE)命令セットを導入し、2000年にはSSE2を導入しました。最初の追加により、x87スタックからの基本的な浮動小数点演算のオフロードが可能になり、2番目の追加によりMMXはほとんど時代遅れになり、従来のコンパイラーが命令を現実的にターゲットにすることができました。2004年にPentium4プロセッサのPrescottリビジョンとともに導入された、SSE3は、Intelのハイパースレッディングテクノロジーのパフォーマンスを向上させるために、特定のメモリおよびスレッド処理命令を追加しました。AMDはSSE3命令セットのライセンスを取得し、リビジョンE以降のAthlon64プロセッサ用にほとんどのSSE3命令を実装しました。Athlon 64はハイパースレッディングをサポートしておらず、ハイパースレッディングにのみ使用されるSSE3命令がありません。
SSEは、FPUスタックへのすべてのレガシー接続を破棄しました。これは、この命令セットがMMXなどの前世代のSIMD命令セットへのすべてのレガシー接続を破棄したことも意味します。しかし、それは設計者を解放し、FPUレジスタのサイズに制限されることなく、より大きなレジスタを使用できるようにしました。設計者は、XMM0からXMM7という名前の8つの128ビットレジスタを作成しました。(注:AMD64では、SSE XMMレジスタの数が8から16に増えました。)ただし、欠点は、オペレーティングシステムがレジスタの状態を保存できるようにするために、この新しい命令セットを認識している必要があることでした。 。そのため、Intelは、SSE命令の使用を可能にする拡張モードと呼ばれる、わずかに変更されたバージョンの保護モードを作成しましたが、通常の保護モードでは無効のままです。SSEを認識しているOSは拡張モードをアクティブにしますが、認識していないOSは従来の保護モードにのみ入ります。
SSEは、3DNow!のような浮動小数点値でのみ機能するSIMD命令セットです。ただし、3DNow!とは異なります。FPUスタックへのすべてのレガシー接続を切断します。3DNow!よりも大きなレジスタがあるため、SSEは2倍の数の単精度浮動小数点数をレジスタにパックできます。元のSSEは、3DNow!のような単精度の数値のみに制限されていました。SSE2は、倍精度の数値をパックする機能も導入しました。これは3DNow!倍精度の数値は64​​ビットのサイズであるため、実行する可能性はありませんでした。これは、単一の3DNowのフルサイズになります。MMnレジスタ。128ビットでは、SSEXMMnレジスタは2つの倍精度浮動小数点数を1つのレジスタにパックできます。したがって、SSE2は、単精度のみに制限されていたSSE1または3DNow!よりも科学計算にはるかに適しています。SSE3は追加のレジスタを導入しません。
Advanced VectorExtensionsと AVX-512 Advanced Vector Extensions(AVX)は、SSEレジスタのサイズを2倍の256ビットYMMレジスタにしました。また、より大きなレジスタに対応するためのVEXコーディングスキームと、要素を並べ替えるためのいくつかの命令も導入しました。AVX2は追加のレジスタを導入しませんでしたが、マスキング、収集、およびシャッフル命令の追加で注目に値しました。
AVX-512は、32個の512ビットZMMレジスタへのさらに別の拡張と新しいEVEXスキームを備えています。モノリシック拡張機能を備えたその前身とは異なり、CPUの特定のモデルが実装することを選択できる多くのサブセットに分割されています。

物理アドレス拡張(PAE)
物理アドレス拡張
物理アドレス拡張またはPAEは、Intel Pentium Proで最初に追加され、その後、AMDによってAthlonプロセッサで追加され、最大64GBのRAMをアドレス指定できるようになりました。PAEがない場合、32ビットプロテクトモードの物理RAMは通常4GBに制限されます 。PAEは、より広いページテーブルエントリと第3レベルのページテーブルを備えた異なるページテーブル構造を定義し、物理アドレスの追加ビットを許可します。32ビットプロセッサでの最初の実装は理論的には最大64GBのRAMをサポートしていましたが、チップセットやその他のプラットフォームの制限により、実際に使用できるものが制限されることがよくありました。x86-64プロセッサは、理論的には最大52ビットの物理アドレスを許可するページテーブル構造を定義しますが、チップセットやその他のプラットフォームの問題(使用可能なDIMMスロットの数、DIMMごとに可能な最大RAMなど)により、このような大きな物理アドレスは防止されます。実現するスペース。x86-64プロセッサでは、PAEモードはロングモードに切り替える前にアクティブである必要があり、ロングモードがアクティブな間はアクティブのままである必要があるため、ロングモードでは「非PAE」モードはありません。PAEモードは、線形アドレスまたは仮想アドレスの幅には影響しません。

x86-64 x86-64 image
  で スーパーコンピュータの
クラスタ(によって追跡されるよう
TOP 500 2013最後に更新され、データ及び上記図上で可視化)、x86アーキテクチャの64ビット拡張の外観は、AMDおよびIntel(TEALハッチングおよび青斜線によって64ビットx86プロセッサを有効Intelが最初に失敗したにもかかわらず、そのようなシステムで以前に使用されたほとんどのRISCプロセッサアーキテクチャ(PA-RISC、 SPARC、 Alphaなどを含む)および32ビットx86(図の緑色)を置き換えるために、それぞれ図に示され
ています。Itaniumプロセッサでx86を互換性のない新しい64ビットアーキテクチャに置き換え
ます。まだクラスタをスーパーコンピュータに、2014年のように、使用されるメイン非x86アーキテクチャである
パワーISAがで使用される
IBM POWERマイクロプロセッサ遠い第二のようSPARCと、(図中のダイヤモンドタイル青)。
2000年代までに、32ビットx86プロセッサのメモリアドレス指定の制限は、高性能コンピューティングクラスタや強力なデスクトップワークステーションでの使用の障害になりました。古くなった32ビットx86は、はるかに多くのメモリに対応できる、はるかに高度な64ビットRISCアーキテクチャと競合していました。ワークステーションおよびデスクトップソフトウェアアプリケーションが間もなく32ビットメモリアドレス指定の制限に達し始めたため、x86が64ビットコンピューティングの時代を生き残るためには、Intelおよびx86エコシステム全体で64ビットメモリアドレス指定が必要でした。しかし、Intelは、大胆な一歩を踏み出し、64ビットデスクトップコンピューターへの移行を使用して、一般的なx86アーキテクチャからの移行を行うのが適切な時期であると感じました。この実験は、最終的に失敗しました。
2001年、インテルは名前の非x86の64ビットアーキテクチャを導入しようとしたIA-64の中でのItanium初めを目指し、プロセッサを、高性能コンピューティング、それは最終的に32ビットx86に取って代わるだろうと期待して、市場。 IA-64はx86と互換性がありませんでしたが、Itaniumプロセッサはx86命令をIA-64に変換するためのエミュレーション機能を提供しましたが、これはx86プログラムのパフォーマンスに非常に大きな影響を与えたため、実際に役立つことはほとんどありませんでした。ユーザー:プログラマーは、IA-64アーキテクチャー用にx86プログラムを書き直す必要がそうしないと、Itaniumでのパフォーマンスが実際のx86プロセッサーよりも桁違いに悪くなります。市場は、下位互換性を壊し、x86チップの使用を継続することを好んだため、Itaniumプロセッサを拒否し、IA-64用に書き直されたプログラムはほとんどありませんでした。
AMDは、下位互換性が損なわれないように、64ビットメモリアドレス指定に向けて別の道を進むことを決定しました。2003年4月、AMDは、64ビットの汎用レジスタを備えた最初のx86プロセッサであるOpteronをリリースしました。これは、新しいx86-64拡張機能(AMD64またはx64とも呼ばれます)を使用して4GBをはるかに超える仮想メモリをアドレス指定でき ます。x86アーキテクチャの64ビット拡張は、新しく導入されたロングモードでのみ有効になりました。したがって、32ビットおよび16ビットのアプリケーションとオペレーティングシステムは、わずかな犠牲を払うことなく、保護モードまたはその他のモードでAMD64プロセッサを使用し続けることができます。パフォーマンスであり、16ビットIntel 8086の元の命令と完全に互換性が–14市場は前向きに反応し、高性能アプリケーションとビジネスまたは家庭の両方に64ビットAMDプロセッサを採用しました。コンピューター。
市場が互換性のないItaniumプロセッサとAMD64をサポートするMicrosoftを拒否しているのを見て、Intelは対応し、2004年7月に独自のx86-64プロセッサであるPrescott Pentium 4を導入する必要がありました。その結果、IA-64を備えたItaniumプロセッサ命令セットが使用されることはめったになく、x86は、そのx86-64の化身を通じて、非組み込みコンピューターの主要なCPUアーキテクチャーです。
x86-64は、バッファオーバーランによって引き起こされるセキュリティバグに対する保護を提供するNXビットも導入しました。
AMDのx86系統への64ビットの貢献とその後のIntelによる受け入れの結果、64ビットRISCアーキテクチャはx86エコシステムへの脅威ではなくなり、ワークステーション市場からほとんど姿を消しました。x86-64は、以前は64ビットRISC設計(IBM POWERマイクロプロセッサやSPARCプロセッサなど)の自然生息地であった市場である強力なスーパーコンピュータ(AMDOpteronおよびIntelXeonの化身)で利用され始めました。64ビットコンピューティングへの大きな飛躍と32ビットおよび16ビットソフトウェアとの後方互換性の維持により、x86アーキテクチャは今日、非常に柔軟なプラットフォームになり、x86チップは小さな低電力システムから利用されています(たとえば、インテルクォークとインテルAtom速いゲームのデスクトップコンピュータ(例えば、へ)インテルCore i7プロセッサーとAMD FX / Ryzen)、さらには支配大型スーパーコンピューティングクラスタ、効果的にのみ残しARMでのライバルとして32ビットおよび64ビットRISCアーキテクチャをスマートフォンやタブレット市場。

仮想化
x86仮想化
2005年以前は、x86アーキテクチャプロセッサは、ポペックとゴールドバーグの要件を満たすことができませんでした。これは、1974年にジェラルドJ.ポペックとロバートP.ゴールドバーグによって作成された仮想化の仕様です。ただし、プロプライエタリとオープンソースの両方のx86仮想化ハイパーバイザー製品は、ソフトウェアベースの仮想化を使用して開発されました。独自のシステムには、Hyper-V、Parallels Workstation、VMware ESX、VMware Workstation、VMware Workstation Player、Windows Virtual PCが含まれ、無料のオープンソースシステムには、QEMU、カーネルベースの仮想マシン、VirtualBox、Xenが含まれます。
2005年にAMD-VおよびIntelVT-x命令セットが導入されたことにより、x86プロセッサはPopekおよびGoldbergの仮想化要件を満たすことができました。

AES
AES命令セット

も参照してください
x86命令リストPUID tanium 86-64
680×0、16ビットおよび初期の32ビット時代の競合アーキテクチャ
PowerPC、後の32ビットおよび64ビット時代の競合アーキテクチャ
マイクロアーキテクチャ
AMDマイクロプロセッサのリスト
Intelマイクロプロセッサのリスト
IntelCPUマイクロアーキテクチャのリスト
VIAマイクロプロセッサのリスト
x86メーカーのリスト
入出力ベースアドレス
割り込み要求 iAPX ティックタックモデル

ノート
^ 特定のマイクロプロセッサ設計に使用されるマイクロアーキテクチャ(および特定の電子的および物理的実装)とは異なります。
^ Intelは、1993年にP5 Pentiumでの「x86」命名スキームを放棄しました(番号は商標登録できなかったため)。ただし、x86という用語は、技術者、コンパイラ作成者などの間ですでに確立されています。
^ GRIDコンパスノートパソコンを、例えば。
^ 含め8088、 80186、 80188および80286プロセッサ。
^ このようなシステムには、マルチプレクサ、バッファ、グルーロジックなどの標準的な7400シリーズサポートコンポーネントの通常の組み合わせも含まれていました。
^ の実際の意味iAPXはしたインテル・アドバンスト・パフォーマンス・アーキテクチャ、または時々インテルアドバンスド・プロセッサ・アーキテクチャ。
^ 1981年後半から1984年初頭、およそ
^ 組み込みプロセッサ市場には、25を超えるさまざまなアーキテクチャが存在します。これらのアーキテクチャは、価格に敏感で、低電力で、ハードウェアの単純さの要件により、x86を上回っています。
^ NEC V20およびV30は、古い8080命令セットも提供し、これらのマイクロプロセッサを搭載したPCがCP / Mアプリケーションをフルスピードで操作できるようにしました(つまり、ソフトウェアで8​​080をシミュレートする必要はありません)。
^ ファブレス企業はチップを設計し、それを製造するために別の企業と契約しましたが、ファブレス企業は設計と製造の両方を自分たちで行います。一部の企業はファブレスメーカーとして始まり、後にファブレスデザイナーになりました。そのような例の1つがAMDです。
^ ただし、FPUは低速でしたが、Cyrixがx86プロセッサ用の高速浮動小数点ユニットの設計者としてスタートしたため、少し皮肉なことです。
^ 16ビットと32ビットのマイクロプロセッサはそれぞれ1978年と1985年に導入されました。64ビットの計画は1999年に発表され、2003年以降徐々に導入されました。
^ PDP-11などの一部の「CISC」設計では、2つを使用する場合が
^ これは、整数演算が後続のビット間のキャリーを生成するためです(単純なビット演算とは異なります)。
^ 特に重要な2つのMSRは、Pentium®IIプロセッサに導入されたSYSENTER_EIP_MSRとSYSENTER_ESP_MSRで、カーネルモードシステムサービスハンドラのアドレスと対応するカーネルスタックポインタを格納します。システムの起動時に初期化されるSYSENTER_EIP_MSRおよびSYSENTER_ESP_MSRは、SYSENTER(Intel)またはSYSCALL(AMD)命令によって使用され、以前に使用されたソフトウェア割り込み方式の約3倍の高速システムコールを実現します。
^ セグメント化されたアドレスは、16ビットセグメントに16を掛けたものと16ビットオフセットの合計であるため、最大アドレスは1,114,095(10FFEF hex)であり、アドレス指定可能性は1,114,096バイト= 1 MB +65,520バイトです。80286以前は、x86 CPUには20個の物理アドレスライン(アドレスビット信号)しかなかったため、アドレスの21番目のビットであるビット20は削除され、1 MBを超えるアドレスはアドレス空間の下限のミラーでした(アドレスから開始)零)。80286以降、すべてのx86 CPUには少なくとも24の物理アドレスラインがあり、計算されたアドレスのビット20がリアルモードでアドレスバスに出力されるため、CPUはx86セグメント化アドレスで到達可能な1,114,096バイト全体をアドレス指定できます。人気のあるIBMPCプラットフォームでは、21番目のアドレスビットを無効にする切り替え可能なハードウェアが80286以降のマシンに追加され、8088/8086ベースのモデル用に設計されたすべてのプログラムを実行できるようになりました。リアルモードのメモリとプロテクトモードの16MB以上のアドレス空間全体—A20ゲートを参照して
^ テーブルはゼロから始まりますが、セグメントレジスタにロードできる最小記述子インデックスは1であるため、テーブルの上部に追加の記述子レコードも必要です。値0は、セグメントを指さないセグメントレジスタを表すために予約されています。

参考文献
^ Pryce、Dave(1989年5月11日)。「8048632ビットCPUは、チップ密度と動作性能の新境地を開拓します。(Intel Corp。)(製品発表)EDN」(プレスリリース)。
^ 「Zet:x86(IA-32)オープン実装:概要」。OpenCores。2013年11月4日。
^ ブランドン、ジョナサン(2015年4月15日)。「x86を超えたクラウド:どのくらい古いアーキテクチャが復活しているのか」。ICloudPE。ビジネスクラウドニュース。データセンターでのx86の優位性にもかかわらず、ARMのような非x86アーキテクチャの周りでベンダーが過去数年にわたって作成しているノイズを無視することは困難です…
^ Dvorak、JohnC。「InteliAPX432に何が起こったのか?」。Dvorak.org 。
^ iAPX 286プログラマーズリファレンス(PDF)。インテル。1983年。
^ iAPX 86、88ユーザーズマニュアル(PDF)。インテル。1981年8月。
^ エドワーズ、ベンジ(2008年6月16日)。「標準の誕生:Intel8086マイクロプロセッサ」。PCWorld 。
^ スタンレーメイザー(2010年1月〜3月)。「Intelの8086」。コンピューティングの歴史のIEEE年報。32(1):75–79。土井:10.1109 /MAHC.2010.22。S2CID 16451604。
^ 「AMDはマイクロプロセッサフ​​ォーラムで新技術を開示します」(プレスリリース)。AMD。10月5日、1999年からのアーカイブの元3月2日、2000年に「再び時間と、プロセッサのアーキテクトが洗練x86アーキテクチャを見て、最新の技術革新に対応するために引き伸ばすことができないと宣言している、」ネイサンブルックウッド、主席アナリストは、Insight、言いました64。
^ 「MicrosoftがIntelItaniumサポートを終了する」。
^ 「Intel64およびIA-32アーキテクチャ最適化リファレンスマニュアル」(PDF)。インテル。2019年9月。3.4.2.2マクロ融合のための最適化。
^ フォグ、アグナー。「Intel、AMD、VIA CPUのマイクロアーキテクチャ」(PDF)。NS。107. Core2は、16ビットおよび32ビットモードでのみマクロ操作の融合を実行できます。Core Nehalemは、64ビットモードでもこれを実行できます。
^ 「Windowsx64Editionベースのコンピューターのセットアップとインストールに関する考慮事項」。
^ 「プロセッサー—インテルプロセッサーはどのモードのアドレス指定を使用しますか?」。
^ 「DSBスイッチ」。インテルVTuneアンプ2013。インテル。
^ 「8086ファミリユーザーズマニュアル」(PDF)。インテルコーポレーション。1979年10月。pp。2–69。
^ 「iAPX286プログラマーズリファレンスマニュアル」(PDF)。インテルコーポレーション。1983.2.4.3メモリアドレッシングモード。
^ 80386プログラマーズリファレンスマニュアル(PDF)。インテルコーポレーション。1986年。2.5.3.2実効アドレス計算。
^ インテル®64およびIA-32アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル、上巻:基本アーキテクチャ。インテルコーポレーション。2018年3月。第3章。
^ Andriesse、Dennis(2019)。「6.5コンパイラ設定が分解に及ぼす影響」。実用的なバイナリ分析:バイナリ計測、分析、および分解のための独自のLinuxツールを構築します。カリフォルニア州サンフランシスコ:いいえスターチPress社ISBN
 978-1-59327-913-4。OCLC  1050453850。
^ 「x86アセンブリのガイド」。Cs.virginia.edu。2013年9月11日。
^ 「FSTSW / FNSTSW— x87FPUステータスワードを保存する」。命令のFNSTSWAX形式は、主に条件分岐で使用されます。
^ Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル第1巻:基本アーキテクチャ(PDF)。インテル。2013年3月。第8章。
^ 「インテル80287ファミリー」。CPUの世界。
^ Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル第1巻:基本アーキテクチャ(PDF)。インテル。2013年3月。第9章。
^ Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル第1巻:基本アーキテクチャ(PDF)。インテル。2013年3月。第10章。
^ iAPX 286プログラマーズリファレンス(PDF)。インテル。1983年。セクション1.2「動作モード」。
^ iAPX 286プログラマーズリファレンス(PDF)。インテル。1983年。第6章「メモリ管理と仮想アドレス指定」。
^ 「IntelのYamhillテクノロジー:x86-64互換| Geek.com」。2012年9月5日にオリジナルからアーカイブされました。
^ AMD、Inc。。「付録E」(PDF)。AMDAthlon™プロセッサx86コード最適化ガイド(改訂版)。NS。250 。ページテーブルエントリのPCDビットとPWTビットで構成される2ビットのインデックスは、PAE(ページアドレス拡張)が有効になっている場合、またはPDEが大きなページを記述していない場合に、4つのPATレジスタフィールドの1つを選択するために使用されます。
^ Manek Dubash(2006年7月20日)。「IntelはItaniumを放棄しますか?」。Techworld。2011年2月19日にオリジナルからアーカイブされました。x86製品ラインの代替品としてIntelによって宣伝された後、Itaniumへの期待は大幅に抑制されました。
^ 「IBMWebSphereApplication Server 64ビットパフォーマンスの謎を解き明かす」(PDF)。IBMCorporation。2007年9月6日。p。14 。図5、6、および7は、32ビットバージョンのWASが、POWERおよびx86-64プラットフォームで完全なネイティブハードウェアパフォーマンスでアプリケーションを実行することも示しています。一部の64ビットプロセッサアーキテクチャとは異なり、POWERおよびx86-64ハードウェアは32ビットモードをエミュレートしません。したがって、64ビット機能の恩恵を受けないアプリケーションは、上記の64ビットプラットフォームで実行されている32ビットバージョンのWebSphereでフルパフォーマンスで実行できます。
^ 「第2巻:システムプログラミング」(PDF)。AMD64アーキテクチャプログラマーズマニュアル。AMDコーポレーション。2012年9月。
^ Charlie Demerjian(2003年9月26日)。「IntelのPrescottがAMD64拡張機能を使用する理由」。インクワイアラー。2009年10月10日にオリジナルからアーカイブされました。
> ^ アダムス、キース; オレ、アゲセン(2006年10月21〜25日)。x86仮想化のためのソフトウェアとハ​​ードウェアの技術の比較(PDF)。プログラミング言語とオペレーティングシステムのアーキテクチャサポートに関する国際会議の議事録、米国カリフォルニア州サンノゼ、2006年。ACM1-59593-451-0/ 06/0010 。

参考文献
ローゼンブラム、メンデル; ガーフィンケル、タル。「仮想マシンモニター:現在のテクノロジーと将来のトレンド」。IEEEコンピュータ。38(5):39–47。CiteSeerX  10.1.1.614.9870。土井:10.1109 /MC.2005.176。S2CID  10385623。

外部リンク
コモンズには、X86アーキテクチャに関連するメディアが
ウィキブックスには、次のトピックに関する本があります:X86アセンブリ/ X86アーキテクチャ
Intelがx86を廃止できないように見える理由
32/64ビットx86命令リファレンス
Intel Intrinsics Guide、Intel組み込み命令のインタラクティブリファレンスツール
インテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアル
AMD開発者ガイド、マニュアルおよびISAドキュメント、AMD64アーキテクチャ”