Laboratorium informatyki II. Język Pascal. Semestr letni.
Ćwiczenie 10.
Programowanie w trybie chronionym
Cel ćwiczenia: projektowanie algorytmów wykorzystujących tryb chroniony procesora;
zarządzanie dostępem do pamięci; sterta globalna; wyznaczanie adresu liniowego;
inicjowanie wskaźnika na obszar pamięci o ustalonym adresie i rozmiarze; wczytywanie do pamięci pliku o rozmiarze przekraczającym rozmiar segmentu (64KB).
1. Opracować funkcję wyznaczającą adres liniowy wskazywany przez zmienną wskaźnikową typu pointer: Function Adres(p: Pointer): LongInt.
2. Opracować funkcję, która tworzy wskaźnik umożliwiający dostęp do fragmentu pamięci o określonym adresie fizycznym i rozmiarze podanym w bajtach:
Function UstawPtr(adres_pocz: Longint; rozmiar: Word): Pointer;
3. W katalogu znajduje się plik zb_282kb. Należy przydzielić pamięć na stercie dla całego pliku, a następnie wczytać zawartość pliku blokami po 32KB (do segmentów o rozmiarze 64KB). Wyświetlić adres logiczny (selektor, offset) oraz adres liniowy początku obszaru pamięci, w którym znajduje się plik. Przy każdym 32 kilobajtowym bloku wyświetlić adres logiczny początku bloku (wskaźnik bloku). Po przeczytaniu pliku wyświetlić znakowo wybrany jego fragment, zawarty w dwóch kolejnych segmentach pamięci (np.
256 ostatnich bajtów pierwszego segmentu i 256 pierwszych bajtów drugiego segmentu).
Zrealizować zadanie wykorzystując funkcję GlobalAllocPtr (alokacja pamięci na stercie w obszarze powyżej 1MB).
4. Zrealizować zadanie 3 wykorzystując funkcję GlobalDosAlloc (alokacja pamięci na stercie w obszarze poniżej 1MB).