EMM386

EMM386 は、マイクロソフトのMS-DOSや類似の環境（デジタルリサーチのDR-DOSなど）で拡張メモリを使うためのもので、Intel 80386 CPU 上で XMS を使って拡張メモリを生成する。

この技法は1987年にコンパックが開発した CEMM が起源と思われる。マイクロソフト版は1988年に Windows/386 2.1 に組み込まれたのが最初で、1989年には MS-DOS 4.01 上の独立した EMM386.SYS となった。より柔軟なバージョンの EMM386.EXE は1991年の MS-DOS 5.0 で登場した。

EMM386.EXEは他のメモリマネージャと違い、動作にはを必要とする。先に常駐するHIMEM.SYSがHMAとXMSを担当し、さらにEMSを提供するドライバとして別途EMM.SYSが用意されていたが、80386以降のプロセッサではEMM.SYSの代わりにEMM386が常駐することにより、より使い勝手の良い仮想EMSとUMB（後述）が提供される。EMM386の常駐後は、プロセッサがプロテクトモードであることを示すPEビットが立ち、DOSと言えど純粋なリアルモードではなくなる。そしてEMM386はリングプロテクションのリング0で動作し、ハードウエアに直接アクセスする命令などが一部制限されるようになる。

他の拡張メモリマネージャと同様、EMM386 は仮想86モードを使っている。ただし仮想86モードを示すフラグレジスタのVMビットは0を返す。Windows ではプロテクトモードのカーネルがその役割を果たすので、386エンハンストモードでのWindowsセッションの間、EMM386は一時的にシャットダウンされる。

EMM386.EXE は Upper Memory Block (UMB) 内の未使用ブロックにメモリをマッピングでき、デバイスドライバやTSRをそこにロードし、コンベンショナルメモリの使用を節約する。

関連項目 
Upper Memory Area (UMA)あるいはUpper Memory Blockとも
XMS
EMS

X86アーキテクチャ
メモリ管理
DOSの外部コマンド
Windowsのソフトウェア