Alles zusammenfügen
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 39 von 45.
Sie haben alle vier Teile des write-Syscalls gelernt:
| Register | Inhalt | Wert für die Bildschirmausgabe |
|---|---|---|
rax | Syscall-Nummer | 1 (write) |
rdi | Dateideskriptor | 1 (stdout) |
rsi | Pufferadresse | Adresse Ihres Strings |
rdx | Byte-Anzahl | Länge Ihres Strings |
Jetzt ist es an der Zeit, alles zusammenzufügen.
Das vollständige write-Syscall-Muster:
mov rax, 1 ; Syscall-Nummer für write
mov rdi, 1 ; Dateideskriptor (stdout)
mov rsi, msg ; Adresse des Strings
mov rdx, msgLen ; Anzahl der zu druckenden Bytes
syscall ; das Betriebssystem zum Drucken auffordernEin vollständiges, funktionierendes Programm:
section .data
msg db 'Hello, World!', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, msgLen
syscall
mov rax, 60
mov rdi, 0
syscallWas dieses Programm macht:
| Schritt | Was passiert |
|---|---|
| 1 | Gibt "Hello, World!" auf dem Bildschirm aus |
| 2 | Wechselt in eine neue Zeile |
| 3 | Beendet sauber mit Code 0 |
Die Reihenfolge ist wichtig:
Sie müssen die Register einrichten, bevor Sie syscall ausführen. Die Reihenfolge der mov-Anweisungen spielt keine Rolle, solange alle vier vor syscall gesetzt sind.
Aufgabe
Schreiben Sie ein vollständiges Programm, das die Nachricht "Assembly is fun" gefolgt von einem Zeilenumbruch ausgibt und sich dann sauber beendet.
Der String und seine Länge sind bereits definiert. Sie müssen nur den Code innerhalb von _start: schreiben.
Probier es selbst
section .data
msg db 'Assembly is fun', 0x0a
msgLen equ $ - msg
section .text
global _start
_start:
; TODO: Den write-Syscall einrichten und aufrufen
; Verwende rax=1, rdi=1, rsi=msg, rdx=msgLen
; TODO: Sauber mit Code 0 beenden
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Die Maschine
Was ist eine CPUSpeicherRegister vs. SpeicherWie Befehle funktionierenZwei-Dateien-MusterDie x86-64 Architektur