Il simbolo $
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 29 di 45.
Quando stampi una stringa usando la chiamata di sistema write (Capitolo 5), devi dire alla CPU quanti byte stampare.
Potresti contare manualmente i caratteri:
message db 'Hello', 0x0a ; 6 byte (H e l l o carattere di nuova riga)
mov rdx, 6 ; Conteggio manualeMa il conteggio manuale è lento e soggetto a errori. Se modifichi la stringa, devi contarla di nuovo e aggiornare il numero.
La soluzione: calcolo automatico della lunghezza usando $
$ è il contatore di posizione. Rappresenta l'indirizzo di memoria corrente in cui verrà collocato il byte successivo.
Esempio 1: Stringa semplice
section .data
message db 'Hello', 0x0a
msgLen equ $ - messageCome funziona:
messageè l'indirizzo iniziale (esempio: 1000)- Dopo aver memorizzato 6 byte,
$diventa 1006 $ - message= 1006 − 1000 = 6 (la lunghezza)
Nota: equ sta per equivalere. Crea una costante: un nome che rappresenta un valore.
Esempio 2: stringhe multiple
section .data
first db 'Hi', 0x0a
len1 equ $ - first ; len1 = 3 ('H','i', nuova riga)
second db 'Hello', 0x0a
len2 equ $ - second ; len2 = 6 ('H','e','l','l','o', nuova riga)Ogni stringa ha la propria lunghezza, calcolata automaticamente. $ si azzera a ogni calcolo perché si riferisce sempre alla posizione corrente subito dopo ogni stringa.
Sfida
FacileCrea una stringa chiamata city con il valore 'Paris' seguito da un carattere di nuova riga (0x0a). Poi crea una costante chiamata cityLen che calcola automaticamente la lunghezza usando $ - city.
Provalo tu
%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
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