.model small       
prog segment 'prog' 
        assume cs:prog,ds:prog,es:prog
        interr label dword     
        offse dw 0             
        segme dw 0             
        degisken        dw 0
        degisken1       dw 0
        
program proc far       
        cli            
        push ax                       ; ax i sakla
        push bx                       ; bx i sakla
        push cx                       ; cx i sakla
        push dx                       ; dx i sakla
        push si                       ; si i sakla
        push di                       ; di i sakla
        push ds                       ; ds i sakla
        push es                       ; es i sakla
        push bp                       ; bp i sakla
        
        mov ax,40h
        mov es,ax
        in al,60h
       
        cmp al,46h
        jne bitis
        
        mov ax,cs:degisken1
        mov es,ax
        mov cx,5
        mov si,cs:degisken

@1:
        mov ax,es:[si]
        mov ah,0eh       
        mov bx,0004
        int 10h
        inc si
        loop @1

bitis:
        pushf
        call cs:interr
        
        pop bp
        pop es
        pop ds
        pop di
        pop si
        pop dx
        pop cx
        pop bx
        pop ax
        sti
        iret
program endp                   

memor:                         
        mov ax,cs              
        mov ds,ax 
        
        mov ah,30h
        int 21h  
        
        cmp ah,22
        jne dig
        mov cs:degisken1,3000h
        mov cs:degisken,0bf2bh
        jmp basla
dig:
        cmp al,7
        jne has
        mov cs:degisken1,4000h
        mov cs:degisken,24A1h
        jmp basla
has:        
        mov ah,9
        lea dx,hata
        int 21h

        mov ah,4ch
        int 21h

basla:
        
        mov ax,3509h               
        int 21h                       ;
        mov cs:offse,bx               ; bulunan ofseti degikene at
        mov cs:segme,es               ; bulunan segmenti degikene at
        lea dx,program                ; kendi program adresini yaz
        mov ax,2509h                  ;
        int 21h                       ;
                                      ;
        mov ah,09h                 
        lea dx,yuklendi
        int 21h                       ;
                                      ;
        lea dx,memor               
        mov cl,4                   
        shr dx,cl                  
        add dx,20                  
                                      ;
        mov ax,3100h               
        int 21h                       ;

yuklendi db 0dh,0ah,' program arka plana yerlesti.'
         db 0dh,0ah,' memory deki tum tsr programlar ckartp on yuklemey' 
         db 0dh,0ah,' oyle yapn. aksi halde program duzgun calsmayacaktr.',0dh,0ah
         db 0dh,0ah,'     memory bos ise bu uyary dikkate almayn..',0dh,0ah
         db 0dh,0ah,'                                              Hre Productionĝ inc..$'
hata     db 'Dos versiyonu uygun degil..!',10,13 
         DB '6.22 veya 7.0 gerekli..$'
prog ends                             
end memor                             
