x86

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

x86
デザイナーIntelAMD
ビット16ビット32ビット64ビット
紹介された1978(16ビット)、1985(32ビット)、2003(64ビット)
設計CISC
タイプレジスタメモリ
エンコーディング変数(1〜15バイト)
分岐条件コード
エンディアンネス少し
ページサイズ8086i286:なし
i386i486:4KBページ
P5Pentium : 4 MBページを追加レガシーPAE:4KB→2MB)x86-64:1GBページを追加

拡張機能x87IA-32x86-64MMX3DNow!SSEMCAACPISSE2NXビットSMTSSE3SSSE3SSE4SSE4.2AES-NICLMULRDRANDSHAMPXSMESGXXOPF16CADXBMIFMAAVXAVX2AVX-VNNIAVX512VT-xVT-dAMD-VAMD-ViTSXASFTXT
開ける一部。一部の高度な機能では、x86にIntelからのライセンスが必要な場合があります。x86-64には、AMDからの追加ライセンスが必要な場合があります。80486プロセッサは30年以上市場に出回っているため[1]、特許クレームの対象にはなりません。したがって、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は、 Intel8086マイクロプロセッサとその8088バリアントに基づいてIntelによって最初に開発された命令セットアーキテクチャのファミリです[a] 。8086は、Intelの8ビット8080マイクロプロセッサの完全な16ビット拡張として1978年に導入され、プレーンな16ビットアドレスでカバーできるよりも多くのメモリをアドレス指定するためのソリューションとしてメモリセグメンテーションを備えています。「x86」という用語は、80186、80286、80386、80486などIntelの8086プロセッサの後継の名前が「86」で終わるために生まれました プロセッサ。

何年にもわたって多くの追加と拡張がx86命令セットに追加されており、ほぼ一貫して完全な下位互換性があります。[b]アーキテクチャは、Intel、 CyrixAMDVIA Technologies、およびその他の多くの企業のプロセッサに実装されています。Zet SoCプラットフォーム(現在は非アクティブ)などのオープンな実装もあります。[2]それにもかかわらず、それらのうち、Intel、AMD、VIA Technologies、およびDM&P Electronicsのみがx86アーキテクチャライセンスを保持しており、これらのうち、最初の2つだけが最新の64ビットデザインを積極的に作成しています。

この用語は、 IBM PC互換機と同義ではありません。これは、他の多数のコンピューターハードウェアを意味するためです。組み込みシステムと汎用コンピュータは、PC互換機市場が始まる前にx86チップを使用していましたが、[c] IBM PC(1981)がデビュー する前にそれらのいくつかが使用されていました。

2021年の時点で、販売されているほとんどのデスクトップコンピューターラップトップゲーム機Nintendo Switch [ 3]除く)はx86アーキテクチャに基づいていますが、スマートフォンタブレットなどのモバイルカテゴリはARMが主流です。ハイエンドでは、x86が引き続きコンピューティング集約型のワークステーションおよびクラウドコンピューティングセグメントを支配しますが[4]最速のスーパーコンピューターはARMベースであり、上位4つはもはやx86ベースではありません。[5]

概要

1980年代と1990年代初頭、808880286がまだ一般的に使用されていたとき、x86という用語は通常8086互換のCPUを表しています。ただし、今日、x86は通常、80386の32ビット 命令セットともバイナリ互換性があることを意味します。これは、この命令セットが多くの最新のオペレーティングシステムで最小公分母になっているためであり、おそらく1985年 に80386が導入された、この用語が一般的になりました。

8086および8088の導入から数年後、Intelは、野心的であるが運命の悪いIntel iAPX 432プロセッサの「iAPX」がより成功した8086ファミリのチップで試されたため、命名スキームと用語にいくらかの複雑さを加えました。 d]一種のシステムレベルのプレフィックスとして適用されます。80878089などのコプロセッサを含む8086システム、およびより単純なIntel固有のシステムチップ[e]は、iAPX86システムとして記述されていました。[6] [f] iRMX(オペレーティングシステム用)、iSBCシングルボードコンピューター用)、およびiSBX(8086アーキテクチャに基づくマルチモジュールボード用)、すべて一緒に「Microsystem80 」という見出しの下にあります。[7] [8] しかし、この命名スキームは非常に一時的なものであり、1980年代初頭の数年間続いた。[g]

8086は、主に組み込みシステムと小型のマルチユーザーまたはシングルユーザーコンピューター用に開発されましたが、主に8080互換のZilog Z80の成功への対応として[9]、x86ラインの機能と処理能力はすぐに向上しました。現在、x86は、固定およびポータブルの両方のパーソナルコンピューターに普及しており、ミッドレンジコンピューターワークステーション、サーバー、およびTOP500リストのほとんどの新しいスーパーコンピューター クラスターでも使用されています。多数のx86オペレーティングシステムを含む大量のソフトウェアが、 x86ベースのハードウェアを使用しています。

ただし、最新のx86は組み込みシステムでは比較的まれであり、小型の低電力アプリケーション(小さなバッテリーを使用)や、家電製品やおもちゃなどの低コストのマイクロプロセッサー市場では、x86の存在感があまりありません。[h]ここでは単純な8ビットおよび16ビットベースのアーキテクチャが一般的ですが、x86互換のVIA C7VIA NanoAMDGeodeAthlon NeoIntel Atomは、一部で使用されている32ビットおよび64ビットの設計の例です。比較的低電力で低コストのセグメント。

Intelによるものを含め、最初の単純な8ビットマイクロプロセッサから直接設計された「不法な」x86アーキテクチャの市場支配を終わらせるためのいくつかの試みがありました。この例としては、iAPX 432(元々はIntel 8800 [10]という名前のプロジェクト)、Intel 960Intel 860、およびIntel / Hewlett- PackardItaniumアーキテクチャがあります。ただし、x86マイクロアーキテクチャ回路、および半導体製造の継続的な改良により、多くのセグメントでx86を置き換えることが困難になります。AMDの64ビット拡張x86(Intelは最終的に互換性のある設計で対応しました)[11]また、最新のマルチコアCPU形式のx86チップのスケーラビリティは、確立された業界標準の継続的な改良が完全に新しいアーキテクチャとの競争にどのように抵抗できるかを示す例としてx86を強調しています。[12]

年表

次の表に、x86命令セットのバリエーションを実装するプロセッサモデルとモデルシリーズを時系列で示します。各ラインアイテムは、大幅に改善された、または商業的に成功したプロセッサマイクロアーキテクチャ設計によって特徴付けられます。

