be7 TITLE TSR_Dem1.ASM ;-------------------------------------------------------------------- CSEG SEGMENT ASSUME CS:CSEG,DS:CSEG ORG 100H Start: jmp install_TSR ;================================ Org_Rutin DD ? ;================================ ;------------------------------------------------------------------- Start_TSR: ;H„r startar den programkod som ;kommer att bli minnesresident Our_Layer PROC FAR ASSUME CS:CSEG,DS:CSEG ;M†ste deklareras i denna del som ;f”rblir i minnet push ds ;DS-registrets v„rde sparas f”r ;att †terh„mtas vid †terhoppet push cs ;Under arbetet i 'Our_Layer' m†ste pop ds ;DS ha samma v„rde som CS annars ;kommer l„sning/skrivning fr†n/till ;minne att g† till fel datasegment sti ;F”r ordningens skull f”r att ;m”jligg”ra nytt interrupt pushf ;ett INT simuleras call Org_Rutin ;Originalrutinen anropas ;--------------------------------------------------------------------- ; Till denna punkt †terkommer vi sedan originalrutinen exekverats ;--------------------------------------------------------------------- pop ds ;Det v„rde DS hade vid inhopp ;†terh„mtas iret ;Kontrollen tillbaka till ;anropande program (DOS) Our_Layer ENDP ;---------------------------------------------------------------------- End_TSR: ;Minnesresident del slut ;======================================================================= Install_TSR: ASSUME CS:CSEG,DS:CSEG push cs ;DS m†ste peka p† r„tt segment pop ds ;d† vi skall ladda om vektorn mov al,1ch ;H„mta vektorn till INT 1ch mov ah,35h int 21h mov Org_Rutin,BX ;Org_Rutinens OFFSET h„mtas mov Org_Rutin[2],es ;Segment sparas mov dx,OFFSET Start_TSR ;Peka p† v†rt skikt mov al,1ch mov ah,25h ;Ladda om vektor int 21h mov dx,OFFSET End_TSR ;Peka p† slutet p† den del som ;skall bli minnesresident int 27h ;G”r minnesresident ;------------------------------------------------------------------------- CSEG ENDS END Start ;-------------------------------------------------------------------------- . 0