Newline ist wichtig
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 41 von 45.
Du hast am Ende deiner Zeichenfolgen 0x0a (Zeilenumbruch) hinzugefügt. Aber was passiert, wenn du ihn vergisst?
Ohne Zeilenumbruch:
Der Text wird ausgegeben, aber der Cursor bleibt in derselben Zeile. Jede zukünftige Ausgabe erscheint direkt daneben.
Beispiel ohne Zeilenumbruch:
section .data
first db 'Hello'
firstLen equ $ - first
second db 'World'
secondLen equ $ - second
section .text
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
syscallAusgabe:
HelloWorld
Kein Leerzeichen. Kein Zeilenumbruch. Alles klebt zusammen.
Mit Zeilenumbruch:
section .data
first db 'Hello', 0x0a
firstLen equ $ - first
second db 'World', 0x0a
secondLen equ $ - secondAusgabe:
Hello
WorldJede Zeichenkette wird in einer eigenen Zeile ausgegeben.
Was ein Zeilenumbruch bewirkt:
| Zeichen | ASCII | Wirkung |
|---|---|---|
0x0a | 10 | Bewegt den Cursor an den Anfang der nächsten Zeile |
Häufige Fehler bei Zeilenumbrüchen:
| Fehler | Ergebnis |
|---|---|
| Überhaupt kein Zeilenumbruch | Der Text steht ohne Trennung in einer Zeile |
| Zeilenumbruch nur am Ende des letzten Strings | Die vorherigen Strings stehen ohne Trennung zusammen, der letzte steht in der nächsten Zeile |
| Zeilenumbruch mitten in einem String | Zeilenumbrüche an unerwarteten Stellen |
Die sichere Regel:
Füge immer 0x0a am Ende jeder Zeichenkette hinzu, die in einer eigenen Zeile stehen soll.
Aufgabe
Dir werden drei Zeichenfolgen ohne Zeilenumbrüche gegeben. Deine Aufgabe ist es, sie so auszugeben, dass sie in drei separaten Zeilen erscheinen.
Die Zeichenfolgen sind:
| Zeichenfolge | Wert |
|---|---|
word1 | 'Apple' |
word2 | 'Banana' |
word3 | 'Cherry' |
Anforderungen:
- Definiere jede Zeichenfolge mit einem Zeilenumbruch (
0x0a) am Ende - Berechne die Länge jeder Zeichenfolge automatisch
- Gib alle drei Zeichenfolgen mit dem write-Systemaufruf aus
- Beende das Programm ordnungsgemäß mit dem Code 0
Probier es selbst
section .data
; TODO: word1 mit dem 1. in der Aufgabenstellung aufgeführten Text und einem Zeilenumbruch definieren
; TODO: word2 mit dem 2. in der Aufgabenstellung aufgeführten Text und einem Zeilenumbruch definieren
; TODO: word3 mit dem 3. in der Aufgabenstellung aufgeführten Text und einem Zeilenumbruch definieren
; TODO: Die Länge jeder Zeichenkette berechnen
section .text
global _start
_start:
; TODO: word1 ausgeben
; TODO: word2 ausgeben
; TODO: word3 ausgeben
; TODO: Das Programm ordnungsgemäß 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Übe selbstständig: Assembly-Playground