x86プロセッサの年表
世代 序章 著名なCPUモデル アドレス空間 注目すべき機能
線形 バーチャル 物理的
x86 1位 1978年 Intel 8086Intel 8088(1979) 16ビット NA 20ビット 16ビット ISAIBM PC(8088)、IBM PC / XT(8088)
1982年 Intel 80186Intel 80188
NEC V20 / V30(1983)
8086-2 ISA、組み込み(80186/80188)
2位 Intel80286とクローン 30ビット 24ビット プロテクトモードIBM PC / XT 286IBM PC / AT
3番目IA-32 1985年 Intel 80386AMD Am386(1991) 32ビット 46ビット 32ビット 32ビット ISA、ページング、IBM PS / 2
4番目(パイプライン、キャッシュ) 1989年 Intel 80486
Cyrix Cx486SDLC(1992)
AMD Am486(1993)、Am5x86(1995)
パイプライン、オンダイx87 FPU(486DX)、オンダイキャッシュ
5日
スーパースカラー
1993年 Intel PentiumPentium MMX(1996) スーパースカラー64ビット データバス、より高速なFPU、MMX(Pentium MMX)、APICSMP
1994年 NexGen Nx586
AMD 5k86 / K5(1996)
ディスクリートマイクロアーキテクチャ(µ-op変換)
1995年 Cyrix Cx5x86
Cyrix 6x86 / MX(1997)/ MII(1998)
動的実行
6日
PAE、µ-op変換)
1995年 Intel Pentium Pro 36ビット(PAE µ-op変換、条件付き移動命令、動的実行投機的実行、3ウェイx86スーパースカラー、スーパースカラーFPU、PAE、オンチップL2キャッシュ
1997年 Intel Pentium IIPentium III(1999)
Celeron(1998)、Xeon(1998)
オンパッケージ(Pentium II)またはオンダイ(Celeron)L2キャッシュ、SSE(Pentium III)、スロット1ソケット370またはスロット2(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ビット SSE2HTT(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プロセッサを除く)、オンダイメモリコントローラ、HyperTransport、オンダイデュアルコア(X2)、AMD-V(Athlon 64 Orleans Socket754 / 939/940またはAM2
2004年 Pentium 4(プレスコット)
Celeron DPentium D(2005)
36ビット EM64T(Pentium4およびCeleronDの選択されたモデルで有効)、SSE3、第2世代。NetBurstパイプライン、デュアルコア(オンダイ:Pentium D 8xx、オンチップ:Pentium D 9xx)、Intel VT(Pentium 4 6x2)、ソケットLGA 775
2006年 Intel Core 2
Pentiumデュアルコア(2007)
Celeronデュアルコア(2008)
Intel 64(<< == EM64T)、SSSE3(65 nm)、ワイドダイナミック実行、µ-opフュージョン、16ビットおよび32ビットモードでのmacro-opフュージョン、[13] [14]オンチップクアッド-コア(Core 2 Quad)、スマート共有L2キャッシュ(Intel Core 2 "Merom")
2007年 AMD Phenom / II(2008)
Athlon II(2009)
Turion II(2009)
48ビット モノリシッククアッドコア(X4)/トリプルコア(X3)、SSE4aRapid 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ビットモードでのマクロ操作の融合、[13] [14](Nehalemマイクロアーキテクチャを備えたIntel Xeon "Bloomfield")
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シリーズ(ボブキャット 36ビット 低電力スマートデバイスAPU
Intel Core i3Core 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 i3Core i5、およびCore i7Haswell / Broadwell 39ビット AVX2FMA3TSXBMI1、およびBMI2命令、LGA1150ソケット
2015年 Intel Broadwell-U
Intel Core i3Core i5Core i7Core MPentiumCeleron
SoC、オンチップBroadwell-U PCH-LP(マルチチップモジュール)
2015〜 2020年 Intel Skylake / Kaby Lake / Cannon Lake / Coffee Lake / Rocket Lake
(Intel Pentium / Celeron Gold、Core i3Core i5Core i7Core 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ビット 消費者向けセグメント向けのIntelによるAVX-512の最初の実装。ベクトルニューラルネットワーク命令(VNNI)の追加
2020 Intel Willow Cove(Tiger Lake-Y / U / H) デュアルリング相互接続アーキテクチャ、更新されたGaussian Neural Accelerator(GNA2)、新しいAVX-512 Vector Intersection Instructions、Control-Flow Enforcement Technology(CET)の追加
2021年 Intel Alder Lake パフォーマンス(Golden Cove)と効率コア(Gracemont)を備えたハイブリッド設計、PCIe Gen5とDDR5のサポート、更新されたGaussian Neural Accelerator(GNA3)
時代 リリース CPUモデル 物理アドレス空間 新機能

歴史

他のメーカー

1991年にAMDからリリースされたAm386

IBMVIANEC[i] AMDTISTMFujitsuOKISiemensCyrixIntersilC&TNexGenUMCDM&Pなどの企業は、さまざまな時期に[j] x86プロセッサの設計または製造を開始しました。 (CPU)パーソナルコンピュータおよび組み込みシステムを対象としています。このようなx86の実装は、単純なコピーになることはめったにありませんが、多くの場合、異なる内部マイクロアーキテクチャを採用しています。電子的および物理的レベルでのさまざまなソリューション。当然のことながら、初期の互換性のあるマイクロプロセッサは16ビットでしたが、32ビットの設計はずっと後に開発されました。パーソナルコンピュータ市場では、1990年頃にi386およびi486互換プロセッサで実際の数量が表示され始めました。これらのプロセッサは、多くの場合、Intelの元のチップと同じ名前が付けられています。x86またはx87プロセッサを設計または製造した他の企業には、ITT CorporationNational SemiconductorULSI System Technology、およびWeitekが含まれます。

完全にパイプライン化された i486に続いて、Intelは新しいスーパースカラーx86デザインのセットにPentiumブランド名(数字とは異なり、商標登録される可能性があります)を導入しました。 x86の命名スキームが法的にクリアされたため、他のx86ベンダーは、x86互換製品に異なる名前を選択する必要があり、当初は、番号付けスキームのバリエーションを継続することを選択しました。IBMはCyrixと提携して、 5x86を製造し、その後、非常に効率的でした。 6x86(M1)および6x86 MX(MII)投機的実行を可能にするレジスタリネーミングを実装した最初のx86マイクロプロセッサであるCyrixデザインのライン。一方、AMDは、高度であるが遅延した5k86K5)を設計および製造しました。これは、内部的には、AMDの以前の29KRISC設計に厳密に基づいていましNexGenNx586と同様に、専用のパイプラインステージがx86命令を均一で扱いやすいマイクロオペレーションにデコードするという戦略を使用しました。これは、今日までほとんどのx86設計の基礎となっている方法です。

これらのマイクロプロセッサの一部の初期バージョンには、放熱の問題がありました。 6x86は、いくつかのマイナーな互換性の問題の影響も受けました。Nx586には浮動小数点ユニット(FPU)と(当時は重要な)ピン互換性がありませんでしたが、K5は(最終的に)導入されたときに多少期待外れのパフォーマンスでした。K5はPentiumとの互換性が非常に高く、6x86は整数コードのPentiumよりも大幅に高速であったにもかかわらず、Pentiumシリーズの代替品に対する顧客の無知は、これらの設計が比較的失敗する原因となりました。 [k] AMDは後にK6との真剣な競争相手に成長することができました非常に成功したAthlonOpteronに取って代わったプロセッサのセットCentaur Technology(以前のIDT)、Rise TechnologyTransmetaなどの他の候補もありましたCentaur社によって設計されたVIATechnologiesのエネルギー効率の高いC3およびC7プロセッサは、長年にわたって販売されてきました。Centaurの最新設計であるVIANanoは、スーパースカラー投機的実行を備えた最初のプロセッサです。これは、 P5PentiumであるIntelAtom以来の Intelの最初の「インオーダー」プロセッサとほぼ同時に導入されました

ワードサイズの拡張

命令セットアーキテクチャは、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ユニットを介して同時に処理できます。[l]即時アドレス指定オフセットおよび即時データは、-128..127の範囲で十分な、頻繁に発生するケースまたはコンテキストの8ビット量として表すことができます。したがって、一般的な命令の長さは2バイトまたは3バイトです(ただし、はるかに長いものもあれば、シングルバイトのものもあります)。

エンコーディングスペースをさらに節約するために、ほとんどのレジスタは3ビットまたは4ビットを使用するオペコードで表現されます。後者は64ビットモードのオペコードプレフィックスを介して表現されますが、命令の最大1つのオペランドをメモリロケーションにすることができます。[m]ただし、このメモリオペランドはデスティネーション(またはソースデスティネーションの組み合わせ)でもありますが、他のオペランドであるソースはレジスタまたはイミディエートのいずれかです。他の要因の中でも、これは8ビットマシンに匹敵するコードサイズに貢献し、命令キャッシュメモリの効率的な使用を可能にします。比較的少数の汎用レジスタ(これも8ビットの祖先から継承されます)により、レジスタ相対アドレス指定(小さなイミディエートオフセットを使用)が、特にスタック上のオペランドにアクセスするための重要な方法になっています。したがって、アクセスされたデータがトップレベルのキャッシュで利用できるほとんどの状況で、レジスタアクセスと同じくらい高速なアクセス、つまり1サイクルの命令スループットを実現するために多くの作業が費やされてきました。

浮動小数点とSIMD

80ビットの内部レジスタを備えた専用の浮動小数点プロセッサ8087は、元の8086用に開発されましたその後、このマイクロプロセッサは拡張80387に発展し、その後のプロセッサは、メインプロセッサと同じマイクロプロセッサにこの機能の下位互換性のあるバージョンを組み込みました。これに加えて、最新のx86デザインにはSIMDユニット(以下のSSEを参照)も含まれており、命令は(1つまたは2つの)128ビットワードで並列に動作し、それぞれに2つまたは4つの浮動小数点数が含まれます。(それぞれ64ビット幅または32ビット幅)、または2、4、8、または16整数(それぞれ64、32、16または8ビット幅)。

ワイドSIMDレジスタが存在するということは、既存のx86プロセッサが1つの命令で最大128ビットのメモリデータをロードまたは格納でき、完全な128ビット量に対してビット単位の演算(整数演算[n]ではない)を並行して実行できることを意味します。IntelのSandyBridgeプロセッサは、Advanced Vector Extensions(AVX)命令を追加し、SIMDレジスタを256ビットに拡張しました。Knights Corner XeonPhiプロセッサによって実装されたIntelInitial Many Core命令、およびKnights Landing Xeon PhiプロセッサとSkylake-Xプロセッサによって実装されたAVX-512命令は、512ビット幅のSIMDレジスタを使用します。

現在の実装

実行、現在のx86プロセッサは、いくつかの追加のデコード手順を使用して、ほとんどの命令をマイクロオペレーションと呼ばれる小さな部分に分割します。次に、これらはx86セマンティクスに準拠してバッファリングおよびスケジュールする制御ユニットに渡され、いくつかの(多かれ少なかれ特殊化された)実行ユニットの1つによって部分的に並行して実行できるようになります。したがって、これらの最新のx86設計はパイプライン化され、スーパースカラーであり、(分岐予測レジスタリネーミング、およびメモリ依存性予測を介して)順序が狂って投機的実行も可能です。)。つまり、複数の(部分的または完全な)x86命令を同時に実行できますが、必ずしも命令ストリームで指定された順序と同じである必要はありません。[16] 一部のIntelCPU(Xeon Foster MP、一部のPentium 4、および一部のNehalem以降のIntel Coreプロセッサ)およびAMD CPU(Zen以降)は、コアごとに2つのスレッドで同時にマルチスレッド化することもできますXeonPhiには4つのスレッドがあります)芯)。一部のIntelCPUは、トランザクションメモリTSX)をサポートしています。

