You are on page 1of 3

DATA SEGMENT

Qu es? Es una de las secciones de un programa en un objeto de archivo o en la memoria, que contiene el variables globales y variables estticas que se inicializan por el programador. Tiene un tamao fijo, ya que todos los datos de esta seccin se establecen por el programador antes de que el programa se carga. Sin embargo, no es de slo lectura, Ya que los valores de las variables pueden ser modificados en tiempo de ejecucin. Esto est en contraste con la Rodata (Constante, los datos de slo lectura) en la seccin, as como el cdigo de segmento (Tambin conocido como segmento de texto). En la arquitectura de PC hay cuatro bsicas de lectura y escritura regiones de memoria en un programa: Datos.- Contiene las variables globales y estticos utilizados por el programa que se inicializan. Este segmento puede ser clasificada en el rea inicializado de slo lectura y se inicializa la zona de lectura y escritura. BSS segmento.- conocido como Sin inicializar los datos comienza al final del segmento de datos y contiene todas las variables sin inicializar variables estticas y globales que se inicializan a cero de forma predeterminada.

Montn de espacio.- comienza a finales de la BSS segmento y crece a grandes direcciones de all. El rea de montn es dirigido por malloc, Realloc, y libre, que pueden utilizar el sistema brk y sbrk llamadas, para ajustar el tamao (aunque tenga en cuenta que el uso de brk / sbrk y una sola "zona escombrera" no est obligado a cumplir el contrato de malloc / realloc / gratuita , sino que tambin puede ser implementado usando mmap para reservar regiones potencialmente no contiguos de memoria virtual en el proceso ' espacio de direcciones virtuales). El rea de montn es compartida por todas las bibliotecas compartidas y mdulos de carga dinmica de un proceso. Apilar.- es una LIFO estructura, normalmente se encuentra en la parte alta de la memoria. Por lo general, "crece hacia abajo" con todos los registros, el valor inmediato o marco de pila se aadi a la misma. Un marco de pila se compone como mnimo de una direccin de retorno. EJEMPLO Este ejemplo est completamente desarrollado en lenguaje ensamblador que usa servicios o funciones de MS-DOS (systemcalls) para imprimir el mensaje Hola mundo!! en pantalla. ; HOLA.ASM ; Programa clasico de ejemplo. Despliega una leyenda en pantalla. STACK SEGMENT STACK ; Segmento de pila DW 64 DUP (?) ; Define espacio en la pila STACK ENDS DATA SEGMENT ; Segmento de datos SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena DATA ENDS CODE SEGMENT ; Segmento de Codigo ASSUME CS:CODE, DS:DATA, SS:STACK INICIO: ; Punto de entrada al programa MOV AX,DATA ; Pone direccion en AX MOV DS,AX ; Pone la direccion en los registros MOV DX,OFFSET SALUDO ; Obtiene direccion del mensaje MOV AH,09H ; Funcion: Visualizar cadena INT 21H ; Servicio: Funciones alto nivel DOS MOV AH,4CH ; Funcion: Terminar INT 21H

CODE ENDS END INICIO ; Marca fin y define INICIO La descripcin es como sigue: 1.- Las declaraciones SEGMENT y ENDS definen los segmentos a usar. 2.- La variable SALUDO en el segmento DATA, define la cadena a ser desplegada. El signo de dlares al final de la cadena (denominado centinela) es requerido por la funcin de visualizacin de la cadena de MS-DOS. La cadena incluye los cdigos para carriage-return y line-feed. 3.- La etiqueta START en el segmento de cdigo marca el inicio de las instrucciones del programa. 4.- La declaracin DW en el segmento de pila define el espacio para ser usado por el stack del programa. 5.- La declaracin ASSUME indica que registros de segmento se asociarn con las etiquetas declaradas en las definiciones de segmentos. 6.- Las primeras dos instrucciones cargan la direccin del segmento de datos en el registro DS. Estas instrucciones no son necesarias para los segmentos de cdigo y stack puesto que la direccin del segmento de cdigo siempre es cargado en el registro CS y la direccin de la declaracin del stacksegment es automticamente cargada en el registro SS. 7.- Las ltimas dos instrucciones del segmento CODE usa la funcin 4CH de MS-DOS para regresar el control al sistema operativo. Existen muchas otras formas de hacer esto, pero sta es la ms recomendada. 8.- La directiva END indica el final del cdigo fuente y especifica a START como punto de arranque. El formato: De acuerdo a las convenciones y notacin seguidas en el manual del Microsoft Macro Assembler, y que usaremos nosotros tambin, tenemos: Cada programa en lenguaje ensamblador es creado a partir de un archivo fuente de cdigo ensamblador. Estos son archivos de texto que contienen todas las declaraciones de datos e instrucciones que componen al programa y que se agrupan en reas o secciones, cada una con un propsito especial. Las sentencias en ensamblador tienen la siguiente sintaxis: [nombre] mnemnico [operandos] [;comentarios] En cuanto a la estructura, todos los archivos fuente tienen la misma forma: cero o ms segmentos de programa seguidos por una directiva END. No hay una regla sobre la estructura u orden que deben seguir las diversas secciones o reas en la creacin del cdigo fuente de un programa en ensamblador. Sin embargo la mayora de los programas tiene un segmento de datos, un segmento de cdigo y un segmento de stack, los cuales pueden ser puestos en cualquier lugar. Para la definicin de datos y declaracin de instrucciones y operandos el MASM reconoce el conjunto de caracteres formado por letras maysculas, letras minsculas (excluyendo caracteres acentuados, , ), nmeros, y los smbolos: ? @_$:.[]() {}+-/*&%!~=#;," La declaracin de nmeros requiere tener presente ciertas consideraciones. En el MASM un entero se refiere a un nmero entero: combinacin de dgitoshexadecimales, octales, decimales o binarios, ms una raz opcional. La raz se especifica con B, Q u O, D, o H. El ensamblador usar siempre la raz decimal por defecto, si se omite la especificacin de la raz (la cual se puede cambiar con la directiva .RADIX). As nosotros podemos especificar un entero de la siguiente manera: dgitos, dgitosB, dgitosQ o dgitosO, dgitosD, dgitosH. Si una D o B aparecen al final de un nmero, stas siempre se considerarn un indicador de raz, e.g. 11B ser tratado como 112 (210), mientras que si se trata del nmero 11B16 debe introducirse como 11Bh. Para los nmeros reales tenemos al designadorR, que slo puede ser usado con nmeros hexadecimales de 8, 16, 20 dgitos de la forma dgitosR. Tambin puede usarse una de las directivas DD, DQ, y DT con el formato [+]dgitos.dgitos[E[+-]igitos]. Las cadenas de carcter y constantes alfanumricas son formadas como caracteres o "caracteres" . Para referencias simblicas se utilizan cadenas especiales denominadas nombres. Los nombres son cadenas de caracteres que no se

entrecomillany que deben comenzar con una A..Z a..z _ $ @los caracteres restantes pueden ser cualquiera de los permitidos, y solamente los 31 primeros caracteres son reconocidos.