Menu
Coddy logo textTech

Newline ist wichtig

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

Sie haben am Ende Ihrer Strings 0x0a (Zeilenumbruch) hinzugefügt. Aber was passiert, wenn Sie es vergessen?

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
    syscall

Ausgabe:

HelloWorld

Kein Leerzeichen. Kein Zeilenumbruch. Alles ist zusammengeschrieben.

Mit Zeilenumbruch:

section .data
    first db 'Hello', 0x0a
    firstLen equ $ - first
    second db 'World', 0x0a
    secondLen equ $ - second

Ausgabe:

Hello World

Jeder String wird in einer eigenen Zeile ausgegeben.

Was ein Zeilenumbruch bewirkt:

ZeichenASCIIEffekt
0x0a10Bewegt den Cursor an den Anfang der nächsten Zeile

Häufige Zeilenumbruch-Fehler:

FehlerErgebnis
Überhaupt kein ZeilenumbruchText läuft in einer Zeile zusammen
Zeilenumbruch nur am Ende des letzten StringsVorherige Strings laufen zusammen, der letzte geht in die nächste Zeile
Zeilenumbruch in der Mitte eines StringsZeilenumbrüche an unerwarteten Stellen

Die sichere Regel:

Fügen Sie immer 0x0a am Ende jeder Zeichenfolge hinzu, die in einer eigenen Zeile stehen soll.

challenge icon

Aufgabe

Sie erhalten drei Zeichenfolgen ohne Zeilenumbrüche. Ihre Aufgabe ist es, diese so auszugeben, dass sie in drei separaten Zeilen erscheinen.

Die Zeichenfolgen sind:

ZeichenfolgeWert
word1'Apple'
word2'Banana'
word3'Cherry'

Anforderungen:

  • Definieren Sie jede Zeichenfolge mit einem Zeilenumbruch (0x0a) am Ende
  • Berechnen Sie die Länge jeder Zeichenfolge automatisch
  • Geben Sie alle drei Zeichenfolgen mit dem write syscall aus
  • Beenden Sie das Programm sauber mit dem Code 0

Probier es selbst

section .data
    ; TODO: Definiere word1 mit 'Apple' und Zeilenumbruch
    ; TODO: Definiere word2 mit 'Banana' und Zeilenumbruch
    ; TODO: Definiere word3 mit 'Cherry' und Zeilenumbruch
    ; TODO: Berechne die Längen für jede Zeichenkette

section .text
    global _start

_start:
    ; TODO: Gib word1 aus
    ; TODO: Gib word2 aus
    ; TODO: Gib word3 aus

    ; TODO: Sauber beendensection .data
    word1 db 'Apple', 0x0a
    word1Len equ $ - word1
    word2 db 'Banana', 0x0a
    word2Len equ $ - word2
    word3 db 'Cherry', 0x0a
    word3Len equ $ - word3

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, word1
    mov rdx, word1Len
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, word2
    mov rdx, word2Len
    syscall

    mov rax, 1
    mov rdi, 1
    mov rsi, word3
    mov rdx, word3Len
    syscall

    mov rax, 60
    mov rdi, 0
    syscall
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