1990年代半ばに導入されたとき、この方法は「RISCコア」または「RISC変換」と呼ばれることもありました。これは、マーケティング上の理由もありますが、これらのマイクロオペレーションが特定の種類のRISC命令といくつかのプロパティを共有しているためです。ただし、従来の マイクロコード(1950年代から使用されている)も本質的に同じプロパティの多くを共有しています。新しい方法は主に、マイクロオペレーションへの変換が非同期で行われるという点で異なります。実行ユニットをデコードステップと同期する必要がないため、(バッファリングされた)コードストリームをさらに分析できる可能性があります。したがって、複数の実行ユニットに同時にフィードしながら、並行して実行できる操作を検出できます。

最新のプロセッサも、必要に応じて逆のことを行います。これらは、特定のx86シーケンス(比較とそれに続く条件付きジャンプなど)をより複雑なマイクロオペレーションに結合します。これにより、実行モデルにより適合し、より高速に、またはより少ないマシンリソースで実行できます。

パフォーマンスを向上させるもう1つの方法は、デコードされたマイクロオペレーションをキャッシュすることです。これにより、プロセッサは、デコードされたマイクロオペレーションを再度デコードするのではなく、特別なキャッシュから直接アクセスできます。Intelは、 NetBurstマイクロアーキテクチャ(Pentium 4プロセッサの場合)および後でデコードされたストリームバッファ(Sandy Bridge以降のCoreブランドのプロセッサの場合)の実行トレースキャッシュ機能を使用して、このアプローチに従いました。[17]

