Menu
Coddy logo textTech

Das $-Symbol

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

Wenn du eine Zeichenfolge mithilfe des write-syscall (Kapitel 5) ausgibst, musst du der CPU mitteilen, wie viele bytes ausgegeben werden sollen.

Du könntest die Zeichen manuell zählen:

message db 'Hello', 0x0a    ; 6 Bytes (H e l l o Zeilenumbruch)
mov rdx, 6                  ; Manuelle Zählung

Aber das manuelle Zählen ist langsam und fehleranfällig. Wenn du die Zeichenfolge änderst, musst du erneut zählen und die Zahl aktualisieren.

Die Lösung: automatische Längenberechnung mit <strong>$</strong>

$ ist der Positionszähler. Er stellt die aktuelle Speicheradresse dar, an der das nächste Byte platziert wird.

Beispiel 1: Einfacher String

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

So funktioniert es:

  • message ist die Startadresse (Beispiel: 1000)
  • Nach dem Speichern von 6 Bytes wird $ zu 1006
  • $ - message = 1006 − 1000 = 6 (die Länge)

Hinweis: equ steht für equate. Es erstellt eine Konstante: einen Namen, der einen Wert darstellt.

Beispiel 2: Mehrere Zeichenfolgen

section .data
    first db 'Hi', 0x0a
    len1 equ $ - first      ; len1 = 3 ('H','i', Zeilenumbruch)
    
    second db 'Hello', 0x0a
    len2 equ $ - second     ; len2 = 6 ('H','e','l','l','o', Zeilenumbruch)

Jeder string hat seine eigene length, die automatisch berechnet wird. Das $ wird für jede Berechnung zurückgesetzt, da es sich immer auf die aktuelle Position direkt nach jedem string bezieht.

challenge icon

Aufgabe

Einfach

Erstelle einen String namens city mit dem Wert 'Paris', gefolgt von einem Zeilenumbruch (0x0a). Erstelle dann eine Konstante namens cityLen, die die Länge automatisch mithilfe von $ - city berechnet.

Probier es selbst

%include "data.asm"

section .text
    global _start

_start:
    mov rax, 1
    mov rdi, 1
    mov rsi, city
    mov rdx, cityLen
    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