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などのリンカを使って作成できる。