Zwei Strings ausgeben
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy — Lektion 40 von 45.
Du weißt bereits, wie man einen String ausgibt. Aber was ist, wenn du zwei separate Strings ausgeben möchtest? Zum Beispiel "Hello " und dann "World!"?
Sie rufen einfach den write-Systemaufruf zweimal auf — einmal für jede Zeichenfolge.
Wie es funktioniert:
; Erste Ausgabe
mov rax, 1
mov rdi, 1
mov rsi, firstMsg
mov rdx, firstLen
syscall
; Zweite Ausgabe
mov rax, 1
mov rdi, 1
mov rsi, secondMsg
mov rdx, secondLen
syscallBeispiel:
section .data
first db 'Hello ', 0x0a
firstLen equ $-first
second db 'World!', 0x0a
secondLen equ $-second
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, first
mov rdx, firstLen
syscall
mov rax, 1
mov rdi, 1
mov rsi, second
mov rdx, secondLen
syscall
mov rax, 60
mov rdi, 0
syscallAusgabe:
Hello World!
Warum zwei Strings statt einem ausgeben?
| Grund | Beispiel |
|---|---|
| Wiederverwendbarkeit | Dieselbe Begrüßung mit verschiedenen Namen ausgeben |
| Flexibilität | Verschiedene Nachrichten basierend auf Bedingungen ausgeben |
| Organisation | Verschiedene Nachrichten getrennt im Speicher halten |
Sie können so viele Strings ausgeben, wie Sie möchten:
Wiederholen Sie einfach den write syscall für jeden String.
Aufgabe
Gegeben sind zwei Strings: partOne mit dem Wert 'Good' und partTwo mit dem Wert 'bye'. Beide haben bereits einen Zeilenumbruch am Ende.
Schreiben Sie den Code, um partOne und dann partTwo auszugeben, sodass die Ausgabe wie folgt aussieht:
Good
bye
Der data-Abschnitt und der exit-syscall sind bereits vorhanden. Sie müssen nur die beiden write-syscalls schreiben.
Probier es selbst
section .data
partOne db 'Good', 0x0a
partOneLen equ $-partOne
partTwo db 'bye', 0x0a
partTwoLen equ $-partTwo
section .text
global _start
_start:
; TODO: partOne mit dem write-Syscall ausgeben
; TODO: partTwo mit dem write-Syscall ausgeben
mov rax, 60
mov rdi, 0
syscall
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 Architektur3Erster Befehl - MOV
Was ist MOV?MOV ImmediateMOV Register zu RegisterMOV Speicher zu RegisterMOV Register zu SpeicherLEA - Adresse ladenMOV mit verschiedenen GrößenÜbung: Register tauschenRückblick: MOV Challenge6Write-Syscall
Write-Syscall (1)File Descriptor (rdi)Pufferadresse (rsi)Byte-Anzahl (rdx)Alles zusammenfügenZwei Strings ausgebenNewline ist wichtigRückblick: Write-Setup