MINI KURS PISANIA PROGRAMÓW TSR W ASEMBLERZE
1. PODSTAWY JĘZYKOWE NASZYCH PRZYKŁADOWYCH PROGRAMÓW TSR
Na początku załóżmy, że plik wynikowy naszego rezydenta nie będzie
przekraczał 64k, co umożliwi skompilowanie go do zbioru z rozszerzeniem COM.
Wszystkie podane przykłady można skompilować po wydaniu poleceń:
tasm plik.asm
tlink /t plik.obj
Zamiast tasm można wstawić masm (jeżeli ktoś dysponuje takim
asemblerem), podobnie zamiast tlink - link. W wyniku wykonania wyżej podanych
komend powinniśmy otrzymać zbiór plik.com, dysponując wcześniej oczywiście
zbiorem źródłowym: plik.asm. Pozostałe zbiory: plik.map oraz plik.obj możemy
ze spokojem w sercu skasować - nie będą nam do niczego przydatne. Oto
przykład najprostszego programu, który właściwie 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 wypisującej ciąg znaków
mov dx,offset Napis ; adres tego ciągu do rejestru DX
int 21h ; teraz wywołujemy przerwanie dosowe
mov ax,4c00h ; funkcja: zakończ program, 00 to kod błędu
int 21h ; po tym wywołaniu już tu nie wrócimy
Napis db 'Pierwszy program z kursu TSRów.',13,10,'$'
end Start
----------> Obciąć <----------
Wytłumaczenia wymaga tylko 00 (w napisie: mov ax,4c00h), jest to tzw.
kod błędu zwracany DOSowi po wyjściu z naszego programu, możliwy do
sprawdzenia między innymi w batch'ach (.BAT). My przyjmiemy konwencję, że 0
oznacza brak błędu, 3 - zainstalowanie się programu w pamięci, 2 - usunięcie
z pamięci, a wyższe od 3 wartości będą oznaczać błąd. Należy jeszcze
pamiętać, aby napis do wyświetlenia funkcją 9 (jak w przykładzie) był
zakończony znakiem dolara ( $ ), jest to oznaczenie końca napisu, natomiast
13 i 10 to kody CR i LF - czyli przejścia kursora na początek następnej
linii. Jak ktoś czegoś więcej nie rozumie to odsyłam do kursu podstaw
asemblera jako takiego.
Pora przejść do właściwego programu TSR, który pozostaje w pamięci (albo
zostawia swój fragment, dane, itp). Trzeba do tego poznać funkcję, przy
pomocy której będzie realizowany powrót do DOSu z pozostawieniem części
programu w pamięci. Jedną z przydatnych metod jest wywołanie przerwania 27h:
Nazwa: Kończenie programu i pozostawanie w pamięci
Wywołanie: CS - adres segmentu PSP
DX - adres pierwszego bajtu powyżej programu liczony wobec CS
Powrót: Brak
Opis: Przerwanie powoduje zakończenie programu i pozostawienie go w
pamięci. Maksymalny rozmiar programu pozostawianego w pamięci
może wynosić 64 kB.
Uwagi: Nie należy stosować tej funkcji do instalowania procedur
obsługi przerwań 22h, 23h, 24h
Z powyższego opisu widać, że do naszych potrzeb jest to przerwanie w
zupełności wystarczające, istnieje również funkcja 31h przerwania DOSu (21h),
która wykonuje to zadanie, ale o niej na razie tylko powiem, że jest.
Nauczymy się ją stosować gdy zajdzie potrzeba. A oto i przykład programu TSR,
który jak narazie ogranicza się do wypisania komunikatu na ekran i
pozostawienia w pamięci fragmentu z napisem. Jeszcze jedna uwaga: programy w
plikach .COM muszą się uruchamiać od adresu 100h, dlatego też chcąc
pozostawić fragment naszego programu w pamięci musimy wstawić skok
(instrukcja jmp) do procedury instalacyjnej, aby tylko niezbędne bajty
pozostały w pamięci. Wygląda to mniej więcej w ten sposób:
początek programu (adres 100h): skok do procedury instalacyjnej ż
++++++++++ ł
Blok zaznaczony plusami ++++++++++ ł
pozostawiamy w pamięci po ++++++++++ ł
powrocie do DOSu ++++++++++ ł
++++++++++ ł
procedura instalacyjna: zaczyna się od tego miejsca <Ł
----------
----------
i tu się kończy
Mam nadzieję, że to w miarę prosty sposób wyjaśniłem. 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 pomiędzy etykietami: Start oraz Instaluj pozostanie w
; pamięci po powrocie do DOSu
db 'To zostało w pamięci i leży odłogiem.'
; koniec części rezydentnej
Instaluj:
mov ah,9
mov dx,offset Napis
int 21h
mov dx,offset Instaluj ; do DX wpisujemy adres pierwszego bajtu,
int 27h ; który ma być zwolniony, wcześniejsze
; zostają w pamięci na stałe
Napis db 'Program zainstalowany w pamięci.',13,10,'$'
end Start
----------> Obciąć <----------
Wystarczy tyle wiadomości jak na początek. W drugiej części kursu
dowiemy się, jak sprawić, by TSR nie leżał odłogiem w pamięci, ale wykonywał
jakąś przydatną czynność (np. coś wyświetlał w rogu ekranu) oraz co z nim
zrobić, jak już się nam znudzi (czyli jak się odinstalowuje programy TSR).
Wyszukiwarka
Podobne podstrony:
Asembler w TSR KURS2Asembler w TSR KURS0Asembler w TSR KURS5Asembler w TSR KURS3Asembler w TSR KURS4Asembler w TSR SPIS TREAsembler linuxTASM operacje asembler21 Pisanie i uruchamianie programów w asemblerzeProcedury arytmetyczne w języku Asembler ST7OAK W11 Asembler PentiumKurs1asemblerAsembler Podstawy programowania w WindowsPraktyczny kurs asemblerawięcej podobnych podstron