Standort: Alexander Foken > Projekte > DOS > Environment freigeben
FreeMyEnv: mov es,cs:[002Ch] ; ES auf's Environment
mov ah,49h ; DOS: Free Memory Block in ES
int 21h
jnc @@FreeOK
;
; Es hat nicht geklappt:
; AX=7 -> Speicherverwaltung zerstört
; AX=9 -> Ungültiger Block - schon freigegeben ?
;
@@FreeOK: ; alles klar, weiter geht's
PrefixSeg dw ?
ExeStart: ; ggf. DS initialisieren
;
mov PrefixSeg,es ; PSP sichern
;
; weitere Initialisierungen
FreeMyEnv: mov es,PrefixSeg ; ES auf's PSP, um Environment zu finden
mov es,es:[002Ch] ; ES auf's Environment
mov ah,49h ; DOS: Free Memory Block in ES
int 21h
jnc @@FreeOK
;
; Es hat nicht geklappt:
; AX=7 -> Speicherverwaltung zerstört
; AX=9 -> Ungültiger Block - schon freigegeben ?
;
@@FreeOK: ; alles klar, weiter geht's
function FreeMyEnv : word; assembler; { 0 = ok, sonst Fehlercode }
asm
mov es,PrefixSeg { in Unit System definiert und initialisiert }
mov es,es:[002Ch] { ES auf's Environment }
mov ah,49h { DOS: Free Memory Block in ES }
int 21h
jc @@ende
xor ax,ax
@@ende:
end;
function FreeMyEnv : word; inline (
$8E/$06/PrefixSeg/ { mov es,PrefixSeg ; in Unit System definiert und initialisiert }
$26/$8E/$06/$2C/$00/ { mov es,es:[002Ch] ; ES auf's Environment }
$B4/$49/ { mov ah,49h ; DOS: Free Memory Block in ES }
$CD/$21/ { int 21h }
$72/$02/ { jc @@ende }
$31/$C0); { xor ax,ax }
{ @@ende: }
| Copyright © Alexander Foken | 2002-11-10 21:21 |