Przerwania
Mikroprocesor w komputerze będąc naczelnym sterownikiem systemu związany jest bezpośrednio lub pośrednio ze wszystkim co dzieje się w komputerze. Na przykład, gdy naciśnięty zostanie klawisz klawiatury, mikroprocesor musi dowiedzieć się, który klawisz został naciśnięty i podjąć działanie odpowiednie dla tego klawisza (naciśnięcie Ctrl-Break powoduje coś zupełnie odmiennego od naciśnięcia klawisza opisanego literą T). Podobnie, gdy następuje przesłanie danych z napędu dysku do lub z pamięci komputera, właśnie mikroprocesor jest odpowiedzialny za wykonanie instrukcji wymuszających przesłanie danych. Mikroprocesor odgrywa więc rolę we wszystkim co jest związane z komputerem.
No tak, ale jak mikroprocesor powiązany jest z urządzeniami zewnętrznymi? Na pewno nie posiada postrzegania pozazmysłowego, nie jest w stanie po prostu odgadnąć, że urządzenie zewnętrzne potrzebuje obsługi. Nie będzie się także pytał każdego urządzenia czy czegoś nie potrzebuje. Jeśli mikroprocesor odpytywałby urządzenia zewnętrzne przez cały czas, nie byłby w stanie zrobić cokolwiek innego - nie miałby wcale czasu na wykonanie programów. Jest to podobne do posiadania telefonu bez dzwonka. Należałoby często podnosić słuchawkę tylko po to, aby dowiedzieć się czy ktoś jest na linii!
W rzeczywistości, mikroprocesory i urządzenia zewnętrzne komunikują się w bardzo efektywny sposób. Jak to się odbywa. Mikroprocesor wykonuje program (powiedzmy DOS, BASIC) aż urządzenie zewnętrzne, takie jak: klawiatura, stacja dysków czy ekran powiedzą: “Przepraszam, mikro, ale potrzebuję Twojej pomocy żeby coś wykonać. Czy byłbyś tak uprzejmy zatrzymać to co robisz, tak długo, aż wykonam swoją pracę?” Oczywiście, urządzenia zewnętrzne w rzeczywistości nie mówią do mikroprocesora, wysyłają specjalny sygnał “pomóż mi” nazywany przerwaniem.
Jak działa przerwanie
Przerwania mają różne formy w zależności od rodzaju mikroprocesora, ale w 80286 (oraz 8088 i 8086) wygląda to następująco: gdy urządzenie zewnętrzne wysyła sygnał przerwania, wysyłany jest także sygnał identyfikujący nazywany kodem typu mówiący 286, które urządzenie domaga się obsługi. Klawiatura ma jeden kod typu, stacja dysków inny, dysk twardy jeszcze inny itd. Mikroprocesor 286 jest w stanie rozpoznać 256 różnych kodów typu.
Mamy urządzenie, jego kod typu i dźwięk dzwonka w procesorze. Czasami procesor wykonuje coś tak ważnego, że nie może zatrzymać się, aby obsłużyć żądanie przerwania. W takim przypadku 286 mówi po prostu: “Pozwólmy dzwonkowi hałasować. Odpowiem gdy będę mógł”.
W sytuacji gdy procesor wykonuje coś, co można przerwać, robi notatki o bieżącej pracy (aby wiedzieć gdzie podjąć ją na nowo), otwiera drzwi i bierze kod typu. Używa następnie tego kodu - liczby z zakresu od 0 do 255 - do obliczenia adresu na początku pamięci. Na podstawie obliczonego adresu czyta drugi adres.
Ten nowy adres, nazywany wektorem przerwań jest adresem programu zawierającym żądane przerwanie. Dla standardowych urządzeń zewnętrznych programy obsługi przerwań są powszechnie przechowywane w układzie scalonym zawierającym ROM służącym jako wbudowany w komputer system operacyjny. Teraz gdy procesor wie, który program wykonać, wychodzi i wykonuje go. Gdy skończy, korzysta ze wcześniej zrobionych notatek, aby powrócić do przerwanej pracy.
(odkłada na stos zawartość wszystkich swoich rejestrów i adres powrotu, następnie liczbę z zakresu od 0 do 255 mnoży przez 4, wynik wskazuje na adres pamięci, gdzie znajduje się wektor przerwań, który wskazuje na miejsce procedury obsługi tego przerwania)
Podział przerwań
Spośród 256 możliwych przerwań, pierwsze 32 zostały zarezerwowane przez firmę Intel.
System operacyjny DOS udostępnia swoje mechanizmy programiście (programowi użytkowemu) za pośrednictwem przerwań z grupy 20H - 3FH. Stosując konsekwentnie te mechanizmy programista osiąga istotne korzyści:
- program staje się niezależny od sprzętu (powinien działać poprawnie na dowolnym komputerze wyposażony w system operacyjny DOS);
- nie jest konieczne wnikanie w szczegóły realizacyjne mikrokomputera (systemu mikroprocesorowego) - tworzenie programu jest więc łatwiejsze i mniejsze jest prawdopodobieństwo popełnienia trudnych do wykrycia błędów.
Usługi świadczone przez DOS na rzecz programu użytkowego są często umownie zaliczane do dwóch grup, określanych jako funkcje systemu oraz przerwania systemowe. Nazewnictwo to wynika z realizacji dostępu do mechanizmów systemu DOS. Większość procedur systemowych zawarto w programie obsługi przerwania 21H i te procedury są nazwane funkcjami systemu DOS. Pozostałe przerwania z grupy 20H-3FH są przerwaniami systemowymi.
Przerwania systemowe zwykle wymagają pewnych parametrów, które należy przekazać przez rejestry mikroprocesora. Rodzaj i liczba tych parametrów oraz używane rejestry są cechą specyficzną każdego z przerwań systemowych. Zgłoszenie przerwania polega na wykonaniu rozkazu INT nn, gdzie nn oznacza numer przerwania. Informacje o wynikach działania programu obsługi przerwania również są zwracane w wybranych rejestrach procesora.
PRZERWANIA
Przerwanie |
Nazwa |
20 |
Zakończenie wykonywanego programu |
21 |
Wywołanie funkcji MS-DOS |
22 |
Adres powrotu po wykonywaniu programu |
23 |
Adres wyjścia dla Ctrl-Break |
24 |
Obsługa poważnego błędu |
25 |
Odczyt sektorów z dysku |
26 |
Zapis sektorów na dysk |
27 |
Zakończ program ale pozostaw go w pamięci |
28-3F |
Przerwania zarezerwowane dla DOS-u |
Wywołanie funkcji systemu
Wywołanie funkcji systemu jest szczególnym przypadkiem wykorzystania przerwań: należy zgłosić przerwanie 21H, przy czym numer funkcji jest przekazywany przez rejestr AH, a pozostałe parametry, specyficzne dla konkretnej funkcji przez właściwe rejestry.
Powyższa metoda wywołania funkcji jest najbardziej naturalna i zalecana przez autorów systemu DOS. Poza bezpośrednim wykonaniem rozkazu INT 21H w programie użytkowym jest możliwe dotarcie do funkcji systemu także innymi drogami. Można skorzystać z faktu, że każdemu programowi, umieszczonemu przez DOS w pamięci, towarzyszy struktura danych zwana blokiem wstępnym programu lub blokiem PSP. Blok PSP stanowi obszar komunikacji między programem a systemem operacyjnym. Wywołanie procedury o adresie 50H w bloku PSP (tzw. wywołanie dalekie) jest równoważne wykonaniu rozkazu INT 21H.
Inne przerwania
Przerwanie 22H - adres powrotu po zakończeniu programu.
Przerwanie 22H jest pierwszym z trzech przerwań zawierających adresy procedur, do których sterowanie przekazuje sam system DOS (a nie program użytkowy) w wyniku wystąpienia pewnych specyficznych sytuacji.
Wektor przerwania 22H zawiera adres, do którego ma być przekazane sterowanie po zakończeniu programu. Adres powrotu jest zapamiętywany w bloku PSP podczas tworzenia procesu, tak by wektor przerwania 22H mógł być odzyskany przy zakończeniu programu.
Przerwanie 23H - obsługa przerwania wykonywania programu.
Przerwanie 23H jest zgłaszane przez DOS po wykryciu naciśnięcia przez użytkownika klawiszy Ctrl-Break. Procedura obsługi przerwania 23H, standardowo powodująca zakończenie programu, może być zmieniona przez użytkownika. Należy zmienić wartość wektora przerwań 23H (za pomocą funkcji systemowej 25H). Własna procedura obsługi może wykonywać dowolne operacje, łącznie z korzystaniem z funkcji systemu (a więc może np. zapytać o powód naciśnięcia klawiszy Ctrl-Break i od tego uzależnić dalsze działanie).
Przerwanie 24H - obsługa błędów krytycznych.
Przerwanie 24H jest zgłaszane przez system operacyjny DOS w chwili wystąpienia tzw. błędu krytycznego urządzenia. Błąd tego rodzaju nie pozwala na poprawne wykonanie operacji wejścia-wyjścia zleconej systemowi przez program użytkowy. Ze względu na to, że błędy urządzeń są często usuwalne, gdyż wynikają z niewłaściwej obsługi tych urządzeń przez użytkownika (np. brak dyskietki w napędzie dysku, brak papieru w drukarce, nie włączona drukarka ), niewskazane byłoby bezwzględne przerywanie programu użytkowego w takich sytuacjach. Zgłoszenie przerwania 24H przez DOS jest w zamyśle twórców systemu okazją dla użytkownika do naprawienia błędnego działania. Standardowa procedura obsługi omawianego przerwania pyta o dalszy tryb postępowania systemu w zaistniałej sytuacji: przerwać wykonywanie programu użytkowego, ponowić próbę wykonania operacji wejścia-wyjścia, zignorować błąd czy zasygnalizować programowi wystąpienie błędu.
Zasady sygnalizowania błędów
W funkcjach i przerwaniach systemowych używa się rejestrów procesora do sygnalizowania błędów.
W przypadku funkcji systemu w pierwszych wersjach stosowano zasadę zwracania specyficznych informacji o błędzie głównie w rejestrze AL (wartość FFH - wystąpienie błędu, 00H - poprawne wykonanie operacji). Konwencję tę zastosowano np. w funkcjach wykonujących operacje na plikach z użyciem bloków opisu plików. W kolejnych wersjach systemu zachowano ten sposób informowania o błędach w funkcjach dotychczas zdefiniowanych, lecz przyjęto jednolite zasady sygnalizowania błędów dla funkcji nowo zaprojektowanych. Wystąpienie błędu jest sygnalizowane ustawieniem znacznika przeniesienia CF, gdy CF=0 operacja zakończyła się pomyślnie, gdy CF=1 wystąpił błąd.
Kody błędów dla wywołań funkcji DOS-u.
Kod |
Znaczenie |
1 |
Zły numer funkcji |
2 |
Plik nie znaleziony |
3 |
Ścieżka nie znaleziona |
4 |
Zbyt wiele otwartych plików (nie pozostawiono uchwytów) |
5 |
Wymagany dostęp |
6 |
Błędny uchwyt pliku |
7 |
Zniszczone bloki sterujące pamięcią |
8 |
Niewystarczająca ilość pamięci |
9 |
Niepoprawny adres bloku pamięci |
10 |
Niepoprawne środowisko |
11 |
Niepoprawny format |
12 |
Niepoprawny kod dostępu |
13 |
Niepoprawne dane |
15 |
Podanie błędnego napędu |
16 |
Próba usunięcia katalogu bieżącego |
17 |
Nie to samo urządzenie |
18 |
Nie ma więcej plików |
19 |
Dyskietka jest zabezpieczona przed zapisem |
20 |
Wadliwa jednostka dyskowa |
21 |
Napęd niegotowy |
22 |
Nieważne polecenie dyskowe |
23 |
Błąd sumy kontrolnej (CRC) |
24 |
Błędna długość (podczas operacji dyskowych) |
25 |
Błąd szukania |
26 |
Dyskietka nie w formacie MS-DOS |
27 |
Sektor nie znaleziony |
28 |
Brak papieru |
29 |
Błąd zapisu |
30 |
Błąd odczytu |
31 |
Błąd ogólny |
32 |
Naruszenie wspólności |
33 |
Naruszenie blokady |
34 |
Błędna zmiana dysku |
35 |
Niedostępny blok FCB |
50 |
Brak procedury obsługi sieci |
51 |
Komputer zdalny nie jest w trybie odbiorcy |
52 |
Powielona nazwa sieci |
53 |
Nie znaleziono nazwy sieci |
54 |
Zajętość sieci |
55 |
Urządzenie sieciowe już nie istnieje |
56 |
Przekroczenie limitu przez polecenie BIOS-u sieci |
57 |
Błąd elektroniki adaptera sieciowego |
58 |
Niepoprawna odpowiedź sieci |
59 |
Nieoczekiwany błąd sieci |
60 |
Niezgodny zdalny adapter |
61 |
Wypełniona kolejka do wydruku |
62 |
Kolejka do wydruku nie wypełniona |
63 |
Brak miejsca dla drukowanego pliku |
64 |
Nazwa sieci została skasowana |
65 |
Wymagany dostęp |
66 |
Niewłaściwy rodzaj przyrządu sieciowego |
67 |
Nie znaleziona nazwa sieci |
68 |
Przekroczenie limitu nazwy sieci |
69 |
Przekroczenie limitu sesji sieciowego BIOS-a |
70 |
Chwilowe zatrzymanie |
71 |
Niezaakceptowane żądanie sieci |
72 |
Zatrzymanie ponownego skierowania drukarki lub dysku |
80 |
Plik istnieje |
82 |
Niemożliwość utworzenia |
84 |
Błąd przerwania 24 |
85 |
Przypisanie już nastąpiło |
86 |
Błędne słowo kluczowe |
87 |
Błędny parametr |
88 |
Błąd zapisu sieci |
PODZIAŁ FUNKCJI
- funkcje wejścia-wyjścia dla standardowych urządzeń znakowych
- funkcje zarządzania pamięcią
- funkcje zarządzania procesami
- funkcje operujące na plikach i katalogach
- funkcje związane z datą i zegarem
Funkcje wejścia-wyjścia dla standardowych urządzeń znakowych
Zwykle systemy operacyjne, nawet te najprostsze, zakładają, że nadzorowany przez nie system mikroprocesorowy (mikrokomputer) jest wyposażony w pewne standardowe urządzenia wejścia-wyjścia. Należą do nich zwykle: monitor ekranowy z klawiaturą, spełniający funkcję konsoli oraz drukarka.
Funkcje 01H-0CH w systemie DOS dotyczą właśnie tego rodzaju urządzeń. Dokładnie - funkcje realizują operacje wejścia-wyjścia dla:
- standardowego wejścia danych
- standardowego wyjścia danych
- drukarki (wyjście równoległe)
- wejścia i wyjścia szeregowego.
Twórcy systemu przewidzieli szczególną rolę dla Ctrl-Break. Reakcją na wykrycie naciśnięcia Ctrl-Break jest zgłoszenie przez system operacyjny przerwania 23H. Z pozoru identyczne funkcje mogą się więc różnić sposobem interpretacji Ctrl-Break. Kolejną cechą różniącą poszczególne funkcje omawianej grupy jest sposób wykonywania operacji odczytania znaku z klawiatury. Funkcja może czekać na nadejście znaku, bądź zwracać natychmiast informację o tym, że bufor klawiatury jest pusty. Dodatkowo pewne funkcje wejściowe wyświetlają odebrany znak na ekranie (echo).
Funkcja |
01H |
Odczytanie znaku z klawiatury z echem |
||
Wywołanie AH = 01H Powrót AL = Odebrany znak Uwagi Funkcja czeka na znak ze standardowego wejścia i przesyła odebrany znak na standardowe wyjście (echo). Wykrywany Ctrl-Break. |
|
|
Funkcja |
02H |
Wyświetlenie znaku |
||
Wywołanie AH = 02H DL = Znak do przesłania na standardowe wyjście Powrót Brak informacji zwrotnej Uwagi Wykrywany Ctrl-Break. |
|
|
Funkcja |
03H |
Odczytanie znaku z wejścia szeregowego |
||
Wywołanie AH = 03H Powrót AL = Odebrany znak Uwagi Funkcja czeka na znak ze standardowego wejścia szeregowego. Wykrywany Ctrl-Break. |
|
|
Funkcja |
04H |
Wysłanie znaku przez wyjście szeregowe |
||
Wywołanie AH = 04H DL = Znak do przesłania na wyjście szeregowe Powrót Brak informacji zwrotnej Uwagi Funkcja czeka na znak ze standardowego wejścia szeregowego. Wykrywany Ctrl-Break. |
|
|
Funkcja |
05H |
Wydrukowanie znaku |
||
Wywołanie AH = 05H DL = Znak do wydrukowania Powrót Brak informacji zwrotnej Uwagi Wykrywany Ctrl-Break. |
|
|
Funkcja |
06H |
Operacja wejścia-wyjścia dla konsoli |
||
Wywołanie AH = 06H DL = FFH odczytanie znaku z konsoli DL < > FFH znak do wysłania Powrót Gdy zaprogramowano odczytanie znaku: - znacznik zera CF = 0, to odebrany znak w AL; - CF = 1, to nie ma znaku w buforze Gdy zaprogramowano wyświetlenie znaku: brak informacji zwrotnej Uwagi W przypadku czytania funkcja nie czeka na znak, lecz przy braku znaku natychmiast zwraca informację. Nie jest wykrywany przez Ctrl-Break. |
|
|
Funkcja |
07H |
Odczytanie znaku z konsoli |
||
Wywołanie AH = 07H Powrót AL = Odebrany znak z klawiatury Uwagi Funkcja czeka na znak ze standardowego wejścia. Nie jest wykrywany Ctrl-Break. |
|
|
Funkcja |
08H |
Odczytanie znaku z klawiatury |
||
Wywołanie AH = 08H Powrót AL = Odebrany znak z klawiatury Uwagi Funkcja czeka na znak ze standardowego wejścia. Brak echa. Wykrywany Ctrl-Break. |
|
|
Funkcja |
09H |
Wyświetlenie ciągu znaków |
||
Wywołanie AH = 09H DS:DX = Wskaźnik ciągu znaków przeznaczonych do wysłania Powrót Brak informacji zwrotnej Uwagi Wskaźnik ma postać segment:przesunięcie. Ciąg znaków musi być zakończony symbolem $ ($ nie jest wyświetlany). Funkcja testuje Ctrl-Break. |
|
|
Funkcja |
0AH |
Odczytanie ciągu znaków z klawiatury |
||
Wywołanie AH = 0AH DS:DX = Wskaźnik do bufora wejściowego Powrót Brak informacji zwrotnej Uwagi Wskaźnik ma postać segment:przesunięcie. Funkcja testuje Ctrl-Break. |
|
|
Funkcja |
0BH |
Stan klawiatury |
||
Wywołanie AH = 0BH Powrót AL = FFH - znak gotowy do odbioru AL = 00H - brak znaku Uwagi Wykrywany Ctrl-Break. |
|
|
Funkcja |
0CH |
Opróżnianie bufora klawiatury i odczyt |
||
Wywołanie AH = 0CH AL = 1, 6, 7, 8, 0AH - numery funkcji AL = inna wartość - tylko opróżnianie bufora Powrót AL = informacja zgodna z opisem odpowiedniej funkcji |
|
|
Funkcje zarządzania pamięcią
Funkcja |
48H |
Przydział bloku pamięci |
||
Wywołanie AH = 48H BX = Długość żądanego bloku (liczba paragrafów) Powrót Gdy CF = 0, to wykonanie poprawne i AX = Adres segmentowy przydzielonego bloku pamięci Gdy CF = 1, to wystąpił błąd i AX = Kod błędu BX = Długość dostępnej pamięci Uwagi Wartość zwracana w rejestrze BX w przypadku wystąpienia błędu jest długością największego wolnego bloku pamięci. |
|
|
Funkcja |
49H |
Zwolnienie bloku pamięci przydzielonej programowi |
||
Wywołanie AH = 49H ES = Adres segmentowy bloku pamięci przeznaczonego do zwolnienia Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
4AH |
Zmiana długości bloku pamięci |
||
Wywołanie AH = 4AH BX = Nowa długość bloku pamięci (liczba paragrafów) ES = Adres segmentowy bloku pamięci przeznaczonego do modyfikacji Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu BX = Osiągalna długość bloku pamięci Uwagi Wartość zwracana w rejestrze BX w przypadku wystąpienia błędu ( przy próbie wydłużenia bloku pamięci) jest maksymalną długością, do której można rozszerzyć dany blok. |
|
|
Funkcja |
58H |
Zmiana strategii przydziału pamięci (MS DOS) |
||
Wywołanie AH = 58H AL = 0H - Odczytanie aktualnej strategii AL = 1H - Zmiana strategii BX = Nowa strategia przydziału (tylko dla AL = 1) Powrót Gdy CF = 0, to wykonanie poprawne i AX = Aktualnie stosowana strategia (dla AL = 1) Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcje zarządzania procesami
PROCESY W SYSTEMIE DOS.
Jednym z zadań systemu operacyjnego jest zarządzanie wykonywaniem programów, w szczególności - programów użytkownika. W systemie DOS jest możliwe jednoczesne umieszczenie w pamięci operacyjnej różnych programów i - mimo, że w danej chwili jest wykonywany tylko jeden z nich - zachodzące zmiany mogą powodować przekazanie sterowania do innych programów. Z obecnością w systemie kilku programów wiąże się konieczność przydzielenia im określonych obszarów pamięci, ustalenie warunków dzielonego dostępu do zasobów systemu itd. Program wraz z zasobami, którymi dysponuje, wykonywany w obecności innych programów, może być rozpatrywany jako pewna struktura dynamiczna, wyraźnie różniąca się od programu w sensie statystycznym - często utożsamianego z kodem. Taki program, rozważany w aspekcie dynamicznym (wykonywania w systemie), jest nazywany procesem.
Mechanizmy współpracy programów umieszczonych jednocześnie w pamięci są bardzo niedoskonałe. Sprowadzają się one do załadowania przez dany program kodu innego programu do pamięci i wykonania go. Tworzony jest więc pewien nowy proces - proces potomny, do którego zostaje przeniesione sterowanie. W systemie DOS są możliwości kontrolowania powrotu po zakończeniu wykonywania procesu potomnego (adresu powrotu) oraz ewentualnego przekazania do procesu rodzicielskiego informacji o przebiegu tego wykonania.
Inna sytuacja w której może nastąpić przekazanie sterowania do “obcego” programu, jest związana z istnieniem w systemie mechanizmu zakończenia wykonywania programu z pozostawieniem w pamięci. Tego rodzaju program można traktować jako pewien “uśpiony” kod, którym system już nie zarządza jako procesem. Jednakże podczas swego pierwszego wykonania program taki może zapewnić innym programom późniejszy dostęp do pozostawionego kodu (np. umieszczając odpowiedni adres w tablicy wektorów przerwań).
DOS zawiera wprawdzie proste mechanizmy ułatwiające współistnienie kilku programów, nie jest on jednak systemem wielozadaniowym ani wieloprogramowym. Pewne elementy systemu wskazują na ewolucję w kierunku wielozadaniowości, ale jest ona utrudniona ze względu na postulat zachowania zgodności z poprzednimi wersjami.
NORMALNE ZAKOŃCZENIE PROGRAMU.
Do normalnego zakończenia programu działającego w systemie DOS służą:
- przerwanie 20H
- funkcja 00H
- funkcja 4CH.
Zaleca się korzystanie z funkcji 4CH. Ma ona większe możliwości i jest wygodniejsza w użyciu w porównaniu z przerwaniem 20H i funkcją 00H. Po pierwsze, w starych metodach zakończenia programu należy pamiętać o właściwej zawartości rejestru segmentowego CS. Po drugie, funkcja 4CH w przeciwieństwie do swych uboższych poprzedników, umożliwia przekazanie przez kończący się program informacji o stanie wykonania na zewnątrz - do procesu rodzicielskiego. Informację tę stanowi bajt zwany kodem powrotu. Proces rodzicielski ma dostęp do kodu powrotu procesu potomnego za pośrednictwem funkcji 4DH. Podczas realizacji zlecenia zakończenia programu w dowolnej z wymienionych wcześniej postaci system operacyjny zwalnia wszystkie bloki pamięci, których właścicielem był program.
ZAKOŃCZENIE Z POZOSTAWIENIEM W PAMIĘCI.
Zakończenie programu z pozostawieniem w pamięci może być wykonywane za pomocą:
- przerwania 27H
- funkcji 31H.
Funkcja 31H jest preferowana w porównaniu z przerwaniem 27H z następujących względów:
- przerwanie 27H ogranicza długość kodu pozostawionego w pamięci 64KB
- przerwanie 27H w chwili zgłoszenia wymaga właściwej zawartości rejestru segmentowego S (S musi wskazywać blok PSP)
- funkcja 31H w przeciwieństwie do przerwania 27H umożliwia przekazanie kodu powrotu procesowi rodzicielskiemu.
Oba mechanizmy (przerwanie 27H, funkcja 31H) nie zamykają automatycznie otwartych plików.
Funkcja |
31H |
Zakończenie procesu z pozostawieniem go w pamięci |
||
Wywołanie AH = 31H AL = Kod powrotu DX = Rozmiar programu pozostawionego w pamięci (liczba paragrafów) Powrót Brak informacji zwrotnej Uwagi Pliki otwarte przez proces nie są zamykane. Kod powrotu jest dostępny dla programu rodzicielskiego przez funkcję 4DH. |
|
|
Funkcja |
4BH(00) |
Załadowanie do pamięci i wykonanie programu |
||
Wywołanie AH = 4BH AL = 00H (podfunkcja) DS:DX = Wskaźnik (segment:przesunięcie) do ciągu znaków ASCIIZ określających dysk, ścieżkę i nazwę pliku zawierającego program do wykonania ES:BX = Wskaźnik (segment:przesunięcie) do tzw. bloku parametrów Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
4BH(03) |
Załadowanie nakładki do pamięci |
||
Wywołanie AH = 4BH AL = 03H (podfunkcja) DS:DX = Wskaźnik (segment:przesunięcie) do ciągu znaków ASCIIZ określających dysk, ścieżkę i nazwę pliku zawierającego nakładkę ES:BX = Wskaźnik (segment:przesunięcie) do tzw. bloku parametrów Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
4CH |
Zakończenie procesu |
||
Wywołanie AH = 4CH AL = Kod powrotu Powrót Brak informacji zwrotnej Uwagi Funkcja przywraca zawartość tablicy wektorów przerwań 22H, 23H i 24H zgodną z wartościami w chwili rozpoczęcia wykonywania programu, na podstawie pól odpowiednio 0AH, 0EH i 12H z bloku PSP. Zamykane są wszystkie pliki otwarte przez proces za pomocą mechanizmu numerów identyfikacyjnych. Kod powrotu jest dostępny dla programu rodzicielskiego przez funkcję 4DH. |
|
|
Funkcja |
4DH |
Pobranie kodu powrotu procesu potomnego |
||
Wywołanie AH = 4DH Powrót AX = Rozszerzony kod powrotu Uwagi Funkcja zwraca rozszerzony kod powrotu procesu potomnego. Mniej znaczący bajt kodu jest równy kodowi powrotu określonemu przez proces potomny przy wywołaniu funkcji zakończenia (31H lub 4CH), a bardziej znaczący bajt jest tworzony przez system i zawiera informację o przyczynie zakończenia programu: 00 - normalne zakończenie 01 - zakończenie w wyniku naciśnięcia klawiszy Ctrl-Break 02 - zakończenie w wyniku wystąpienia błędu krytycznego urządzenia 03 - zakończenie w wyniku użycia funkcji 31H (program pozostaje w pamięci) |
|
|
Funkcja |
62H |
Pobranie adresu bloku PSP bieżącego procesu |
||
Wywołanie AH = 62H Powrót BX = Adres segmentowy aktualnie wykonywanego procesu tzn. jego bloku wstępnego. |
|
|
Funkcje operujące na plikach i katalogach
W systemie DOS istnieją dwie metody operowania plikami i katalogami: funkcje tradycyjne o numerach 0FH-29H, posługujące się blokami opisu plików, oraz nowe funkcje - począwszy od 39H - korzystające z numerów identyfikacyjnych plików. Nowe funkcje są łatwiejsze w użyciu i mają większe możliwości: pozwalają operować plikami umieszczonymi w dowolnym miejscu drzewiastej struktury plików, a nie tylko plikami z katalogu roboczego.
Numer identyfikacyjny jest liczbą 16-bitową, przekazywaną przez funkcje systemu podczas tworzenia pliku (funkcje 3CH, 5AH, 5BH) lub otwarcia pliku istniejącego (3DH). Jako dane wejściowe do tych funkcji należy dostarczyć specyfikację pliku, a więc jego lokalizację (dysk, katalog) i nazwę.
W systemie określono pięć specjalnych numerów identyfikacyjnych:
- 0000H - standardowe wejście
- 0001H - standardowe wyjście
- 0002H - standardowe urządzenie przeznaczone do wysyłania komunikatów o błędach
- 0003H - standardowe łącze szeregowe
- 0004H - standardowa drukarka (łącze równoległe).
OPERACJE NA PLIKACH
Trzy funkcje używane do tworzenia plików wymagają podania ścieżki i nazwy pliku (poza funkcją 5AH) oraz bajtu atrybutów. Różnią się one między sobą sposobem utworzenia pliku:
- funkcja 3CH tworzy nowy plik, o ile nie istnieje plik o podanej nazwie, a w przypadku istnienia usuwa jego zawartość
- funkcja 5AH tworzy nowy plik o nazwie różnej od nazwy jakiegokolwiek innego pliku
- funkcja 5BH zakłada plik tylko wówczas, gdy plik o danej nazwie nie istnieje, w przeciwnym przypadku sygnalizuje błąd.
Utworzony plik pozostaje otwarty, jest pusty i gotowy do zapisu.
Tradycyjny dostęp do pliku dyskowego jest realizowany za pomocą bloków opisu pliku (bloków FCB). Stanowi on “dziedzictwo” systemu CP/M. Ze względu na liczne wady jest jednak rzadko stosowany.
OPERACJE NA KATALOGACH.
System operacyjny DOS umożliwia dokonanie modyfikacji drzewiastej struktury katalogów z programu użytkowego. Program ma do dyspozycji funkcje służące do tworzenia nowego podkatalogu (39H), kasowania podkatalogu (3AH) i zmiany katalogu roboczego (3BH). Funkcje te wymagają przekazania systemowi nazwy i lokalizacji katalogu, którego operacja dotyczy.
Funkcja |
1AH |
Deklaracja bufora transmisji dyskowych |
||
Wywołanie AH = 1AH DS:DX = Wskaźnik do obszaru deklarowanego bufora DTA Powrót Brak informacji zwrotnej. |
|
|
Funkcja |
2FH |
Informacja o położeniu bufora transmisji dyskowych |
||
Wywołanie AH = 2FH Powrót ES:BX = Wskaźnik do aktualnego bufora DTA. |
|
|
Funkcja |
39H |
Utworzenie podkatalogu |
||
Wywołanie AH = 39H DS:DX = Wskaźnik do ścieżki określającej katalog (ciąg ASCIIZ) Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
3AH |
Usunięcie podkatalogu |
||
Wywołanie AH = 3AH DS:DX = Wskaźnik do ścieżki określającej katalog (ciągu ASCIIZ) Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
3BH |
Zmiana katalogu roboczego |
||
Wywołanie AH = 3BH DS:DX = Wskaźnik do ścieżki określającej nowy katalog roboczy (ciągu ASCIIZ) Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
3CH |
Utworzenie pliku |
||
Wywołanie AH = 3CH CX = Atrybuty pliku DS:DX = Wskaźnik do ścieżki określającej plik (ciąg ASCIIZ) Powrót Gdy CF = 0, to wykonanie poprawne AX = Numer identyfikacyjny pliku Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
3DH |
Otwarcie pliku |
||
Wywołanie AH = 3DH AL = Kod dostępu (patrz Uwagi) DS:DX = Wskaźnik do ścieżki określającej plik Powrót Gdy CF = 0, to wykonanie poprawne AX = Numer identyfikacyjny pliku Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi Bajt przekazywany w rejestrze AL określa tryb dostępu, tryb dzielenia pliku oraz przekazywanie numeru identyfikacyjnego do procesów potomnych. Format danych jest następujący: bit 7=0 - numer identyfikacyjny dziedziczony przez proces potomny bit 7=1 - numer identyfikacyjny nie jest przekazywany bity 4-6 - tryb dzielenia pliku bity 0-3 - tryb dostępu |
|
|
Funkcja |
3EH |
Zamknięcie pliku |
||
Wywołanie AH = 3EH BX = Numer identyfikacyjny pliku Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
3FH |
Odczytanie z pliku |
||
Wywołanie AH = 3FH BX = Numer identyfikacyjny pliku CX = Liczba bajtów do odczytania DS:DX = Wskaźnik do bufora (miejsca przeznaczenia odczytanych danych) Powrót Gdy CF = 0, to wykonanie poprawne AX = Liczba odczytanych bajtów Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi Należy sprawdzić liczbę odczytanych bajtów, gdyż przekroczenie końca pliku nie jest sygnalizowane jako błąd. |
|
|
Funkcja |
40H |
Zapisanie do pliku |
||
Wywołanie AH = 40H BX = Numer identyfikacyjny pliku CX = Liczba bajtów do zapisania DS:DX = Wskaźnik do bufora (miejsca w pamięci, z którego są pobierane zapisywane dane) Powrót Gdy CF = 0, to wykonanie poprawne AX = Liczba zapisanych bajtów Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi Należy sprawdzić liczbę zapisanych bajtów, gdyż brak miejsca na dysku nie jest sygnalizowane jako błąd. |
|
|
Funkcja |
41H |
Skasowanie pliku (pozycji katalogu) |
||
Wywołanie AH = 41H DS:DX = Wskaźnik do ścieżki określającej plik do skasowania (ciąg ASCIIZ) Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
42H |
Przesunięcie wskaźnika pliku |
||
Wywołanie AH = 42H AL = Rodzaj przesunięcia (patrz Uwagi) BX = Numer identyfikacyjny pliku CX:DX = Wielkość przesunięcia (liczba 4-bajtowa, w CX część bardziej znacząca) Powrót Gdy CF = 0, to wykonanie poprawne DX:AX = Nowa pozycja wskaźnika odczytu-zapisu względem początku pliku (liczba 4-bajtowa, w DX część bardziej znacząca) Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi W rejestrze AL należy podać sposób określenia przesunięcia: 0 - względem początku pliku 1 - względem aktualnej pozycji 2 - względem końca pliku |
|
|
Funkcja |
43H |
Zmiana atrybutów pozycji katalogu |
||
Wywołanie AH = 43H AL = 0 - odczytanie atrybutów AL = 1 - wpisanie nowych atrybutów CX = Atrybuty do wpisania przy AL = 1 DS:DX = Wskaźnik do ścieżki określającej pozycję katalogu (ciąg ASCIIZ) Powrót Gdy CF = 0, to wykonanie poprawne CX = Bajt atrybutów (przy AL = 0) Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi Za pomocą tej funkcji nie można zmienić bitu oznaczającego etykietę dysku oraz bitu oznaczającego podkatalog |
|
|
Funkcja |
44H(0B) |
Liczba powtórzeń prób dostępu dzielonego |
||
Wywołanie AH = 44H AL = 0BH (numer podfunkcji) BX = Liczba powtórzeń CX = Długość przerwy między powtórzeniami Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi Długość przerwy między powtórzeniami jest określana jako liczba wykonań programowej pętli oczekiwania. Rzeczywisty czas trwania przerwy zależy od typu procesora i częstotliwości zegara. |
|
|
Funkcja |
45H |
Utworzenie dodatkowego numeru identyfikacyjnego |
||
Wywołanie AH = 45H BX = Numer identyfikacyjny pliku Powrót Gdy CF = 0, to wykonanie poprawne AX = Nowy numer identyfikacyjny Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi BX musi zawierać numer identyfikacyjny otwartego pliku. Funkcja zwraca dodatkowy numer identyfikacyjny tego samego pliku. |
|
|
Funkcja |
46H |
Zmiana identyfikacyjnego pliku |
||
Wywołanie AH = 46H BX = Numer identyfikacyjny pliku CX = Numer identyfikacyjny przeznaczony do zmiany stowarzyszonego pliku Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi BX musi zawierać numer identyfikacyjny otwartego pliku. Funkcja przypisuje numerowi zawartemu w CX plik identyfikacyjny przez numer określony w BX. |
|
|
Funkcja |
47H |
Nazwa katalogu roboczego |
||
Wywołanie AH = 47H DS:SI = Wskaźnik do 64-bajtowego bufora przeznaczonego na nazwę katalogu roboczego (ciąg ASCIIZ) DL = Numer dysku (0-roboczy, 1-A, 2-B) Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi Funkcja umieszcza specyfikację katalogu roboczego w postaci ścieżki rozpoczynającej się w katalogu głównym. |
|
|
Funkcja |
4EH |
Odszukanie pierwszego wystąpienia w katalogu |
||
Wywołanie AH = 4EH DS:DX = Wskaźnik ścieżki określającej cel poszukiwań (ciąg ASCIIZ) CX = Atrybuty poszukiwanej pozycji Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi Specyfikacja ścieżki wskazywana przez DS:DX może zawierać znaki globalne. Jeżeli słowo atrybutów określa pozycję jako systemową, ukrytą lub katalog, to przeszukiwane są również wszystkie zwykłe pozycje. |
|
|
Funkcja |
4FH |
Odszukanie kolejnego wystąpienia w katalogu |
||
Wywołanie AH = 4FH Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi W chwili wywołania funkcji bieżący bufor DTA musi zawierać informację wpisane przez funkcję “odszukania pierwszego wystąpienia” lub poprzednie wywołanie funkcji “odszukanie poprzedniego wystąpienia”. |
|
|
Funkcja |
56H |
Zmiana pozycji katalogu |
||
Wywołanie AH = 56H DS:DX = Wskaźnik do ścieżki określającej pozycję katalogu (ciąg ASCIIZ) ES:DI = Wskaźnik do ścieżki docelowej (ciąg ASCIIZ) Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi Za pomocą tej funkcji nie można zmienić nazwy pliku systemowego, ukrytego lub katalogu. Można natomiast wykorzystać funkcję zmiany pozycji katalogu do przeniesienia pliku do innego katalogu na tym samym dysku. |
|
|
Funkcja |
57H |
Zmiana daty i czasu w pozycji katalogu |
||
Wywołanie AH = 57H AL = 0 - odczytanie daty i czasu AL = 1 - wpisanie daty i czasu BX = Numer identyfikacyjny pliku CX = Czas do wpisania przy AL = 1 DX = Data do wpisania przy AL = 1 Powrót Gdy CF = 0, to wykonanie poprawne CX = Czas ostatniej modyfikacji (przy AL = 0) DX = Data ostatniej modyfikacji (przy AL = 0) Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
5AH |
Utworzenie pliku tymczasowego |
||
Wywołanie AH = 5AH CX = Atrybuty pliku DS:DX = Wskaźnik do ścieżki określającej katalog (ciąg ASCIIZ+bufor 13-bajtowy) Powrót Gdy CF = 0, to wykonanie poprawne AX = Numer identyfikacyjny pliku Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi Funkcja tworzy plik o unikanie nazwie. Nadana nazwa jest wpisywana do 13-bajtowego bufora po nazwie ścieżki do podkatalogu. Funkcję stosuje się w celu uniknięcia konfliktów nazw. |
|
|
Funkcja |
5BH |
Utworzenie nowego pliku |
||
Wywołanie AH = 5BH CX = Atrybuty pliku DS:DX = Wskaźnik do ścieżki określającej plik (ciąg ASCIIZ) Powrót Gdy CF = 0, to wykonanie poprawne AX = Numer identyfikacyjny pliku Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
5CH(00) |
Założenie blokady regionu pliku |
||
Wywołanie AH = 5CH AL = 00 (Numer podfunkcji) BX = Numer identyfikacyjny pliku CX:DX = Początek blokowania regionu względem początku pliku (liczba 4-bajtowa, w CX część bardziej znacząca) SI:DI = Długość blokowanego regionu (liczba 4-bajtowa, w SI część bardziej znacząca) Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu |
|
|
Funkcja |
5CH(01) |
Usunięcie blokady regionu pliku |
||
Wywołanie AH = 5CH AL = 01 (Numer podfunkcji) BX = Numer identyfikacyjny pliku CX:DX = Początek regionu do odblokowania (liczba 4-bajtowa, w CX część bardziej znacząca) SI:DI = Długość regionu do odblokowania (liczba 4-bajtowa, w SI część bardziej znacząca) Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi Specyfikacja odblokowania regionu (CX, DX, SI, DI) musi być identyczna ze specyfikacją podaną przy zakładaniu blokady. |
|
|
Funkcja |
67H |
Zmiana liczby numerów identycznych |
||
Wywołanie AH = 67H BX = Nowa liczba numerów identyfikacyjnych w systemie (do 0FFFFH) Powrót Gdy CF = 0, to wykonanie poprawne Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi W BX musi być liczba numerów identyfikacyjnych co najmniej 20 |
|
|
Funkcja |
68H |
Zapisanie zawartości buforów pliku |
||
Wywołanie AH = 68H BX = Numer identyfikacyjny pliku Powrót Gdy CF = 0, to wykonanie poprawne AX = Liczba zapisanych bajtów Gdy CF = 1, to wystąpił błąd i AX = Kod błędu Uwagi W BX musi być liczba numerów identyfikacyjnych co najmniej 20 |
|
|
FUNKCJE ZWIĄZANE Z DATĄ I ZEGAREM
Znajomość czasu z dokładnością do setnych części sekund jest wygodna do pomiaru czasu wykonania programu i generowania opóźnień. Opóźnienia będą konieczne do generowania dźwięku poprzez głośnik komputera lub wyświetlania grafiki na monitorze.
Funkcja |
2AH |
Odczytanie daty |
||
Wywołanie AH = 2AH Powrót CX = Rok DH = Miesiąc DL = Dzień |
|
|
Funkcja |
2BH |
Ustawienie daty |
||
Wywołanie AH = 2BH CX = Rok (1980-2099) DH = Miesiąc DL = Dzień Powrót AL = 0 - data jest poprawna AL = FF - data jest błędna |
|
|
Funkcja |
2CH |
Odczytanie czasu |
||
Wywołanie AH = 2CH Powrót CH = Godzina CL = Minuty DH = Sekundy DL = 1/100 sekundy |
|
|
Funkcja |
2DH |
Ustawienie czasu |
||
Wywołanie AH = 2DH CH = Godzina CL = Minuty DH = Sekundy DL = 1/100 sekundy Powrót AL = 0 - data jest poprawna AL = FF - data jest błędna |
|
|
Przykładowe programy
I. Funkcje wejścia-wyjścia dla standardowych urządzeń.
1. Funkcja 07H (odczytanie znaku z konsoli)
MOV AH,07
INT 21.
2. Funkcja 08H (odczytanie znaku z klawiatury)
MOV AH,08
INT 21.
Funkcje te różnią się tym, że pierwsza funkcja nie wykrywa Ctrl-Break, druga funkcja natomiast, wykrywa.
II. Funkcje operujące na plikach i katalogach.
1. Funkcja 39H (utworzenie podkatalogu)
MOV AH,39
INT 21
należy podać nazwę katalogu, jaki się chce utworzyć.
2. Funkcja 3AH (usunięcie podkatalogu)
MOV AH, 3A
INT 21
należy podać nazwę katalogu, jaki się chce usunąć.
III. Funkcje związane z datą i zegarem.
1. Funkcja 2AH (odczytanie daty)
MOV AH,2A
INT 21
2. Funkcja 2BH (ustawienie daty)
MOV AH,2B
INT 21
do CX należy podać rok (w kodzie 16-owym)
do DH należy podać miesiąc (w kodzie 16-owym)
do DL należy podać dzień (w kodzie 16-owym)
3. Funkcja 2CH (odczytanie czasu)
MOV AH,2C
INT 21
4. Funkcja 2DH (ustawienie czasu)
MOV AH,2D
INT 21
do CH należy podać godzinę (w kodzie 16-owym)
do CL należy podać minuty (w kodzie 16-owym)
do DH należy podać sekundy (w kodzie 16-owym)
do DL należy podać 1/100 sekundy (w kodzie 16-owym).