Przerwania, Zwykle systemy operacyjne, nawet te najprostsze, zak˙adaj˙, ˙e nadzorowany przez nie system mikroprocesorowy


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).



Wyszukiwarka

Podobne podstrony:
04 system mikroprocesorowy i peryferia
Wyznaczanie współczynnika osłabienia oraz energii maksymal(2), Pracownia Zak˙adu Fizyki Technicznej
ATOM2 ~1, Pracownia Zak˙adu Fizyki Technicznej Politechniki Lubelskiej
E2 1mix, Pracownia Zak˙adu Fizyki Technicznej Politechniki Lubelskiej_
RYS MAŁY, Schemat stacji energetycznej zasilaj˙cej zak˙ad przemys˙owy.
Wyznaczanie wspó czynnika lepko ci cieczy metod Ostwalda, Pracownia Zak˙adu Fizyki Technicznej Polit
J9.1-1, Pracownia Zak˙adu Fizyki Technicznej Politechniki Lubelskiej
14.1 b, Pracownia Zak˙adu Fizyki Technicznej Politechniki Lubelskiej
6.2 a, Pracownia Zak˙adu Fizyki Technicznej Politechniki Lubelskiej
BAZADA~1, Pracownia Zak˙adu Fizyki Technicznej Politechniki Lubelskiej
SPRW12 2, PRACOWNIA ZAK˙ADU FIZYKI PL
OPT3 2~1, Pracownia Zak˙adu Fizyki Technicznej Politechniki Lubelskiej
O 3 2 , Pracownia Zak˙adu Fizyki Technicznej Politechniki Lubelskiej
Wyznaczanie napięcia zapłonu i gaśnięcia lamp y jarzeniowej, Pracownia Zak˙adu Fizyki Technicznej P

więcej podobnych podstron