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ählungAber 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 $ - messageSo funktioniert es:
messageist 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.
Aufgabe
EinfachErstelle 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
syscallDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Die Maschine
Was ist eine CPUSpeicherRegister vs. SpeicherWie Befehle funktionierenZwei-Dateien-MusterDie x86-64 ArchitekturÜbe selbstständig: Assembly-Playground