Menu
Coddy logo textTech

Czym jest syscall?

Część sekcji Podstawy ścieżki Assembly w Coddy. Lekcja 31 z 45.

Napisano już instrukcje asemblera, takie jak mov i lea. Te instrukcje są wykonywane bezpośrednio przez procesor. Ale co zrobić, jeśli trzeba wykonać coś, czego procesor nie potrafi samodzielnie, na przykład wyświetlić coś na ekranie, odczytać dane z klawiatury lub zakończyć program?

Do tych zadań potrzebujesz systemu operacyjnego (w tym kursie jest to Linux).

Czym jest syscall?

Syscall (wywołanie systemowe) to żądanie wysyłane przez program do systemu operacyjnego. W ten sposób prosisz system operacyjny o wykonanie czegoś za Ciebie.

Dlaczego potrzebujesz wywołań systemowych:

ZadanieCzy procesor może wykonać je samodzielnie?Czy potrzebne jest wywołanie systemowe?
Dodawanie dwóch liczbTakNie
Przenoszenie danych między rejestramiTakNie
Wyświetlanie tekstu na ekranieNieTak
Odczytywanie danych z klawiaturyNieTak
Zamykanie programuNieTak
Otwieranie plikuNieTak

Jak działa syscall:

  1. Umieszczasz numer syscalla w rax (informuje system operacyjny, czego chcesz)
  2. Umieszczasz argumenty w innych rejestrach (rdi, rsi, rdx itd.)
  3. Wykonujesz instrukcję syscall
  1. Procesor przechodzi do jądra systemu operacyjnego
  2. System operacyjny realizuje żądanie
  3. System operacyjny przekazuje sterowanie z powrotem do twojego programu

Analogia:

Wyobraź sobie wywołanie systemowe (syscall) jako kontakt z urzędem:

KrokAnalogiaW asemblerze
1Zdecyduj, jakiej usługi potrzebujeszWybierz numer wywołania systemowego (umieść go w rax)
2Wypełnij formularzeUmieść argumenty w rejestrach
3Złóż wniosekWykonaj syscall
4Urząd go rozpatrujeJądro systemu operacyjnego wykonuje pracę
5Odbierz wynikProgram działa dalej

Wywołania systemowe, których nauczysz się w tym kursie:

Wywołanie systemoweNumerCo robiRozdział
exit60Kończy programRozdział 4
write1Wyświetla tekst na ekranieRozdział 5

Na razie najważniejsze wywołanie systemowe: <strong>exit</strong>

Bez exit Twój program działałby w nieskończoność albo uległ awarii. Każdy napisany przez Ciebie program musi kończyć się wywołaniem systemowym exit.

mov rax, 60    ; numer wywołania systemowego dla exit
mov rdi, 0     ; kod zakończenia (0 = sukces)
syscall        ; poproś system operacyjny o zakończenie programu

Spróbuj swoich sił

Ta lekcja nie zawiera wyzwania z kodem.

quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Edytor online Assembly