Zwei Strings ausgeben
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 40 von 45.
Du weißt bereits, wie du eine Zeichenkette ausgibst. Aber was, wenn du zwei separate Zeichenketten ausgeben möchtest? Zum Beispiel „Hello “ und dann „World!“?
Du rufst den write-Systemaufruf einfach zweimal auf, einmal für jede Zeichenfolge.
So funktioniert es:
; 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!
Jede Zeichenkette endet mit 0x0a (einem Zeilenumbruch), sodass die beiden Zeichenketten in getrennten Zeilen ausgegeben werden.
Warum zwei Zeichenfolgen statt einer ausgeben?
| Grund | Beispiel |
|---|---|
| Wiederverwendbarkeit | Dieselbe Begrüßung mit verschiedenen Namen ausgeben |
| Flexibilität | Je nach Bedingungen verschiedene Nachrichten ausgeben |
| Organisation | Verschiedene Nachrichten im Speicher getrennt halten |
Du kannst so viele Zeichenketten ausgeben, wie du möchtest:
Wiederhole einfach den write-Systemaufruf für jede Zeichenkette.
Aufgabe
Dir werden zwei Zeichenfolgen gegeben: partOne mit dem Wert 'Good' und partTwo mit dem Wert 'bye'. Beide haben bereits einen Zeilenumbruch am Ende.
Schreibe den Code, um partOne und dann partTwo auszugeben, sodass die Ausgabe Folgendes zeigt:
Good
bye
Der Datenabschnitt und der Exit-Systemaufruf sind bereits vorgegeben. Du musst nur die beiden write-Systemaufrufe 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: Gib partOne mit dem write-Systemaufruf aus
; TODO: Gib partTwo mit dem write-Systemaufruf aus
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Übe selbstständig: Assembly-Playground