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 eine Zeichenfolge definieren: mehrere Bytes hintereinander.
Syntax:
label db 'text here'Beispiel:
section .data
message db 'Hello'Dadurch werden 5 Bytes im Speicher erzeugt: '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 Zeichenfolge auszugeben und zur nächsten Zeile zu wechseln, füge 0x0a (Zeilenumbruchzeichen) hinzu:
section .data
message db 'Hello', 0x0aJetzt hat die Zeichenkette 6 Bytes: 'H','e','l','l','o', Zeilenumbruch
Mehrere Zeichenfolgen:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aWarum das wichtig ist:
write-Systemaufruf (den du in Kapitel 5 kennenlernen wirst) gibt Zeichenketten aus, indem er Bytes aus dem Speicher liest, bis er die Länge erreicht, die du ihm angibst.
Wichtiger Hinweis:
Zeichenketten sind einfach nur Bytes. Die CPU weiß nicht und interessiert sich auch nicht dafür, dass „H“ ein Buchstabe ist. Es ist einfach die Zahl 72. Der write-Systemaufruf interpretiert diese Zahlen beim Ausgeben als Zeichen.
Aufgabe
EinfachErstelle eine Zeichenkette namens greeting mit dem Wert 'Hi', gefolgt von einem Zeilenumbruch (0x0a) im Abschnitt .data.
Probier es selbst
%include "data.asm"
section .text
global _start
_start:
; Die Zeichenkette mit dem write-Systemaufruf 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
Schlag den Code jedes Zeichens nach: ASCII-Konverter