DOS MZ executable

DOS MZ実行可能形式は、DOSのEXEファイルに使用される実行可能形式ファイルである。  

この形式は、ファイルの先頭にあるASCII文字列「MZ」（16進数 ：4D 5A）（「 マジックナンバー」）で識別できる。「MZ」は、MS-DOSの主要な開発者の1人であるMark Zbikowskiの頭文字である。  

MZ DOS実行可能ファイルは、 COM実行可能形式よりも新しく形式が異なる。 DOS実行可能ヘッダーには、複数のセグメントを任意のメモリアドレスにロードできるリロケーション情報が含まれ、64キロバイトを超える実行可能ファイルをサポートする。ただし、この形式では依然として使用可能メモリ量が制限される。 この制限は、後にDOSエクステンダで回避されることになる。 

DOSで実行されるEXEプログラムの環境に関する情報は、プログラムセグメントプレフィクス (PSP) に格納されている。 

EXEファイルには、通常、コード、データ、およびスタック用の個別のセグメントがある。 プログラムの実行はコードセグメントのアドレス0から始まり、スタックポインターレジスタはヘッダー情報に含まれる値に設定される（したがって、ヘッダーが512バイトスタックを指定している場合、スタックポインターは200hに設定される）。 個別のスタックセグメントを使用せずに、必要に応じて単純にスタックのコードセグメントを使用することもできる。 

DS（データセグメント）レジスタには通常、CS（コードセグメント）レジスタと同じ値が含まれており、EXEファイルが初期化されると、データセグメントの実際のセグメントアドレスはロードされない。プログラマーが自分で設定する必要があり、通常は次の手順で行う。   MOV AX, @DATA
  MOV DS, AX 元のDOS 1.x APIでは、プログラム終了時にPSPのあるセグメントを指すDSレジスタも必要であった。これは、次の手順で実行された。   PUSH DS
  XOR AX, AX
  PUSH AX その後、プログラムの終了はRETF命令によって実行され、スタックからPSPを使用して元のセグメントアドレスを取得し、INT 20h命令を含むアドレス0にジャンプする。 

DOS 2.x APIでは、プログラムの開始時にPSPセグメントアドレスを保存する必要のないINT 21h Function 4Chという新しいプログラム終了関数を導入し、マイクロソフトは古いDOS 1.x方式は使用しないよう推奨した。

互換性 
MZ DOS実行ファイルは、DOSおよびWindows 9xベースのオペレーティングシステムから実行できる。 32ビットWindows NTベースのオペレーティングシステムでは、組み込みの仮想DOSマシンで実行できる（ただし、一部のグラフィックモードはサポートされていない）。 64ビットバージョンのWindowsでは実行できない。 これらの実行可能ファイルは、 DOSBox 、 DOSEMU、Wine、Cygwin を使っても実行できる。 

MZ DOS実行ファイルは、 Digital Mars Optlink、MSリンカー、VALXまたはOpen WatcomのWLINK、FASMなどのリンカを使って作成できる。

関連項目 
 DOS 
 DOSエクステンダ 
 実行可能ファイルフォーマットの比較 
 DOS API 
 実行ファイル圧縮

脚注

外部リンク 
 MZ DOS EXEファイル形式 
 EXE DOSスタブの詳細 

ファイルフォーマット
プログラミング言語の実装