Menu
Coddy logo textTech

Das $-Symbol

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

Wenn Sie einen String mit dem write-Systemaufruf (Kapitel 5) ausgeben, müssen Sie der CPU mitteilen, wie viele Bytes gedruckt werden sollen.

Sie könnten die Zeichen manuell zählen:

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

Aber manuelles Zählen ist langsam und fehleranfällig. Wenn Sie den String ändern, müssen Sie neu zählen und die Zahl aktualisieren.

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

$ ist der Positionszähler — er repräsentiert die aktuelle Speicheradresse, an der das nächste Byte platziert wird.

Beispiel 1: Einfacher String

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

Wie es funktioniert:

  • 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 Strings

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 Länge, 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

Erstellen Sie einen String namens city mit dem Wert 'Paris' gefolgt von einem Zeilenumbruch (0x0a). Erstellen Sie dann eine Konstante namens cityLen, die automatisch die Länge unter Verwendung 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