Programowanie niskopoziomowe / Moduł 3: Programowanie asemblerowe w środowisku systemu operacyjnego: Różnice pomiędzy wersjami
Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwaniaLinia 22: | Linia 22: | ||
|valign="top" width="500px"|[[Grafika:PNP_M3_S04.png]] | |valign="top" width="500px"|[[Grafika:PNP_M3_S04.png]] | ||
|valign="top"| | |valign="top"| | ||
− | ... | + | Program jest zapisany w postaci pliku, zawierającego zawartość poszczególnych sekcji – klas pamięci oraz informacje o sposobie ładownia (w tym np. rozmiary sekcji). Często postać ładowalna nie ma określonych adresów początkowych poszczególnych sekcji, co oznacza, że w programie nie są wpisane adresy bezwzględne obiektów, a jedynie ich adresy względem początku sekcji – w takim przypadku podczas ładowania system operacyjny dokonuje finalnej konsolidacji, tzw. relokacji programu, podczas której do wszystkich adresów dodawane są adresy początkowe sekcji, określone przez system operacyjny. |
+ | |||
+ | Po załadowaniu system przekazuje sterowanie do punktu wejścia programu. Wywołując program system operacyjny przekazuje do programu argumenty wywołania. | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 28: | Linia 30: | ||
|valign="top" width="500px"|[[Grafika:PNP_M3_S05.png]] | |valign="top" width="500px"|[[Grafika:PNP_M3_S05.png]] | ||
|valign="top"| | |valign="top"| | ||
− | . | + | Programowanie asemblerowe w środowisku systemu operacyjnego można przećwiczyć korzystając z symulatora architektury MIPS o nazwie SPIM. Symulator symuluje komputer z procesorem MIPS i prostym jednoprocesowym systemem operacyjnym udostępniającym funkcje obsługi wejścia-wyjścia. |
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 34: | Linia 36: | ||
|valign="top" width="500px"|[[Grafika:PNP_M3_S06.png]] | |valign="top" width="500px"|[[Grafika:PNP_M3_S06.png]] | ||
|valign="top"| | |valign="top"| | ||
− | . | + | Symulator zawiera wbudowany asembler, który akceptuje postać źródłową programu w formie pojedynczego modułu. |
+ | |||
+ | Symulator oraz towarzysząca mu dokumentacja są dostępne pod podanym adresem www. | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 64: | Linia 68: | ||
|valign="top" width="500px"|[[Grafika:PNP_M3_S11.png]] | |valign="top" width="500px"|[[Grafika:PNP_M3_S11.png]] | ||
|valign="top"| | |valign="top"| | ||
− | ... | + | Dyrektywa .data otwiera sekcję danych. W sekcji tej jest zdefiniowany łańcuch tekstowy. Dyrektywa .asciiz definiuje łańcuch zakończony bajtem o wartości 0. |
+ | |||
+ | Dyrektywa .text otwiera sekcję kodu. Kolejny dyrektywa deklaruje main jako symbol publiczny, co jest potrzebne wbudowanemu konsolidatorowi. Etykieta main jest punktem wejścia do prgramu. | ||
+ | |||
+ | Program korzysta z dwóch funkcji systemowych – wypisywania łańcucha na konsolę i zakończenia programu. | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 82: | Linia 90: | ||
|valign="top" width="500px"|[[Grafika:PNP_M3_S14.png]] | |valign="top" width="500px"|[[Grafika:PNP_M3_S14.png]] | ||
|valign="top"| | |valign="top"| | ||
− | ... | + | Dla porównania przyjrzyjmy się programowi asemblerowemu w języku asemblera procesorów rodziny x86, działającemu pod kontrolą systemu Linux. |
+ | |||
+ | W porównaniu ze środowiskiem SPIM mamy tu oczywiście do czynienia z odmiennym językiem asemblerowym, o odmiennych instrukcjach jak również nieco innej składni dyrektyw. | ||
+ | |||
+ | Istnieje wiele asemblerów dla procesorów x86, różniących się znacznie składnią. W dalszych przykładach będziemy używali składni zgodnej z asemblerem NASM, dostępnym w www.sourceforge.net. Analogiczną składnię mają inne darmowe asemblery – YASM i FASM. | ||
|} | |} | ||
<hr width="100%"> | <hr width="100%"> | ||
Linia 88: | Linia 100: | ||
|valign="top" width="500px"|[[Grafika:PNP_M3_S15.png]] | |valign="top" width="500px"|[[Grafika:PNP_M3_S15.png]] | ||
|valign="top"| | |valign="top"| | ||
− | . | + | hello jest adresem początku łańcucha. hello_len jest stałą zdefiniowaną w programie – nie zajmuje ona miejsca w pamięci. |
|} | |} | ||
<hr width="100%"> | <hr width="100%"> |
Aktualna wersja na dzień 20:52, 15 paź 2006
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
Symulator zawiera wbudowany asembler, który akceptuje postać źródłową programu w formie pojedynczego modułu. Symulator oraz towarzysząca mu dokumentacja są dostępne pod podanym adresem www. |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
... |
![]() |
hello jest adresem początku łańcucha. hello_len jest stałą zdefiniowaną w programie – nie zajmuje ona miejsca w pamięci. |
![]() |
... |
![]() |
... |