DOS MZ executable
拡張子 | .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方式は使用しないよう推奨した。
互換性
[編集]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などのリンカを使って作成できる。
関連項目
[編集]脚注
[編集]- ^ Inside Windows: An In-Depth Look into the Win32 Portable Executable File Format - MSDN Magazine, February 2002. "Every PE file begins with a small MS-DOS executable. ... The first bytes of a PE file begin with the traditional MS-DOS header, called an IMAGE_DOS_HEADER. The only two values of any importance are e_magic and e_lfanew. ... The e_magic field (a WORD) needs to be set to the value 0x5A4D. ... In ASCII representation, 0x5A4D is MZ, the initials of Mark Zbikowski, one of the original architects of MS-DOS."