Transmetaは、 Crusoex86互換CPUでまったく異なる方法を使用しました。彼らはジャストインタイム変換を使用して、x86命令をCPUのネイティブVLIW命令セットに変換しました。Transmetaは、CPUが従来の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ビットセグメント内で管理できます 。または、コンパイラは、 segment:offset1 MBに達する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ビットプロセッサモードのアドレッシングモードは、次の式で要約できます。[18] [19]

32ビットx86プロセッサモードのアドレッシングモード[20]は、次の式で要約できます。[21]

64ビットプロセッサモードのアドレッシングモードは、次の式で要約できます。[21]

64ビットコード(RIP +変位、RIPは命令ポインタレジスタ)での命令相対アドレス指定により、位置に依存しないコード一部のオペレーティングシステムの共有ライブラリで使用される)の実装が簡素化されます。[22]

8086は持っていた64 KBの8ビット(または代わりに16ビットの32KワードI / Oスペース、およびコンピュータハードウェアでサポートされているメモリ内の64KB(1セグメント)スタックスタックにプッシュできるのはワード(2バイト)のみです。スタックは数値的に低いアドレスに向かって成長し、SS:SPは最後にプッシュされたアイテムを指します。256の割り込みがあり、ハードウェアとソフトウェアの両方で呼び出すことができます。割り込みは、スタックを使用してリターンアドレスを格納することでカスケードできます

x86レジスタ

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)は、メモリからフェッチされて実行される次の命令を指します。このレジスタには、プログラムから直接アクセス(読み取りまたは書き込み)することはできません。[23]

Intel 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進整数。[8] :S-6、S-13..S-15 また、 fntsw命令を介してアクセスできる独自の16ビットステータスレジスタがあり、分岐にビットの一部を使用して、にコピーするのが一般的です。通常のフラグ。[24]

Intel 80286では、プロテクトモードをサポートするために、3つの特殊レジスタが記述子テーブルアドレス(GDTR、LDTR、IDTR)を保持し、4番目のタスクレジスタ(TR)がタスク切り替えに使用されます。80287は、80286の浮動小数点コプロセッサであり、同じデータ形式の8087と同じレジスタを備えています。

32ビット

x86-64命令セットで使用可能なレジスタ

32ビット80386プロセッサの出現により、16ビット汎用レジスタ、ベースレジスタ、インデックスレジスタ、命令ポインタ、およびFLAGSレジスタが32ビットに拡張されましたが、セグメントレジスタは拡張されていません。命名法は、 x86アセンブリ言語のレジスタ名の前に「 E」(「拡張」を表す)を付けることでこれを表しています。したがって、AXレジスタは新しい32ビットEAXレジスタの下位16ビットに対応し、SIはESIの下位16ビットに対応します。汎用レジスタ、ベースレジスタ、インデックスレジスタはすべてアドレッシングモードのベースとして使用でき、スタックポインタを除くすべてのレジスタをアドレッシングモードのインデックスとして使用できます。

2つの新しいセグメントレジスタ(FSとGS)が追加されました。レジスタ、命令、およびオペランドの数が増えると、マシンコード形式が拡張されました。下位互換性を提供するために、実行可能コードを含むセグメントは、16ビットまたは32ビットの命令を含むものとしてマークできます。特別なプレフィックスを使用すると、16ビットセグメントに32ビット命令を含めることができます。その逆も可能です。

80386には、オプションの浮動小数点コプロセッサ80387がありました。それは8つの80ビット幅のレジスタを持っていました:8087と80287のようにst(0)からst(7)、[25]。80386は80287コプロセッサを使用することもできます。[26] 80486以降のすべてのx86モデルでは、浮動小数点処理ユニット(FPU)がオンチップに統合されています。

Pentium MMXは、8つの64ビットMMX整数レジスタ(MMX0からMMX7、80ビット幅のFPUスタックと下位ビットを共有)を追加しました。[27] Pentium IIIでは、Intelは32ビットストリーミングSIMD拡張命令(SSE)制御/ステータスレジスタ(MXCSR)と8つの128ビットSSE浮動小数点レジスタ(XMM0からXMM7)を追加しました。[28]

64ビット

AMD Opteronプロセッサ以降、x86アーキテクチャは、16ビットから32ビットへの拡張が行われたのと同様の方法で32ビットレジスタを64ビットレジスタに拡張しました。Rプレフィックス(「レジスタ」の場合)は、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レジスタXMM0〜XMM15。

256ビット

SIMDレジスタYMM0〜YMM15。

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 [o]で表示)。

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
処方箋
?バツ
?H ?L
64ビットモードのみの汎用レジスタ(R8、R9、R10、R11、R12、R13、R14、R15)
64 56 48 40 32 24 16 8
?D
?W
?B
セグメントレジスタ(C、D、S、E、F、G)
16 8
?S
ポインタレジスタ(SおよびB)
64 56 48 40 32 24 16 8
R?P
E?P
?P
?PL

注:?PLレジスタは、64ビットモードでのみ使用できます。

インデックスレジスタ(SおよびD)
64 56 48 40 32 24 16 8
R?I
E?I
?私
?IL

注:?ILレジスタは、64ビットモードでのみ使用できます。

命令ポインタレジスタ(I)
64 56 48 40 32 24 16 8
RIP
EIP
IP

動作モード

リアルモード

リアルアドレスモード[29]は、一般にリアルモードと呼ばれ、8086以降のx86互換CPUの動作モードです。リアルモードは、20ビットのセグメント化されたメモリアドレス空間(1 MiBをわずかに超えるメモリしかアドレス指定できないことを意味します[p])、周辺ハードウェアへの直接ソフトウェアアクセス、およびハードウェアでのメモリ保護マルチタスクの概念がないことを特徴としています。レベル。80286シリーズ以降のすべてのx86CPUは、電源投入時にリアルモードで起動します。80186CPU以前には、動作モードが1つしかありませんでした。これは、後のチップのリアルモードに相当します。(IBM PCプラットフォームでは、BIOSはリアルモード用に作成されているため、IBM BIOSルーチンへの直接ソフトウェアアクセスはリアルモードでのみ使用できます。ただし、これはx86 CPUのプロパティではなく、IBM BIOS設計のプロパティです。)

