Menu
Coddy logo textTech

Was ist ein Syscall?

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

Du hast Assembly-Anweisungen wie mov und lea geschrieben. Diese Anweisungen werden direkt auf der CPU ausgeführt. Aber was ist, wenn du etwas tun musst, das die CPU nicht selbst erledigen kann, zum Beispiel etwas auf dem Bildschirm ausgeben, von der Tastatur lesen oder ein Programm beenden?

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

Was ist ein Systemaufruf?

Ein syscall (Systemaufruf) ist eine Anfrage deines Programms an das Betriebssystem. So bittest du das Betriebssystem, etwas für dich zu erledigen.

Warum du Systemaufrufe benötigst:

AufgabeKann die CPU dies allein erledigen?Systemaufruf erforderlich?
Zwei Zahlen addierenJaNein
Daten zwischen Registern verschiebenJaNein
Text auf dem Bildschirm ausgebenNeinJa
Tastatureingaben lesenNeinJa
Ein Programm beendenNeinJa
Eine Datei öffnenNeinJa

So funktioniert ein Syscall:

  1. Du legst eine Syscall-Nummer in rax ab (teilst dem Betriebssystem mit, was du möchtest)
  2. Du legst Argumente in anderen Registern ab (rdi, rsi, rdx usw.)
  3. Du führst die syscall-Anweisung aus
  1. Die CPU springt in den Kernel des Betriebssystems
  2. Das Betriebssystem führt die Anfrage aus
  3. Das Betriebssystem gibt die Kontrolle an dein Programm zurück

Analogie:

Stell dir einen Systemaufruf wie den Anruf bei einer Behörde vor:

SchrittAnalogieIn Assembly
1Entscheide, welchen Dienst du benötigstWähle die Nummer des Systemaufrufs (in rax schreiben)
2Fülle die Formulare ausLege die Argumente in die Register
3Reiche den Antrag einFühre syscall aus
4Die Behörde verarbeitet ihnDer Betriebssystemkernel erledigt die Arbeit
5Erhalte dein Ergebnis zurückDas Programm wird fortgesetzt

Systemaufrufe, die du in diesem Kurs lernen wirst:

SystemaufrufNummerWas er tutKapitel
exit60Beendet das ProgrammKapitel 4
write1Gibt Text auf dem Bildschirm ausKapitel 5

Der wichtigste Systemaufruf für jetzt: <strong>exit</strong>

Ohne exit würde dein Programm für immer weiterlaufen oder abstürzen. Jedes Programm, das du schreibst, muss mit einem exit-Systemaufruf enden.

mov rax, 60    ; syscall number for exit
mov rdi, 0     ; exit code (0 = success)
syscall        ; ask the OS to exit

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

Übe selbstständig: Assembly-Playground