プロテクトモード
286に先立つ Intel 8086 での本来の設計では、メモリアクセス用アドレスバスは20ビット幅だった。これにより 2 バイト、すなわち1メガバイトのメモリにアクセス可能である。当時は1メガバイトといえばかなり大容量のメモリという感覚だったので、IBM PC の設計者らは先頭640キロバイトをアプリケーションとオペレーティングシステムで使用し、残る384キロバイトをBIOS (Basic Input/Output System) や周辺機器で使用する設計にした。
元々、8086においては、セグメント方式の仮想記憶を意識したセグメントレジスタがあり、コード、データおよびスタックの量がそれぞれ64キロバイト以内であれば、ロードされた物理アドレスを意識すること無く、タスクの実行が可能であったが、論理アドレスから物理アドレスへの変換は単純にセグメントレジスタを4ビットシフトして足すと言うもので、タスク間の保護もなかった。
メモリ価格が低下し、メモリ使用量が増えてくると、1MBという制約が大きな問題となってきた。インテルはこの制限に対処するためもあって 286 をリリースした。
386のプロテクトモードでは、インテルが仮想8086モード (virtual 8086 mode) と呼ぶものを提供している。仮想86モードは8086向けのコードを修正することなく、プロテクトモードのOS上のタスクの1つとして安全に動作させることができる。ただし完全な後方互換性があるわけではない。セグメント操作や特権命令、ハードウェアへの直接アクセス、自己書き換えコードなどを使っているプログラムの場合、例外が発生するのでOSがそれに対処しなければならない。さらに仮想86モードで動作するアプリケーションが入出力 (I/O) 関連命令を使用するとトラップ処理が行われるので、性能が低下する。そういった制約があるため、8086上のプログラムの一部は仮想86モードでは動作できない。結果としてシステムソフトウェアは、古いソフトウェアを扱う際にセキュリティか互換性のいずれかを犠牲にすることになった。例えば Windows NT では互換性を犠牲にし、行儀の悪いDOSアプリケーションをサポートしなくなった。
ディスクリプタテーブルのエントリ内のセグメントアドレスは24ビットであり、リアルモードとは異なり任意のアドレスからセグメントを開始できるようになった。リミット値は16ビット幅であり、セグメントの大きさは1バイトから 2 バイトまで指定可能である。これに基づいて計算したリニアアドレスは物理メモリアドレスとなる。