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 erzeugt 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 |
Hinzufügen eines Zeilenumbruchs:
Um eine Zeichenfolge auszugeben und in die nächste Zeile zu springen, fügen Sie 0x0a (Zeilenumbruchzeichen) hinzu:
section .data
message db 'Hello', 0x0aJetzt hat der String 6 Bytes: 'H','e','l','l','o', Newline
Mehrere Strings:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aWarum das wichtig ist:
Strings sind die häufigsten Daten, die Sie in Assembly verwenden werden. Der write-Syscall (den Sie in Kapitel 5 kennenlernen werden) gibt Strings aus, indem er Bytes aus dem Speicher liest, bis er die von Ihnen angegebene Länge erreicht.
Wichtiger Hinweis:
Strings sind nur Bytes. Die CPU weiß nicht und es ist ihr egal, dass 'H' ein Buchstabe ist. Es ist einfach nur die Zahl 72. Der write-Syscall interpretiert diese Zahlen beim Drucken als Zeichen.
Aufgabe
EinfachErstelle einen String namens greeting mit dem Wert 'Hi' gefolgt von einem Zeilenumbruch (0x0a) im .data-Abschnitt.
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