2012-01-24 8 views

risposta

4

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.


18

Estratto dal info as (GNU Binutils 2.21.90):

5.4 The Special Dot Symbol 
========================== 

The special symbol `.' refers to the current address that `as' is 
assembling into. Thus, the expression `melvin: .long .' defines 
`melvin' to contain its own address. Assigning a value to `.' is 
treated the same as a `.org' directive. Thus, the expression `.=.+4' 
is the same as saying `.space 4'. 
+0

grazie, ci proverò – orustam

Problemi correlati