Stringhe con db
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 28 di 45.
Sai già che db definisce un singolo byte. Ma db può anche definire una stringa: più byte consecutivi.
Sintassi:
label db 'text here'Esempio:
section .data
message db 'Hello'Questo crea 5 byte in memoria: 'H', 'e', 'l', 'l', 'o'
Cosa succede in memoria:
| Indirizzo | Byte | Valore ASCII |
|---|---|---|
| message | 'H' | 72 |
| message+1 | 'e' | 101 |
| message+2 | 'l' | 108 |
| message+3 | 'l' | 108 |
| message+4 | 'o' | 111 |
Aggiungere una nuova riga:
Per stampare una stringa e passare alla riga successiva, aggiungi 0x0a (carattere di nuova riga):
section .data
message db 'Hello', 0x0aOra la stringa ha 6 byte: 'H','e','l','l','o', newline
Stringhe multiple:
section .data
hello db 'Hello', 0x0a
goodbye db 'Goodbye', 0x0aPerché è importante:
Le stringhe sono i dati più comuni che userai in assembly. La chiamata di sistema write (che imparerai nel capitolo 5) stampa le stringhe leggendo i byte dalla memoria fino a raggiungere la lunghezza che le indichi.
Nota importante:
Le stringhe sono solo byte. Alla CPU non importa e non sa che 'H' è una lettera. È semplicemente il numero 72. La syscall write interpreta quei numeri come caratteri quando li stampa.
Sfida
FacileCrea una stringa chiamata greeting con il valore 'Hi' seguito da un carattere di nuova riga (0x0a) nella sezione .data.
Provalo tu
%include "data.asm"
section .text
global _start
_start:
; Stampa la stringa usando la chiamata di sistema write
mov rax, 1
mov rdi, 1
mov rsi, greeting
mov rdx, 3 ; 'H', 'i', carattere di nuova riga = 3 byte
syscall
; Esci
mov rax, 60
mov rdi, 0
syscallQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1La macchina
Che cos’è la CPUMemoriaRegistri vs memoriaCome funzionano le istruzioniSchema a due fileL’architettura x86-642Sistemi numerici
Perché il binario?Numeri binariDa decimale a binarioPerché l'esadecimale?Da esadecimale a decimaleDa decimale a esadecimaleASCII ed esadecimale5Chiamata di sistema di uscita
Cos'è una chiamata di sistema?Chiamata di sistema di uscita (60)Codici di uscitaRiepilogo: uscita correttaEsercitati da solo: Playground Assembly