Menu
Coddy logo textTech

Was ist ein Syscall?

Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 31 von 45.

Sie haben Assembler-Befehle wie mov und lea geschrieben. Diese Befehle werden direkt auf der CPU ausgeführt. Aber was ist, wenn Sie etwas tun müssen, das die CPU nicht alleine tun kann – wie zum Beispiel auf den Bildschirm ausgeben, von der Tastatur lesen oder ein Programm beenden?

Für diese Aufgaben benötigen Sie das Betriebssystem (Linux, in diesem Kurs).

Was ist ein Syscall?

Ein Syscall (Systemaufruf) ist eine Anfrage Ihres Programms an das Betriebssystem. So bitten Sie das Betriebssystem, etwas für Sie zu tun.

Warum man Syscalls benötigt:

AufgabeKann die CPU das alleine?Syscall erforderlich?
Zwei Zahlen addierenJaNein
Daten zwischen Registern verschiebenJaNein
Text auf dem Bildschirm ausgebenNeinJa
Tastatureingabe lesenNeinJa
Ein Programm beendenNeinJa
Eine Datei öffnenNeinJa

Wie ein Syscall funktioniert:

  1. Man legt eine Syscall-Nummer in rax (teilt dem Betriebssystem mit, was man möchte)
  2. Man legt Argumente in andere Register (rdi, rsi, rdx, etc.)
  3. Man führt den syscall-Befehl aus
  1. Die CPU springt in den Betriebssystem-Kernel
  2. Das Betriebssystem führt die Anfrage aus
  3. Das Betriebssystem gibt die Kontrolle an Ihr Programm zurück

Analogie:

Stellen Sie sich einen Syscall wie den Anruf bei einer Behörde vor:

SchrittAnalogieIn Assembly
1Entscheiden Sie, welchen Dienst Sie benötigenSyscall-Nummer wählen (in rax schreiben)
2Formulare ausfüllenArgumente in Register schreiben
3Anfrage einreichensyscall ausführen
4Behörde bearbeitet sieBetriebssystem-Kernel erledigt die Arbeit
5Ergebnis erhaltenProgramm wird fortgesetzt

Syscalls, die Sie in diesem Kurs lernen werden:

SyscallNummerFunktionKapitel
exit60Beendet das ProgrammKapitel 4
write1Gibt Text auf dem Bildschirm ausKapitel 5

Der wichtigste Syscall für den Moment: <strong>exit</strong>

Ohne exit würde Ihr Programm ewig weiterlaufen oder abstürzen. Jedes Programm, das Sie schreiben, muss mit einem exit-Syscall enden.

mov rax, 60    ; Syscall-Nummer für exit
mov rdi, 0     ; Exit-Code (0 = Erfolg)
syscall        ; das Betriebssystem zum Beenden auffordern

Probier es selbst

Diese Lektion enthält keine Programmieraufgabe.

quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen