#99 Article 854 Posted at 1994/05/17 00:17:12 by 夢中ゆわ (MAP2717) [STAY.98]
Subject: Re: 常駐モノの管理? /853
機械語の偉い方々がお見えにならないので拙宅がなんか書きます(^^;) >・常駐する際にメモリブロックのオーナー名のセット これはオーナーIDの事ですか? オーナーIDは、メモリをDOSが確保した時に、自動的に設定される (そのメモリブロックを要求したプロセスのPSPアドレス(セグメント)) ので、普通の常駐だけなら勝手にいじらない方がいいかと思います(^^;) オーナーIDはMCBの+1,+2バイト目になります。 >・常駐解除の手段 私は、DOSファンクションの49Hを使っています。 MOV AH,49H MOV ES,XXXX ←解放するメモリブロックの先頭セグメントアドレス INT 21H JC ERROR ここでESは、メモリブロックのMCBじゃ無くてメモリ本体のセグメント値です。 普通はファンクション48Hで確保したメモリのセグメント値を代入します。 COMの常駐物なら、常駐時のDSあたりを覚えておけばいいのかな? EXEならファンクション62HでPSPセグメント値を覚えておけばいいのかな? MOV AX,62H INT 21H BX→PSPセグメントアドレス >・環境領域の解放手段 環境領域のセグメントアドレスは、PSPの002CH~002DHにありますので、 後は、上と同じくファンクション49Hを使って解放します。 ……………………………… と、ここまで書いていて、MCBをダンプして眺めてたら 未使用のハズの+5バイト目以降(+8~+F)に何やら怪しい文字列が…(^^;) こ、これが、オーナー名っちゅーやつでしょうか? 未使用領域だから、勝手に操作してもいいとは思いますが…(^^;) MCBの+8~+Fの8バイトです。 #MAP2717 夢中ゆわ PS: MCBとかPSPを知ってらっしゃるものとして話を進めてしまいましたが… この辺の説明が入用でしたら又言って下さい。 MCB:メモリを管理する16バイトのブロックで、本体ブロックの16バイト前に ある(そのうち管理用に5バイトを使用) PSP:プログラムが実行するのに必要な情報をDOSから受け取る為の領域で COM形式の場合、実行ファイルの先頭256バイトがPSP。 EXEの場合は、きっとファンクション62Hで調べると思う。