2011-11-16 9 views
10

Spero che queste domande è piuttosto semplice: (NASM Compiler, Linux, Intel x86 sintassi)x86 ASM Linux - Utilizzando la Sezione .bss

PARTE 1:

Sto cercando di capire come utilizzare la sezione .bss di un programma Assembly per trovare un modo per memorizzare valori, come un valore da un'operazione (+ - * /), a una variabile dichiarata. Per esempio:

section .bss 

variable: resb 50          ;Imaginary buffer 

section .text 

add 10,1             ;Operation 
;move the result into variable 

Quindi, so che è possibile farlo con l'intterupt kernel per leggere l'input dell'utente (ma che coinvolge le stringhe, ma c'è un modo per copiare questo valore nella variabile variabile così ? che può essere utilizzato in seguito Questo sarebbe molto più facile che dover spingere e pop due cose dentro e fuori lo stack

PARTE 2:.

esiste un modo per rimuovere il valore della variabile nella .bss section? In altre parole, se voglio memorizzare un nuovo valore nella variabile .bss, come posso farlo? i caratteri/valori già presenti nella variabile non vengono combinati con i nuovi valori?

Grazie

risposta

25
section .bss 

variable: resb 4 

... il simbolo variable ora si riferisce all'indirizzo di 4 byte di archiviazione nella sezione .bss (cioè sufficiente per memorizzare un valore di 32 bit in).

section .text 
... 
mov eax, 123 
mov [variable], eax 

... imposta registro eax a 123, e quindi memorizza il valore della eax nella posizione indirizzata dal simbolo variable.

mov eax, [variable] 

... legge il valore attualmente memorizzato nella locazione indirizzata dal variable nel registro eax.

mov eax, 456 
mov [variable], eax 

... memorizza un nuovo valore, sovrascrivendo quello precedente.

+0

Molto ben spiegato, come sempre! – nmagerko