Ensamblaje: segmentos de memoria
Ya hemos hablado de las tres secciones de un programa de montaje. Estas secciones también representan varios segmentos de memoria.
Curiosamente, si reemplaza la palabra clave de la sección con segmento, obtendrá el mismo resultado. Prueba el siguiente código:
segment .text ;code segment
global _start ;must be declared for linker
_start: ;tell linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
segment .data ;data segment
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Hello, world!
Segmentos de memoria
Un modelo de memoria segmentada divide la memoria del sistema en grupos de segmentos independientes referenciados por punteros ubicados en los registros de segmento. Cada segmento se utiliza para contener un tipo específico de datos. Un segmento se usa para contener códigos de instrucción, otro segmento almacena los elementos de datos y un tercer segmento mantiene la pila del programa.
A la luz de la discusión anterior, podemos especificar varios segmentos de memoria como:
Data segment - Está representado por .data sección y la .bss. La sección .data se utiliza para declarar la región de memoria, donde se almacenan los elementos de datos para el programa. Esta sección no se puede expandir después de que se declaran los elementos de datos y permanece estática en todo el programa.
La sección .bss también es una sección de memoria estática que contiene búferes para que los datos se declaren más adelante en el programa. Esta memoria intermedia está llena de ceros.
Code segment - Está representado por .textsección. Esto define un área en la memoria que almacena los códigos de instrucción. Esta también es un área fija.
Stack - Este segmento contiene valores de datos que se pasan a funciones y procedimientos dentro del programa.