Strings mit db
Teil des Abschnitts Grundlagen der Assembly-Journey von Coddy. Lektion 28 von 45.
Du weißt bereits, dass db ein einzelnes Byte definiert. Aber db kann auch einen String definieren: mehrere Bytes hintereinander.
Syntax:
label db 'text here'Beispiel:
section .data
message db 'Hello'Dies erstellt 5 bytes im Speicher: 'H', 'e', 'l', 'l', 'o'
Was im Speicher passiert:
| Adresse | Byte | ASCII-Wert |
|---|---|---|
| message | 'H' | 72 |
| message+1 | 'e' | 101 |
| message+2 | 'l' | 108 |
| message+3 | 'l' | 108 |
| message+4 | 'o' | 111 |
Einen Zeilenumbruch hinzufügen:
Um eine string auszugeben und in die nächste Zeile zu wechseln, füge 0x0a hinzu (newline character):
section .data
message db 'Hello', 0x0aJetzt hat string 6 bytes: 'H','e','l','l','o', newline
Mehrere Zeichenketten:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aWarum das wichtig ist:
Strings sind die häufigsten Daten, die du in Assembly verwenden wirst. Der write-syscall (den du in Kapitel 5 kennenlernen wirst) gibt Strings aus, indem er Bytes aus dem Speicher liest, bis er die von dir angegebene Länge erreicht.
Wichtiger Hinweis:
Strings sind einfach bytes. Die CPU weiß nicht und kümmert sich nicht darum, dass „H“ ein Buchstabe ist. Es ist einfach die Zahl 72. Der write-syscall interpretiert diese Zahlen beim Ausgeben als Zeichen.
Aufgabe
EinfachErstelle im Abschnitt .data einen String namens greeting mit dem Wert 'Hi', gefolgt von einem Zeilenumbruch (0x0a).
Probier es selbst
%include "data.asm"
section .text
global _start
_start:
; Den String mit dem write-Syscall ausgeben
mov rax, 1
mov rdi, 1
mov rsi, greeting
mov rdx, 3 ; 'H', 'i', Zeilenumbruch = 3 Bytes
syscall
; Beenden
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