プログラムの終了は今までにも何度も出てきた。これから紹介するシステムコールは
プログラムを終了し、使用していたメモリーを解放するものである。プログラムが
「AH = 48H」を使用して割り当てたメモリも
解放される。ただし、古いMS-DOSでは解放されないらしい。
また、使用していたファイルはクローズされないため、もしクローズしないで
プログラムを終了した場合は、完全にセーブできていなかったり、他のプログラムによって
悪戯されたりするので、必ずクローズしてから終了すべきである。
プログラム終了
AH = 4Ch
AL = リターンコード
INT 21h
戻り値:なし
|
今までは
というように、ALレジスタに00とか、数字も入れてきた。ALレジスタは
リターンコードというもので、詳細は後述する。
また、Ver2.0以前のMS-DOSのCOMファイルでは他のシステムコールが用意されていた。
COMファイルのプログラム終了
CS = PSPの先頭アドレス(セグメント)
INT 20h
戻り値:なし
プログラム終了
AH = 00h
INT 21h
戻り値:なし
|
上記の2つのシステムコールは、Ver2.0以前のもので、互換性を保つためそれ以降の
MS-DOSでも使用できるが、使用すべきではない。特に前者は「INT 21H」
ではなくて「INT 20h」を使用しているところがポイントで、他のレジスタ
は使用しない(CSは除く)ので、コンパイルしたプログラムが小さくなる。
また、MS-DOSでは保証はしていないが、プログラムが実行された直後のSS:SP
は0000Hを指しているため、単に「RET」命令を実行すると、CS:0000H
にジャンプし、そこはPSPの先頭アドレスであり、そこには「INT 20H」という
命令が格納されているため、COMプログラムが終了されるという、ちょっと行儀が悪いが
チップテクニックとして使用される。(推奨はしない)