2011-11-16 24 views
10

espero que estas preguntas es bastante simple: (NASM compilador, Linux, Intel x86 Sintaxis)x86 ASM Linux - Usando la Sección .bss

PARTE 1:

Estoy tratando de encontrar la manera de utilizar la sección .bss de un programa de ensamblado para encontrar una forma de almacenar valores, como un valor de una operación (+ - * /), en una variable declarada. Por ejemplo:

section .bss 

variable: resb 50          ;Imaginary buffer 

section .text 

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

lo tanto, sé que es posible hacer esto con la intterupt núcleo para leer la entrada del usuario (pero que involucra a las cadenas, pero ¿hay alguna forma de copiar este valor en la variable variables por lo ? que puede ser utilizado más adelante esto sería mucho más fácil que tener que empujar y hacer estallar dos cosas dentro y fuera de la pila

PARTE 2:.

¿hay una manera de quitar el valor de la variable en el .bss section? En otras palabras, si quiero almacenar un nuevo valor en la variable .bss, ¿cómo podría hacerlo? ¿No se combinan los caracteres/valores que ya están en la variable con los nuevos valores?

Gracias

Respuesta

25
section .bss 

variable: resb 4 

... el símbolo variable ahora se refiere a la dirección de 4 bytes de almacenamiento en la sección .bss (es decir, suficiente para almacenar un valor de 32 bits en).

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

... establece el registro eax a 123, y luego almacena el valor de eax en la ubicación dirigida por el símbolo variable.

mov eax, [variable] 

... lee el valor almacenado actualmente en la posición direccionada por variable en el registro eax.

mov eax, 456 
mov [variable], eax 

... almacena un nuevo valor, sobrescribiendo el anterior.

+0

Muy bien explicado, como siempre! – nmagerko

Cuestiones relacionadas