Списки в оперативній пам'яті, операції над списками. Керування програмами. Керування таймером. Системні керуючі блоки. Управління пам’яттю: таблиця векторів переривань, страница 16

           db   'на выполнение ваш .com файл снова, ',10,13

           db   'указав в командной строке после имени файла '

           db   10,13,'параметр  /d ',10,13

           db   10,13,'( Снова вернитесь в систему, ',10,13

           db   'нажав любую клавишу )',10,13,'$'

text_3     db   ' Вашу резидентную программу сейчас '

           db   'удалять нельзя',10,13,'$'

text_4     db   10,13,'Вы удалили вашу резидентную программу '

           db   'из памяти ',10,13

           db   10,13,'( Вернитесь в систему, нажав '

           db   'любую клавишу )',10,13,'$'

err_msg    db   10,13,'             Ошибка'

           db   ,10,13,'    ( Нажмите любую клавишу )'

           db   10,13,'$'

 ;----------------------------------------

res_is     db     'o'

pause_const   equ   0777h                         ; 19

proc pause far

     push  cx

     mov   cx,pause_const

  ploop0:

     push  cx

  ploop1:

     loop  ploop1

     pop   cx

     loop  ploop0

     pop   cx

     ret

endp pause

border     proc   far

          sti

          push   ax bx cx dx si di ds es


          pushf

          call   old_4h  

          mov    cx, 11

lable:

          mov    dx,3dah

          in     al,dx

          mov    al,11h   

          mov    dx,3c0h

          out    dx,al

          mov    al,cl 

          out    dx,al

          mov    al,20h   

          out    dx,al    

          call   pause

          loop   lable

          mov    dx,3dah

          in     al,dx

          mov    al,11h   

          mov    dx,3c0h

          out    dx,al

          mov    al,cl    

          out    dx,al

          mov    al,20h   

          out    dx,al    

q:

          POP    es ds di si dx cx bx ax

          iret

border     endp            

;-------------------------------------

init:

          push   es

          mov    ah,35h

          mov    al,04h

          int    21h      

          mov    al,byte ptr es:[bx-1]

          cmp    byte ptr es:res_is,al

          jz     already

          pop    es

          lea    dx,border

          mov    word ptr adr_res,dx

          mov    word ptr adr_res+2,cs

; Перепрограммируем вектор 4h

          assume ds:int_tab

          push   ds

          mov    ax,int_tab

          mov    ds,ax

          cli

; В качестве "старого" запоминаем текущее

          mov    ax,word ptr vect_4h

          mov    word ptr old_4h,ax

          mov    ax,word ptr vect_4h+2

          mov    word ptr old_4h+2,AX

          mov    word ptr vect_4h,offset border

          mov    word ptr vect_4h+2,cs

          sti

          pop    ds

          mov    ah,09h

          lea    dx,text_1

          int    21h

          mov    ah,08h

          int    21h

          mov    dx,offset init

          inc    dx     

          int    27h    

;======================================

already:

          pop    es

          xor    ax,ax           

          mov    al,es:80h       

          mov    si,ax           

          mov    al,es:[80h+si]

          cmp    al,'d'

          je     delet           

          jmp    povtor          

delet:

          push   es

          mov    ah,35h

          mov    al,04h

          int    21h         

          mov    ax,es

          push   ds

          lds    dx,es:adr_res 

          mov    cx,ds

          pop    ds

          cmp    dx,bx

          jnz    no_delete

          cmp    ax,cx

          jnz    no_delete

 ;-------------------------------------

          cli

          push   ds

          mov    ah,25h

          mov    al,04h

          lds    dx,es:old_4h 

          int    21h          

          pop    ds

          sti

          mov    ah,49h

          int    21h

          jc     err_49h

          pop    es

          mov    ah,09h

          lea    dx,text_4

          int    21h

          mov    ah,08h

         int    21h

         jmp    quit

;======================================

  povtor:

           mov    ah,09h

           lea    dx,text_2

           int    21h

           mov    ah,08h