64 KBを超えるメモリを使用するには、セグメントレジスタを使用する必要があります。これは、「near」、「far」、「huge」などの奇妙なポインタモードを導入して、セグメント化されたアーキテクチャの暗黙的な性質をさまざまな程度で活用するコンパイラ実装者にとって大きな複雑さを生み出しました。一部のポインタには、暗黙のセグメント内に16ビットオフセットが含まれています。セグメントアドレスとセグメント内のオフセットを含むポインタ。 4つのセグメントレジスタすべてを一度に設定し、16ビットオフセット(オプションでデフォルトセグメントオーバーライドプレフィックスを使用)のみを使用することにより、コードとデータに最大256 KB、コードに最大64 KBのメモリを使用することが技術的に可能です。アドレスメモリですが、これにより、データのアドレス指定方法とメモリオペランドの組み合わせ方法にかなりの制限が課せられます。また、以前の8から移植されていない新しいプログラムでは、個別のデータ項目(配列、構造、コードユニットなど)を個別のセグメントに含め、独自のセグメントアドレスでアドレス指定するという、Intel設計者のアーキテクチャ上の意図に違反しています。 -16ビットアドレス空間を備えたビットプロセッサ。

非現実モード

非現実モードは、一部の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に制限されます。[30]

セグメントレジスタがプロテクトモードでロードされるたびに、80286は6バイトのセグメント記述子をメモリから隠し内部レジスタのセットに読み込む必要があります。したがって、セグメントレジスタのロードは、リアルモードよりもプロテクトモードの方がはるかに遅く、セグメントを頻繁に変更することは避けてください。80286以降には、命令の実行と並行してセグメント制限に対してオフセットをチェックするハードウェアがあるため、プロテクトモードセグメントを使用した実際のメモリ操作はそれほど遅くなりません。

Intel 80386は、オフセットと各セグメント記述子のセグメント制限フィールドを32ビットに拡張し、セグメントがメモリ空間全体にまたがることを可能にしました。また、ページングの保護モードでのサポートも導入されました。これは、ページングされた仮想メモリの使用を可能にするメカニズムです。(4 KBのページサイズ)。ページングにより、CPUは仮想メモリ空​​間の任意のページを物理メモリ空間の任意のページにマップできます。これを行うために、ページテーブルと呼ばれるメモリ内の追加のマッピングテーブルを使用します。 80386の保護モードは、ページングを有効または無効にして動作できます。セグメンテーションメカニズムは常にアクティブであり、仮想アドレスを生成します。仮想アドレスは、有効になっている場合はページングメカニズムによってマップされます。セグメンテーションメカニズムは、すべてのセグメントを0のベースアドレスとアドレス空間全体に等しいサイズ制限を持つように設定することによって効果的に無効にすることもできます。これには、4つの記述子のみの最小サイズのセグメント記述子テーブルも必要です(FSおよびGSセグメントを使用する必要がないため)。[q]

ページングは​​、最新のマルチタスクオペレーティングシステムで広く使用されています。Linux386BSD、およびWindows NTは、ページングと32ビットセグメントオフセットをサポートする最初のIntelアーキテクチャCPUであるため、386用に開発されました。 386アーキテクチャは、x86シリーズの今後のすべての開発の基礎となりました。

プロテクトモードをサポートするx86プロセッサは、古い8086クラスのプロセッサとの下位互換性のためにリアルモードで起動します。電源を入れると(別名ブート)、プロセッサはリアルモードで初期化してから、命令の実行を開始します。ROMに保存されている可能性のあるオペレーティングシステムのブートコードにより、プロセッサが保護モードになり、ページングやその他の機能が有効になる場合があります。プロテクトモードで設定された命令は、リアルモードで使用されたものと同様です。ただし、リアルモードに適用される特定の制約( [要出典]のアドレス指定にax、cx、dxを使用できないなど))保護モードでは適用しないでください。逆に、リアルモードコードで一般的な方法であるセグメント演算は、プロテクトモードでは許可されていません。

仮想8086モード

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

ロングモード

1990年代半ば、x86アーキテクチャの32ビットアドレス空間が、大規模なデータセットを必要とするアプリケーションでのパフォーマンスを制限していたことは明らかでした。32ビットのアドレス空間では、プロセッサは4 GBのデータのみを直接アドレス指定できます。これは、ビデオ処理データベースエンジンなどのアプリケーションが超えるサイズです。64ビットアドレスを使用すると、16  EiBのデータを直接アドレス指定できますが、ほとんどの64ビットアーキテクチャは64ビットアドレス空間全体へのアクセスをサポートしていません。たとえば、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のサポートを実装していましたが[31]、Itaniumの新しいIA-64命令セットが広く採用される前にAMDがAMD64を市場に投入しないことを期待して、サポートを有効にしないことを選択しました。AMD64の実装をEM64Tとしてブランド化し、後でIntel64にブランド名を変更しまし

MicrosoftとSunは、その資料と製品バージョン名で、WindowsおよびSolarisオペレーティングシステムではAMD64 / Intel64をまとめてx64と呼んでいます。Linuxディストリビューションでは、これを「x86-64」、そのバリアント「x86_64」、または「amd64」のいずれかと呼んでいます。BSDシステムは「amd64」を使用しますが、 macOSは「x86_64」を使用します。

ロングモードは主に32ビット命令セットの拡張ですが、16ビットから32ビットへの移行とは異なり、64ビットモードでは多くの命令がドロップされました。これは、実際のバイナリの下位互換性(これらの命令のサポートを保持する他のモードでレガシーコードを実行する)には影響しませんが、新しいコードのアセンブラーとコンパイラーの動作方法を変更します。

x86アーキテクチャの主要な拡張が、Intel以外のメーカーによって開始され、開始されたのはこれが初めてでした。また、Intelがこの種のテクノロジーを外部ソースから受け入れたのも初めてでした。

拡張機能

浮動小数点ユニット

初期の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は、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!

