C'è un utile confronto tra gas e NASM qui: http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html
si veda in particolare questa parte, che credo gli indirizzi alla tua domanda:
Listing 2 introduce anche il concetto di un contatore di posizione (linea 6). NASM fornisce una variabile speciale (le variabili $ e $$) per manipolare il contatore di posizione. In GAS, non esiste un metodo per manipolare il contatore di posizione e si devono usare le etichette per calcolare la posizione di archiviazione successiva (dati, istruzioni, ecc.). Ad esempio, per calcolare la lunghezza di una stringa, è necessario utilizzare il seguente idioma in NASM:
prompt_str db 'Enter your name: '
STR_SIZE equ $ - prompt_str ; $ is the location counter
Il $ indica il valore corrente del contatore posizione, e sottraendo il valore del marchio (tutti i nomi delle variabili sono etichette) da questo contatore posizione indica il numero di byte presenti tra la dichiarazione dell'etichetta e la posizione corrente. La direttiva equ è usata per impostare il valore della variabile STR_SIZE all'espressione che lo segue. Un linguaggio simile a GAS si presenta così:
prompt_str:
.ascii "Enter Your Name: "
pstr_end:
.set STR_SIZE, pstr_end - prompt_str
L'etichetta fine (pstr_end) dà la seguente indirizzo di posizione, e sottraendo l'indirizzo iniziale dell'etichetta dà la dimensione. Si noti anche l'uso di .set per inizializzare il valore della variabile STR_SIZE all'espressione che segue la virgola. Può anche essere usato un corrispondente .equ. Non c'è alternativa alla direttiva set GAS in NASM.
fonte
2012-01-24 13:52:54
grazie, ci proverò – orustam