• Document: Programowanie Niskopoziomowe
  • Size: 520.52 KB
  • Uploaded: 2019-02-13 20:40:40
  • Status: Successfully converted


Some snippets from your converted document:

Programowanie Niskopoziomowe Wykład 8: Procedury Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan • Wstęp • Linkowanie z bibliotekami zewnętrznymi • Operacje na stosie • Definiowanie i używanie procedur • Projektowanie programu z procedurami Wstęp • Jak korzystać z bibliotek zewnętrznych? • Jak podzielić program na podprogramy? • Jak języki programowania używają stosu przy wywoływaniu podprogramów? Łączenie z zewnętrzną biblioteką • Biblioteka jest plikiem zawierającym procedury (podprogramy), które zostały zasemblowane do kodu maszynowego • Biblioteka powstaje z pliku (lub kilku) zawierających kod źródłowy procedur i zasemblowanych do kodu pośredniego (object file) • Pliki z kodem pośrednim są wstawiane w specjalnie sformatowanym pliku Procedury biblioteczne • Załóżmy, że program korzysta z procedury bibliotecznej WriteString • Kod źródłowy programu musi zawierać dyrektywę PROTO WriteString PROTO • Następnie procedura wywoływana jest instrukcją call call WriteString • Podczas asemblacji asembler pozostawia puste miejsce tam gdzie miał być adres wywoływanej funkcji • Linker odnajduje w pliku biblioteki procedurę WriteString i kopiuje właściwy fragment kodu maszynowego do programu wykonywalnego, wstawiając jednocześnie adres tej procedury w miejsce operandu instrukcji call • W przypadku, gdy kod wywoływanej funkcji nie znajduje się w bibliotece, linker generuje błąd i nie generuje pliku wykonywalnego Opcje linkera • Linker łączy różne pliki z kodem pośrednim i pliki z bibliotekami • Przykład wywołania: link plik1.obj bib1.lib bib2.lib Linkowanie programów 32-bitowych • Biblioteka kernel32.lib jest częścią platformy MS Windows Software Development Kit, zawierającą informacje o dołączaniu funkcji systemowych umieszczonych w pliku kernel32.dll • Pliki *.dll to biblioteki zawierające funkcje dołączane dynamicznie (dll = dynamic link library) Schemat linkowania programów 32-bitowych linkowany Program bib1.lib może być linkowany może być linkowany kernel32.lib wykonywany kernel32.dll Stos • Struktura danych, na której dopuszczalne są tylko dwie operacje: – odłożenie elementu na wierzchołek stosu – pobranie elementu z wierzchołka stosu • Dwa znaczenia: – abstrakcyjna struktura danych w językach wysokiego poziomu (kolejka LIFO) – stos sprzętowy – część pamięci operacyjnej wykorzystywana między innymi w mechanizmie wywoływania podprogramów wspierana sprzętowo przez układy procesora Stos sprzętowy • Ciągły obszar pamięci operacyjnej zarządzany bezpośrednio przez CPU, za pośrednictwem rejestru ESP (wskaźnika stosu) • Zawartość rejestru bardzo rzadko jest modyfikowana bezpośrednio, zamiast tego modyfikowana jest pośrednio instrukcjami CALL, RET, PUSH i POP • W programach 32-bitowych (tryb chroniony) wierzchołek stosu adresowany jest za pomocą rejestru ESP, w programach 16-bitowych (tryb rzeczywisty) za pomocą rejestru SP • Stos rośnie w kierunku malejących adresów Schemat stosu Offset 00001000 00000008 ESP = 00001000 00000FFC 00000FF8 00000FF4 00000FF0 Operacja PUSH • Operacja, która dekrementuje wartość rejestru ESP o 4 (32-bitowa dana) i umieszcza daną pod adresem wskazywanym przez ESP Przed operacją Po operacji 00001000 00000008 ESP 00001000 00000008 ESP 00000FFC 00000FFC 000000E7 00000FF8 00000FF8 00000FF4 00000FF4 00000FF0 00000FF0 Operacja POP • Operacja, która pobiera daną spod adresu wskazywanego przez ESP i inkrementuje wartość rejestru ESP tak by wskazywała następny element stosu • Fragment stosu poniżej wierzchołka jest logicznie pusty Przed operacją Po operacji 00001000 00000008 00001000 00000008 00000FFC 000000E7 00000FFC 000000E7 00000FF8 00000001 00000FF8 00000001 ESP 00000FF4 0000002 ESP 00000FF4 00000FF0 00000FF0 Zastosowania stosu • Tymczasowy obszar składowania zawartości rejestrów, które używane są w więcej niż jednym celu, po modyfikacji zawartość rejestru może być przywrócona do poprzedniej wartości • Przechowywanie śladu powrotu po wywołaniu procedury instrukcją CALL • Przekazan

Recently converted files (publicly available):