1997年、AMDは3DNow!を発表しました。このテクノロジーの導入は、3Dエンターテインメントアプリケーションの台頭と同時に行われ、グラフィックを多用するアプリケーションのCPUのベクトル処理パフォーマンスを向上させるように設計されました。3Dビデオゲーム開発者と3Dグラフィックスハードウェアベンダーは3DNow!を使用しています。AMDのK6およびAthlonシリーズのプロセッサで のパフォーマンスを向上させるため。

3DNow!整数から浮動小数点へのMMXの自然な進化であるように設計されました。そのため、MMXとまったく同じレジスタ命名規則(MM0からMM7)を使用します。唯一の違いは、これらのレジスタに整数をパックする代わりに、2つの単精度浮動小数点数が各レジスタにパックされることです。FPUレジスタのエイリアシングの利点は、FPUレジスタの状態を保存するために使用されるのと同じ命令およびデータ構造を使用して3DNow!を保存できることです。状態を登録します。したがって、オペレーティングシステムに特別な変更を加える必要はありません。

SSEおよびAVX

1999年、IntelはストリーミングSIMD拡張命令(SSE)命令セットを導入し、2000年にはSSE2を導入しました。最初の追加により、x87スタックからの基本的な浮動小数点演算のオフロードが可能になり、2番目の追加によりMMXはほとんど時代遅れになり、従来のコンパイラーが命令を現実的にターゲットにすることができました。 SSE3は、 Pentium 4プロセッサのPrescottリビジョンとともに2004年に導入され、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 Vector Extensions(AVX)は、SSEレジスタのサイズを2倍の256ビットYMMレジスタにしました。また、より大きなレジスタに対応するためのVEXコーディング方式と、要素を並べ替えるためのいくつかの命令も導入しました。AVX2は追加のレジスタを導入しませんでしたが、マスキング、収集、およびシャッフル命令の追加で注目に値しました。

AVX-512は、32個の512ビットZMMレジスタへのさらに別の拡張と新しいEVEXスキームを備えています。モノリシック拡張を特徴とするその前身とは異なり、CPUの特定のモデルが実装することを選択できる多くのサブセットに分割されています。

物理アドレス拡張(PAE)

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

x86-64

