#99 Article 798 Posted at 1993/12/02 21:51:20 by Mai (MAP2260) [ASM]

Subject: Re: メモリのいつでもあいてる場所。 /797

えーと、DOSファンクションコールの中に、”パラグラフ(16バイト)単位で
メモリを割り当てる”みたいなのがあったはずです。
・・・というわけで、久々に本棚から技術評論社の”MS-DOSデータ活用
ハンドブック”を取って来ました。
DOSファンクションコール(INT21H)のAH=48Hですね。
BXに割り当てるべきメモリの大きさを入れて呼ぶと、ちゃんと割り当てられたら
CF=0で、AXに割り当てられた先頭のセグメントが入って来ます。
割り当てられない時は、CF=1で、AXがエラーコード、BXが割り当て可能な
メモリサイズの上限(パラグラフ)です。
エラーコードは、AX=07Hが、MCBが破壊されてる、AX=08Hが
十分な空きメモリがない、です。
AX=08Hってのは、よく起こりそうなので、ちゃんとチェックした方がいいですね。
で、これでアロケートされたメモリの開放が、AX=49Hのファンクションです。
入力は、ESに開放するメモリのセグメントだそうです。
出力は、CF=0なら正常開放。
CF=1ならエラーで、AX=07HだとMCBの破壊、AX=09Hだと、
指定されたセグメントがメモリアロケーションで割り当てられた物ではない、だ
そうです。
実際に使う時には、AX=48Hを呼んだ後に、割り当てられたセグメントを
どこかに覚えさせといて、AH=49Hを使う時にひっぱりだしてくればいいのかな?

なお、本が古いので、以上はDOS3.3を基準にしてます。
もっとも、このファンクションコールは、バージョンが上がってるDOSでも
ちゃんとサポートされてる可能性が高いので、DOS5.0でも大丈夫だとは
思いますが・・・

Mai

P.S.うちにあるDOS(+98)の解析本はこいつだけですが、コンパクトな
    割に、知りたい事はほとんど載ってるので、結構おすすめです。
    裏技的な事に付いては、全然載ってないんですが・・・