![]() |
拡張子 | .exe |
---|---|
MIMEタイプ | application/x-dosexec、application/x-msdos-program、application/x-ms-dos-executable |
マジック ナンバー | MZ or ZM |
種別 | バイナリ, 実行可能 |
拡張 | New Executable Linear Executable Portable Executable |
DOS MZ実行可能形式は、DOSのEXEファイルに使用される実行可能形式ファイルである。
この形式は、ファイルの先頭にあるASCII文字列「MZ」(16進数 :4D 5A)(「 マジックナンバー」)で識別できる。「MZ」は、MS-DOSの主要な開発者の1人であるMark Zbikowskiの頭文字である[1]。
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方式は使用しないよう推奨した。