#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)の解析本はこいつだけですが、コンパクトな 割に、知りたい事はほとんど載ってるので、結構おすすめです。 裏技的な事に付いては、全然載ってないんですが・・・