                MINI KURS PISANIA PROGRAMW TSR W ASEMBLERZE


1. PODSTAWY JZYKOWE NASZYCH PRZYKADOWYCH PROGRAMW TSR

     Na  pocztku  zamy,  e  plik  wynikowy  naszego rezydenta nie bdzie
przekracza  64k, co umoliwi skompilowanie go do zbioru z rozszerzeniem COM.
Wszystkie podane przykady mona skompilowa po wydaniu polece:

  tasm plik.asm
  tlink /t plik.obj

     Zamiast   tasm   mona   wstawi   masm  (jeeli  kto  dysponuje  takim
asemblerem), podobnie zamiast tlink - link. W wyniku wykonania wyej podanych
komend  powinnimy  otrzyma  zbir plik.com, dysponujc wczeniej oczywicie
zbiorem  rdowym: plik.asm. Pozostae zbiory: plik.map oraz plik.obj moemy
ze  spokojem  w  sercu  skasowa  -  nie  bd  nam do niczego przydatne. Oto
przykad najprostszego programu, ktry waciwie nic nie robi poza wypisaniem
napisu na ekran (nie jest to jeszcze TSR):

----------> Obci <----------
.model tiny
.code
.386
org 100h

Start:
  mov  ah,9                  ; numer funkcji wypisujcej cig znakw
  mov  dx,offset Napis       ; adres tego cigu do rejestru DX
  int  21h                   ; teraz wywoujemy przerwanie dosowe
  mov  ax,4c00h              ; funkcja: zakocz program, 00 to kod bdu
  int  21h                   ; po tym wywoaniu ju tu nie wrcimy

Napis  db 'Pierwszy program z kursu TSRw.',13,10,'$'

end Start
----------> Obci <----------

     Wytumaczenia  wymaga  tylko  00 (w napisie: mov ax,4c00h), jest to tzw.
kod  bdu  zwracany  DOSowi  po  wyjciu  z  naszego  programu,  moliwy  do
sprawdzenia  midzy  innymi w batch'ach (.BAT). My przyjmiemy konwencj, e 0
oznacza  brak bdu, 3 - zainstalowanie si programu w pamici, 2 - usunicie
z  pamici,  a  wysze  od  3  wartoci  bd  oznacza  bd. Naley jeszcze
pamita,  aby  napis  do  wywietlenia  funkcj  9  (jak  w przykadzie) by
zakoczony  znakiem  dolara ( $ ), jest to oznaczenie koca napisu, natomiast
13  i  10  to  kody  CR  i LF - czyli przejcia kursora na pocztek nastpnej
linii.  Jak  kto  czego  wicej  nie  rozumie  to  odsyam do kursu podstaw
asemblera jako takiego.

     Pora przej do waciwego programu TSR, ktry pozostaje w pamici (albo
zostawia  swj  fragment,  dane,  itp).  Trzeba  do tego pozna funkcj, przy
pomocy  ktrej  bdzie  realizowany  powrt  do  DOSu z pozostawieniem czci
programu w pamici. Jedn z przydatnych metod jest wywoanie przerwania 27h:

Nazwa:          Koczenie programu i pozostawanie w pamici
Wywoanie:      CS - adres segmentu PSP
                DX - adres pierwszego bajtu powyej programu liczony wobec CS
Powrt:         Brak
Opis:           Przerwanie powoduje zakoczenie programu i pozostawienie go w
                pamici. Maksymalny rozmiar programu pozostawianego w pamici
                moe wynosi 64 kB.
Uwagi:          Nie naley stosowa tej funkcji do instalowania procedur
                obsugi przerwa 22h, 23h, 24h

     Z  powyszego  opisu  wida,  e do naszych potrzeb jest to przerwanie w
zupenoci wystarczajce, istnieje rwnie funkcja 31h przerwania DOSu (21h),
ktra  wykonuje  to  zadanie,  ale  o  niej  na  razie tylko powiem, e jest.
Nauczymy si j stosowa gdy zajdzie potrzeba. A oto i przykad programu TSR,
ktry   jak   narazie  ogranicza  si  do  wypisania  komunikatu  na  ekran i
pozostawienia  w pamici fragmentu z napisem. Jeszcze jedna uwaga: programy w
plikach  .COM  musz  si  uruchamia  od  adresu  100h,  dlatego  te  chcc
pozostawi   fragment   naszego   programu  w  pamici  musimy  wstawi  skok
(instrukcja  jmp)  do  procedury  instalacyjnej,  aby  tylko  niezbdne bajty
pozostay w pamici. Wyglda to mniej wicej w ten sposb:

pocztek programu (adres 100h):         skok do procedury instalacyjnej Ŀ
                                        ++++++++++                       
Blok zaznaczony plusami                 ++++++++++                       
pozostawiamy w pamici po               ++++++++++                       
powrocie do DOSu                        ++++++++++                       
                                        ++++++++++                       
procedura instalacyjna:                 zaczyna si od tego miejsca    <
                                        ----------
                                        ----------
                                        i tu si koczy

     Mam   nadziej,  e  to  w  miar  prosty  sposb  wyjaniem.  A  oto i
zapowiadany  program,  po  uruchomieniu  proponuj  sprawdzi, czy si dobrze
zainstalowa - przez wydanie polecenia mem /c /p

----------> Obci <----------
.model tiny
.code
.386
org 100h

Start:
  jmp  Instaluj

; to co wpiszemy pomidzy etykietami: Start oraz Instaluj pozostanie w
; pamici po powrocie do DOSu

  db   'To zostao w pamici i ley odogiem.'

; koniec czci rezydentnej

Instaluj:
  mov  ah,9
  mov  dx,offset Napis
  int  21h
  mov  dx,offset Instaluj    ; do DX wpisujemy adres pierwszego bajtu,
  int  27h                   ; ktry ma by zwolniony, wczeniejsze
                             ; zostaj w pamici na stae

Napis  db 'Program zainstalowany w pamici.',13,10,'$'

end Start
----------> Obci <----------

     Wystarczy  tyle  wiadomoci  jak  na  pocztek.  W  drugiej czci kursu
dowiemy  si, jak sprawi, by TSR nie lea odogiem w pamici, ale wykonywa
jak  przydatn  czynno  (np.  co wywietla w rogu ekranu) oraz co z nim
zrobi, jak ju si nam znudzi (czyli jak si odinstalowuje programy TSR).
