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, wohin es ausgeben soll (rdi) und was es ausgeben soll (rsi). Jetzt musst du ihm mitteilen, wie viele Bytes ausgegeben werden sollen.

Das Register für die Byte-Anzahl ist rdx.

Warum benötigt das OS die Länge?

Das OS weiß nicht, wo Ihr String endet. Ohne eine Längenangabe würde es den Speicher unendlich lange weiterlesen. Die Länge sagt dem OS genau, wann es stoppen muss.

Beispiel:

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

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

Was passiert, wenn die Länge falsch ist?

EinstellungErgebnis
Zu kurzNur ein Teil des Strings wird ausgegeben
Zu langDas Betriebssystem liest über Ihren String hinaus in den Garbage-Speicher weiter – dies kann zur Ausgabe von Zufallszeichen oder zu einem Absturz führen
NullNichts wird ausgegeben

Länge automatisch berechnen:

Sie haben bereits das $ - label Muster in Kapitel 3 gelernt:

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

Dies stellt sicher, dass die Länge immer korrekt ist, selbst wenn Sie die Zeichenfolge ändern.

Vollständiges Beispiel:

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

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

Aufgabe

Ihnen wird eine Zeichenfolge namens color mit dem Wert 'Red' gefolgt von einem Zeilenumbruch gegeben. Eine Konstante namens colorLen wurde bereits mit $ - color definiert.

Schreiben Sie die Codezeile, die rdx unter Verwendung der Konstante colorLen auf die Länge der Zeichenfolge setzt.

Schreiben Sie nur die mov-Anweisung für rdx.

Probier es selbst

section .text
    global _start

_start:
    ; Der Code des Schülers 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 (aus dem Code des Schülers)
    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