Menu
Coddy logo textTech

Byte-Anzahl (rdx)

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

Du hast dem Betriebssystem mitgeteilt, wo es drucken soll (rdi) und was es drucken soll (rsi). Jetzt musst du ihm sagen, wie viele bytes es drucken soll.

Das Register für die Anzahl der bytes ist rdx.

Warum benötigt das Betriebssystem die Länge?

Das Betriebssystem weiß nicht, wo dein string endet. Ohne eine Länge würde es den Speicher für immer weiterlesen. Die Länge teilt dem Betriebssystem genau mit, wann es anhalten soll.

Beispiel:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rdx, msgLen      ; rdx = Anzahl der zu druckenden Bytes

Was passiert, wenn die Länge falsch ist?

Wenn du festlegstErgebnis
Zu kurzNur ein Teil des Strings wird ausgegeben
Zu langDas Betriebssystem liest hinter deinem String weiter im Speicher: Es werden möglicherweise zufällige Zeichen ausgegeben oder das Programm stürzt ab
NullEs wird nichts ausgegeben

Länge automatisch berechnen:

Du hast das Muster $ - label bereits in Kapitel 3 gelernt:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg    ; msgLen = 6 (Hello + Zeilenumbruch)

Dadurch ist die Länge immer korrekt, selbst wenn du den String änderst.

Vollständiges Beispiel:

section .data
    msg db 'Hello', 0x0a
    msgLen equ $ - msg

section .text
    mov rax, 1           ; write-Syscall
    mov rdi, 1           ; Standardausgabe
    mov rsi, msg         ; Adresse des Strings
    mov rdx, msgLen      ; Anzahl der Bytes
    syscall
challenge icon

Aufgabe

Gegeben ist eine Zeichenkette namens color mit dem Wert 'Red', gefolgt von einem Zeilenumbruch. Eine Konstante namens colorLen wurde bereits mithilfe von $ - color definiert.

Schreibe die Codezeile, die rdx mithilfe der Konstante colorLen auf die Länge der Zeichenkette setzt.

Schreibe nur die mov-Anweisung für rdx.

Probier es selbst

section .text
    global _start

_start:
    ; Der Code des Studenten wird zuerst ausgeführt (setzt rdx)
    %include "solution.asm"
    
    mov rax, 1
    mov rdi, 1
    mov rsi, color
    ; rdx enthält bereits die Länge (vom Code des Studenten)
    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

Übe selbstständig: Assembly-Playground