スーパーコンピューター クラスター( TOP 500データで追跡され上の図で視覚化され、2013年に最終更新)では、x86アーキテクチャーの64ビット拡張機能の出現により、AMDおよびIntelによる64ビットx86プロセッサーが有効になりました(ティールハッチングとブルーハッチング、Intelが最初に失敗したにもかかわらず、そのようなシステムで以前に使用されていたほとんどのRISCプロセッサアーキテクチャ(PA-RISCSPARCAlphaなどを含む)および32ビットx86(図の緑色)を置き換えるために、それぞれ図に示されています。 Itaniumプロセッサでx86を互換性のない新しい64ビットアーキテクチャに置き換えます。スーパーコンピューティングクラスターで2014年の時点でまだ使用されている主な非x86アーキテクチャーは、IBMPowerマイクロプロセッサーで使用されるPowerISA (図では青とひし形のタイリング)。SPARCは遠い秒です。

2000年代までに、32ビットx86プロセッサのメモリアドレス指定の制限は、高性能コンピューティングクラスタや強力なデスクトップワークステーションでの使用の障害になりました。古い32ビットx86は、はるかに多くのメモリに対応できる、はるかに高度な64ビットRISCアーキテクチャと競合していました。ワークステーションおよびデスクトップソフトウェアアプリケーションが間もなく32ビットメモリアドレス指定の限界に達し始めたため、x86が64ビットコンピューティングの時代を生き残るためには、Intelおよびx86エコシステム全体で64ビットメモリアドレス指定が必要でした。ただし、Intelは、大胆な一歩を踏み出し、64ビットデスクトップコンピューターへの移行を使用して、一般的なx86アーキテクチャからの移行を行うのが適切な時期であると感じました。この実験は、最終的に失敗しました。

2001年、IntelはItaniumプロセッサにIA-64という名前の非x86 64ビットアーキテクチャを導入しようとしました。当初は高性能コンピューティング市場を目指しており、最終的には32ビットx86に取って代わることを望んでいました。[33] IA-64はx86と互換性がありませんでしたが、Itaniumプロセッサはx86命令をIA-64に変換するためのエミュレーション機能を提供しましたが、これはx86プログラムのパフォーマンスに大きな影響を与えたため、実際に役立つことはめったにありませんでした。ユーザー:プログラマーは、IA-64アーキテクチャー用にx86プログラムを書き直す必要があります。そうしないと、Itaniumでのパフォーマンスが実際のx86プロセッサーよりも大幅に低下します。Itaniumプロセッサが壊れたため、市場はそれを拒否しました下位互換性があり、x86チップを引き続き使用することをお勧めします。また、IA-64用に書き直されたプログラムはほとんどありません。

AMDは、下位互換性が損なわれないように、64ビットメモリアドレス指定に向けて別の方法をとることを決定しました。2003年4月、AMDは64ビットの汎用レジスタを備えた最初のx86プロセッサであるOpteronをリリースしました。これは、新しいx86-64拡張機能(AMD64またはx64とも呼ばれます)を使用して4GBをはるかに超える 仮想メモリをアドレス指定できます。x86アーキテクチャの64ビット拡張は、新しく導入されたロングモードでのみ有効になりました。したがって、32ビットおよび16ビットのアプリケーションとオペレーティングシステムは、わずかな犠牲を払うことなく、保護モードまたはその他のモードでAMD64プロセッサを使用し続けることができます。パフォーマンス[34]16ビットIntel8086の元の命令と完全に互換性があります。 [35] :13–14 市場は前向きに反応し、高性能アプリケーションとビジネスまたは家庭用コンピュータの両方に64ビットAMDプロセッサを採用しました。

市場が互換性のないItaniumプロセッサとAMD64をサポートするMicrosoftを拒否しているのを見て、Intelは対応し、2004年7月に独自のx86-64プロセッサであるPrescott Pentium 4を導入する必要がありました。 [36]その結果、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チップは小さな低電力システムから利用されています(たとえば、IntelQuarkおよびIntelAtom)から高速ゲーム用デスクトップコンピューター(たとえば、Intel Corei7およびAMDFX / Ryzen)、さらには大規模なスーパーコンピューティングクラスターを支配し、 ARM32ビットおよび64ビットRISCアーキテクチャのみを競合他社として効果的に残します。スマートフォンタブレット市場。

仮想化

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

2005年にAMD-VおよびIntelVT-x命令セットが導入されたことにより、x86プロセッサはPopekおよびGoldbergの仮想化要件を満たすことができました。[37]

AES

も参照してください

メモ

  1. ^ 特定のマイクロプロセッサ設計に使用されるマイクロアーキテクチャ(および特定の電子的および物理的実装)とは異なり
  2. ^ Intelは、 1993年にP5 Pentiumでの「x86」命名スキームを放棄しました(番号は商標登録できなかったため)。ただし、x86という用語は、技術者、コンパイラ作成者などの間ですでに確立されています。
  3. ^ たとえば、GRIDCompassラップトップ
  4. ^ 8088、80186、80188および80286プロセッサ含みます _
  5. ^ このようなシステムには、マルチプレクサ、バッファ、グルーロジックなどの標準的な7400シリーズサポートコンポーネントの通常の組み合わせも含まれていました
  6. ^ iAPXの実際の意味は、Intel Advanced Performance Architecture、または場合によってはIntel Advanced ProcessorArchitectureでした。
  7. ^ 1981年後半から1984年初頭、およそ
  8. ^ 組み込みプロセッサ市場には、25を超えるさまざまなアーキテクチャが存在します。これらのアーキテクチャは、価格に敏感で、低電力で、ハードウェアの単純さの要件により、x86を上回っています。
  9. ^ NEC V20およびV30は、古い8080命令セットも提供し、これらのマイクロプロセッサを搭載したPCがCP / Mアプリケーションをフルスピードで動作できるようにしました(つまり、ソフトウェアで8​​080をシミュレートする必要はありません)。
  10. ^ ファブレス企業はチップを設計し、それを製造するために別の企業と契約しましたが、ファブレス企業は設計と製造の両方を自分たちで行います。一部の企業はファブレスメーカーとして始まり、後にファブレスデザイナーになりました。そのような例の1つがAMDです。
  11. ^ ただし、FPUは低速でしたが、Cyrixがx86プロセッサ用の高速浮動小数点ユニットの設計者としてスタートしたため、少し皮肉なことです。
  12. ^ 16ビットおよび32ビットのマイクロプロセッサは、それぞれ1978年および1985年に導入されました。64ビットの計画は1999年に発表され、2003年以降徐々に導入されました。
  13. ^ PDP-11などの一部の「CISC」設計では、2つを使用する場合があります。
  14. ^ これは、整数演算が後続のビット間のキャリーを生成するためです(単純なビット演算とは異なります)。
  15. ^ 特に重要な2つのMSRは、Pentium®IIプロセッサに導入されたSYSENTER_EIP_MSRとSYSENTER_ESP_MSRで、カーネルモードシステムサービスハンドラのアドレスと対応するカーネルスタックポインタを格納します。システムの起動時に初期化されたSYSENTER_EIP_MSRおよびSYSENTER_ESP_MSRは、SYSENTER(Intel)またはSYSCALL(AMD)命令によって使用され、以前に使用されたソフトウェア割り込み方式の約3倍の高速システムコールを実現します。
  16. ^ セグメント化されたアドレスは、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ゲートを参照してください。
  17. ^ テーブルはゼロから始まりますが、セグメントレジスタにロードできる最小記述子インデックスは1であるため、テーブルの上部に追加の記述子レコードも必要です。値0は、セグメントを指さないセグメントレジスタを表すために予約されています。

参考文献

  1. ^ Pryce、Dave(1989年5月11日)。「8048632ビットCPUは、チップ密度と動作性能の新境地を開拓します。(Intel Corp。)(製品発表)EDN」(プレスリリース)。
  2. ^ 「Zet:x86(IA-32)オープン実装:概要」OpenCores2013年11月4日。2018年2月11日のオリジナルからアーカイブ2014年1月5日取得
  3. ^ Walton、Mark(2016年12月20日)。「NintendoSwitchはNvidiaTegra X1 SoCを使用しており、クロック速度が上回っています」ArsTechnica2016年12月20日にオリジナルからアーカイブされました2022年1月11日取得
  4. ^ ブランドン、ジョナサン(2015年4月15日)。「x86を超えたクラウド:どのように古いアーキテクチャが復活しているのか」ICloudPE。ビジネスクラウドニュース。2021年8月19日にオリジナルからアーカイブされました2020年11月23日取得データセンターでのx86の優位性にもかかわらず、ARMのような非x86アーキテクチャの周りでベンダーが過去数年にわたって作成しているノイズを無視することは困難です...
  5. ^ Vaughan-Nichols、Steven(2020年6月23日)。「ARMとLinuxはスーパーコンピューターTOP500の王冠を獲得しました」zdnet2022年1月11日にオリジナルからアーカイブされました2022年1月11日取得Intelのx86アーキテクチャは、上位5つのスーパーコンピュータのうちの1つだけの中心にあります。
  6. ^ Dvorak、JohnC。「InteliAPX432に何が起こったのか?」Dvorak.org。2017年11月25日にオリジナルからアーカイブされました2014年4月18日取得
  7. ^ iAPX 286プログラマーズリファレンス(PDF)インテル。1983年。 2017年8月28日のオリジナルからアーカイブ(PDF)2017年8月28日取得
  8. ^ a b iAPX 86、88ユーザーズマニュアル(PDF)インテル。1981年8月。 2017年8月28日のオリジナルからアーカイブ(PDF)2017年8月28日取得
  9. ^ エドワーズ、ベンジ(2008年6月16日)。「標準の誕生:Intel8086マイクロプロセッサ」PCWorld2010年9月26日にオリジナルからアーカイブされました2014年9月14日取得
  10. ^ スタンレーメイザー(2010年1月〜3月)。「Intelの8086」。コンピューティングの歴史のIEEE年報32(1):75–79。土井10.1109 /MAHC.2010.22S2CID16451604_ 
  11. ^ 「AMDはマイクロプロセッサフ​​ォーラムで新技術を開示します」(プレスリリース)。AMDインサイトのプリンシパルアナリストであるネイサンブルックウッドは、次のように述べています。 64。
  12. ^ 「MicrosoftはIntelItaniumサポートを終了します」2014年9月14日取得
  13. ^ a b 「Intel64およびIA-32アーキテクチャ最適化リファレンスマニュアル」(PDF)インテル。2019年9月。3.4.2.2マクロ融合のための最適化。2020年2月14日のオリジナルからアーカイブ(PDF)2020年3月7日取得
  14. ^ a b 霧、アグナー。「Intel、AMD、VIA CPUのマイクロアーキテクチャ」(PDF)p。107. 2019年3月22日のオリジナルからアーカイブ(PDF)2020年3月7日取得Core2は、16ビットおよび32ビットモードでのみマクロ操作の融合を実行できます。Core Nehalemは、64ビットモードでもこれを実行できます。
  15. ^ 「Windowsx64Editionベースのコンピューターのセットアップとインストールに関する考慮事項」2014年9月11日にオリジナルからアーカイブされました2014年9月14日取得
  16. ^ 「プロセッサー—インテルプロセッサーはどのモードのアドレス指定を使用しますか?」2014年9月11日にオリジナルからアーカイブされました2014年9月14日取得
  17. ^ 「DSBスイッチ」インテルVTuneアンプ2013インテル。2013年12月2日にオリジナルからアーカイブされました2013年8月26日取得
  18. ^ 「8086ファミリユーザーズマニュアル」(PDF)インテルコーポレーション。1979年10月。pp。2–69。2018年4月4日のオリジナルからアーカイブ(PDF)2018年3月28日取得
  19. ^ 「iAPX286プログラマーズリファレンスマニュアル」(PDF)インテルコーポレーション。1983.2.4.3メモリアドレッシングモード。2017年8月28日のオリジナルからアーカイブ(PDF)2017年8月28日取得
  20. ^ 80386プログラマーズリファレンスマニュアル(PDF)インテルコーポレーション。1986年。2.5.3.2実効アドレス計算。2018年12月28日のオリジナルからアーカイブ(PDF)2018年3月28日取得
  21. ^ abインテル®64およびIA-32アーキテクチャーソフトウェア開発者マニュアル 第1巻:基本アーキテクチャーインテルコーポレーション。2018年3月。第3章。2012年1月26日のオリジナルからアーカイブ2014年3月19日取得
  22. ^ Andriesse、Dennis(2019)。「6.5コンパイラ設定の逆アセンブルへの影響」。実用的なバイナリ分析:バイナリインストルメンテーション、分析、および逆アセンブル用の独自のLinuxツールを構築しますカリフォルニア州サンフランシスコ:No Starch Press、Inc。ISBN 978-1-59327-913-4OCLC1050453850 _
  23. ^ 「x86アセンブリへのガイド」Cs.virginia.edu。2013年9月11日。2020年3月24日のオリジナルからアーカイブ2014年2月6日取得
  24. ^ 「FSTSW / FNSTSW— x87FPUステータスワードを保存する」2022年1月25日にオリジナルからアーカイブされました2020年1月15日取得命令のFNSTSWAX形式は、主に条件分岐で使用されます。
  25. ^ Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル第1巻:基本アーキテクチャ(PDF)インテル。2013年3月。第8章。2013年4月2日のオリジナルからアーカイブ(PDF)2013年4月23日取得
  26. ^ 「インテル80287ファミリー」CPUの世界2016年8月9日にオリジナルからアーカイブされました2016年7月21日取得
  27. ^ Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル第1巻:基本アーキテクチャ(PDF)インテル。2013年3月。第9章。2013年4月2日のオリジナルからアーカイブ(PDF)2013年4月23日取得
  28. ^ Intel 64およびIA-32アーキテクチャソフトウェア開発者マニュアル第1巻:基本アーキテクチャ(PDF)インテル。2013年3月。第10章。2013年4月2日のオリジナルからアーカイブ(PDF)2013年4月23日取得
  29. ^ iAPX 286プログラマーズリファレンス(PDF)インテル。1983年。セクション1.2「動作モード」。2017年8月28日のオリジナルからアーカイブ(PDF)2014年1月27日取得
  30. ^ iAPX 286プログラマーズリファレンス(PDF)インテル。1983年。第6章「メモリ管理と仮想アドレス指定」。2017年8月28日のオリジナルからアーカイブ(PDF)2014年1月27日取得
  31. ^ 「IntelのYamhillテクノロジー:x86-64互換| Geek.com」2012年9月5日にオリジナルからアーカイブされました2008年7月18日取得
  32. ^ AMD、Inc。(2002年2月)。「付録E」(PDF)AMDAthlon™プロセッサx86コード最適化ガイド(改訂版)。p。250. 2017年4月13日のオリジナルからアーカイブ(PDF)2017年4月13日取得ページテーブルエントリのPCDビットとPWTビットで構成される2ビットのインデックスは、PAE(ページアドレス拡張)が有効になっている場合、またはPDEが大きなページを記述していない場合に、4つのPATレジスタフィールドの1つを選択するために使用されます。
  33. ^ Manek Dubash(2006年7月20日)。「IntelはItaniumを放棄しますか?」Techworld2011年2月19日にオリジナルからアーカイブされました2010年12月19日取得x86製品ラインの代わりとしてIntelによって宣伝された後、Itaniumへの期待は大幅に抑制されました。
  34. ^ 「IBMWebSphereApplication Server 64ビットパフォーマンスの謎を解き明かす」(PDF)。 IBMコーポレーション。 2007年9月6日。p。 14. 2022年1月25日のオリジナルからアーカイブ(PDF)2010年4月9日取得図5、6、および7は、32ビットバージョンのWASが、POWERおよびx86-64プラットフォームで完全なネイティブハードウェアパフォーマンスでアプリケーションを実行することも示しています。一部の64ビットプロセッサアーキテクチャとは異なり、POWERおよびx86-64ハードウェアは32ビットモードをエミュレートしません。したがって、64ビット機能の恩恵を受けないアプリケーションは、上記の64ビットプラットフォームで実行されている32ビットバージョンのWebSphereで完全なパフォーマンスで実行できます。
  35. ^ 「第2巻:システムプログラミング」(PDF)AMD64アーキテクチャプログラマーズマニュアルAMDコーポレーション。2012年9月。2014年2月22日のオリジナルからアーカイブ(PDF)2014年2月17日取得
  36. ^ Charlie Demerjian(2003年9月26日)。「IntelのPrescottがAMD64拡張機能を使用する理由」インクワイアラー2009年10月10日にオリジナルからアーカイブされました2009年10月7日取得{{cite news}}: CS1 maint: unfit URL (link)
  37. ^ アダムス、キース; オレ、アゲセン(2006年10月21〜25日)。x86仮想化のソフトウェアとハ​​ードウェアの手法の比較(PDF)プログラミング言語とオペレーティングシステムのアーキテクチャサポートに関する国際会議の議事録、米国カリフォルニア州サンノゼ、2006年。ACM1-59593-451-0/ 06/0010。2010年8月20日のオリジナルからアーカイブ(PDF)2006年12月22日取得

さらに読む

外部リンク