IA-32

IA-32 (「 Intel Architecture, 32-bit 」の略で、一般的にi386 [ 1 ] [ 2 ]と呼ばれる)[ 3 ]は、 x86命令セットアーキテクチャ32ビットバージョンであり、Intelによって設計され、1985年に80386マイクロプロセッサに初めて実装されました。IA -32は、32ビットコンピューティングをサポートする最初のx86の形態です。 [ 4 ]そのため、「IA-32」という用語は、32ビットコンピューティングをサポートするすべてのx86バージョンを指す換喩として使用されることがあります。 [ 5 ] [ 6 ]

様々なプログラミング言語命令において、IA-32は依然として「i386」アーキテクチャと呼ばれることがあります。また、IA-32 ISAの特定のイテレーションは、それぞれ80486P5P6マイクロアーキテクチャが提供する命令スーパーセットを指して、 i486i586i686と呼ばれることもあります。これらのアップデートでは、基本IA-32命令セットに加えて、浮動小数点機能MMX拡張など、数多くの追加機能が提供されました。

歴史的に、Intel は IA-32 プロセッサの最大の製造業者であり、第 2 位のサプライヤーはAMDでした。1990 年代には、VIATransmetaおよびその他のチップ製造業者も IA-32 互換プロセッサ ( WinChipなど) を製造しました。現代でも、Intel は2019 年までIntel Quarkマイクロコントローラプラットフォームで IA-32 プロセッサを製造していましたが、2000 年代以降、製造業者の大多数 (Intel を含む) は、x86 の 64 ビット版であるx86-64に基づく CPU の実装にほぼ完全に移行しました。x86-64 は、仕様上、下位互換性のために IA-32 ISA で動作するレガシー動作モードを提供しています。 x86-64が現在普及しているにもかかわらず、今日では、Microsoft Windows ( Windows 10まで)[ 7 ] 、 Windows Server ( Windows Server 2008まで)[ 8 ] 、 Debian Linuxディストリビューションなど、多くの最新のオペレーティングシステムのIA-32保護モードバージョンがまだ維持されています。[ 9 ] IA-32という名前にもかかわらず(そして潜在的な混乱を引き起こしますが)、AMDから始まったx86の64ビット進化は「IA-64」として知られておらず、その名前は代わりにIntelの廃止されたItaniumアーキテクチャに属しています。

建築上の特徴

IA-32の主な特徴は、32ビット汎用プロセッサレジスタ(EAXやEBXなど)、32ビット整数算術演算および論理演算、保護モードにおけるセグメント内32ビットオフセット、そしてセグメントアドレスを32ビットリニアアドレスに変換する機能です。設計者はこの機会を利用して、他にも改良を加えました。16ビットの286命令セット と比較して、最も重要な変更点は次のとおりです。

32ビット整数機能
すべての汎用レジスタ(GPR)は16ビットから32ビットに拡張され 、算術演算、論理演算、メモリからレジスタへの演算、レジスタからメモリへの演算など、すべての演算を32ビット整数に対して直接実行できます。スタックへのプッシュとポップはデフォルトで4バイトのストライドで実行され、セグメント化されていないポインタは4バイト幅です。
より一般的なアドレッシングモード
メモリ参照において、任意のGPRをベースレジスタとして、またESP以外の任意のGPRをインデックスレジスタとして使用できます。インデックスレジスタの値は、ベースレジスタの値とディスプレースメントに加算される前に、1、2、4、または8倍にすることができます。
追加のセグメントレジスタ
2 つの追加セグメント レジスタ (FS と GS) が提供されます。
より大きな仮想アドレス空間
IA-32アーキテクチャは、16ビットのセグメント番号とセグメント内の32ビットのオフセットを持つ48ビットのセグメントアドレス形式を定義します。セグメントアドレスは32ビットのリニアアドレスにマッピングされます。
要求ページング
32ビットのリニアアドレスは物理アドレスではなく仮想アドレスであり、ページテーブル介して物理アドレスに変換されます。80386、80486 、およびオリジナルのPentiumプロセッサでは、物理アドレスは32ビットでした。Pentium Pro以降のプロセッサでは、物理アドレス拡張により36ビットの物理アドレスが可能になりましたが、リニアアドレスのサイズは依然として32ビットでした。

動作モード

動作モード 必要な オペレーティング システム実行されるコードの種類 デフォルトのアドレスサイズ デフォルトのオペランドサイズ 典型的なGPR
保護モード32ビットオペレーティングシステムまたはブートローダー 32ビット保護モードコード 32ビット 32ビット 32ビット
16ビットの保護モードのオペレーティングシステムまたはブートローダー、または32ビットのブートローダー 16ビット保護モードコード 16ビット 16ビット 16ビットまたは32ビット
仮想8086モード16 ビットまたは 32 ビットの保護モード オペレーティング システム 16ビットリアルモードコード 16ビット 16ビット 16ビットまたは32ビット
リアルモード16ビットリアルモードオペレーティングシステムまたはブートローダー、または32ビットブートローダー 16ビットリアルモードコード 16ビット 16ビット 16ビットまたは32ビット
アンリアルモード16ビットリアルモードオペレーティングシステムまたはブートローダー、または32ビットブートローダー 16ビットリアルモードコード 32ビット 16ビット 16ビットまたは32ビット

参照

参考文献

  1. ^ "ditto(1) Mac OS X マニュアルページ" . BSD 一般コマンドマニュアル. Apple . 2008年12月19日. 2012年6月2日時点のオリジナルからのアーカイブ. 2013年8月3日閲覧.指定されたアーキテクチャへの Thin Universal バイナリは [...] "i386", "x86_64" などと指定する必要があります。
  2. ^ 「追加の定義済みマクロ」 . software.intel.com . Intel . 2021年2月15日時点のオリジナルよりアーカイブ。 2020年11月25日閲覧
  3. ^ Kemp, Steve. 「64ビットDebian GNU/Linuxで32ビットアプリケーションを実行する」 Debian管理. 2013年9月16日時点のオリジナルよりアーカイブ。 2013年8月31日閲覧
  4. ^ 「Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル」 . Intel Corporation . 2014年9月. p. 31. 2012年1月26日時点のオリジナルよりアーカイブ2014年12月19日閲覧。Intel386プロセッサは、IA-32アーキテクチャファミリにおける最初の32ビットプロセッサでした。このプロセッサは、オペランドの保持とアドレス指定の両方に使用できる32ビットレジスタを導入しました。
  5. ^ Green, Ronald W. (2009年5月5日). 「IA-32、Intel 64、IA-64アーキテクチャとはどういう意味か?」 . software.intel.com . Intel . 2014年12月19日時点のオリジナルよりアーカイブ。 2014年12月19日閲覧
  6. ^ 「サポートされているハードウェア」 . Ubuntuヘルプ. Canonical . 2014年12月19日時点のオリジナルよりアーカイブ。 2013年8月31日閲覧
  7. ^ “Windows 10 システム要件と仕様 | Microsoft” . www.microsoft.com . 2018年5月1日時点のオリジナルよりアーカイブ2018年8月20日閲覧。
  8. ^スコット・M・フルトンIII(2007年5月16日)「Windows Server 2008『最後の32ビットオペレーティングシステム』」" . BetaNews . 2023年4月1日時点のオリジナルよりアーカイブ。 2023年4月1日閲覧
  9. ^ “Debian GNU/Linux on x86 Machines” . 2019年4月28日時点のオリジナルよりアーカイブ2020年8月20日閲覧。