consulta de practica 1 de laboratorio

consulta de practica 1 de laboratorio

de Miguel Angel Martinez Recalde -
Número de respuestas: 2
Hola; quería preguntar, cual es la función de la directiva .text y en que se diferencia con la directiva .org, que se pone al comienzo del código de un programa. Y también quisiera saber, cual es la diferencia en usar la directiva .data con la directiva .org, que se utiliza al comienzo de la definición de variables con la directiva DB. Desde ya, gracias.
En respuesta a Miguel Angel Martinez Recalde

Re: consulta de practica 1 de laboratorio

de Manuel Urquiola -

Buenas!

La directiva .org es la que nos permite posicionar en memoria nuestro programa según nuestra preferencia, le da la información al compilador de a partir de qué dirección poner el código que escribas a continuación.

El  .text y .data por sí solos no dan información exacta de donde posicionar nuestro código. Pero al compilador le dan información de para qué estas utilizando ese espacio. Se suele utilizar .text para para las instrucciones de nuestro progama y el .data para comunicarle al compilador que el siguiente bloque se utilizará para almacenar las variables.

Espero haber aclarado!

Saludos!

En respuesta a Manuel Urquiola

Re: consulta de practica 1 de laboratorio

de Julio Perez -

Aclaro un poco más.

Las directivas .text y .data definen lo que se llaman "secciones" o "segmentos" de código, para identificar bloques de memoria usados para diferentes cosas. Hay variantes entre los diferentes ensambladores, pero habitualmente .text se utiliza para poner ahí el código de programa y .data para almacenar variables. Secciones similares definen la mayoría de los compiladores para lenguajes de alto nivel como C o Pascal.

En el ensamblador que utilizamos en el curso la traducción de texto a código de máquina se hace en dos grandes etapas: el ensamblador traduce todo lo que puede pero no sabe todavía donde va a estar ubicada en memoria cada sección.  El linker define dónde va cada sección y completa lo que no pudo traducir el ensamblador.

En las herramientas usadas en el curso la directiva .org no define direcciones absolutas en el espacio de direcciones del Z80 sino direcciones relativas al comienzo de la sección. Por ejemplo, si en mi programa pongo:

---

.text
.org 0x0100
mi_etiqueta:
    ... siguen instrucciones

---

la etiqueta mi_etiqueta tomará un valor 0x0100 mayor que la dirección de comienzo de la sección .text

Cuando dentro de notepad++ eligen Macro->Compilar se invoca en forma sucesiva al ensamblador y al linker, indicándole al linker que ponga a la sección .text en la dirección 0xB000, y a la sección .data (si existiera) a partir del primer comienzo de página de 256 bytes (primera dirección terminada en 00) después del fin de la sección .text

En este caso la etiqueta mi_etiqueta valdrá 0xB100 y no 0x0100.

Saludos,

julio