Duda tarea

Duda tarea

de Federico Mario Silva Abramo -
Número de respuestas: 1

Hola,

tenemos unas dudas en el hexa7seg: ¿suponemos que la tabla siempre va a estar en una dirección de memoria cuyo byte menos significativo sea 0 o  tenemos que garantizarlo nosotros? ¿Tenemos que usar el código que nos dan o podemos crear uno nosotros?

De cualquier manera, ¿cómo se utiliza la función org? ¿Cambia el lugar de memoria donde se guardan las instrucciones y el PC?

Gracias

 

En respuesta a Federico Mario Silva Abramo

Re: Duda tarea

de Julio Perez -

> ...¿suponemos que la tabla siempre va a estar en una dirección de memoria cuyo byte menos
> significativo sea 0 o  tenemos que garantizarlo nosotros?
>

Si la subrutina que usen depende de eso tienen que garantizarlo ustedes.

> ¿Tenemos que usar el código que nos
> dan o podemos crear uno nosotros?
>

El código que les damos es una sugerencia. Pueden usarlo tal cual (en ese caso tienen que asegurar que el comienzo de la tabla esté alineado. También pueden modificarlo para que no dependa de la alineación del comienzo de la tabla, y también pueden escribirlo todo de nuevo.


> De cualquier manera, ¿cómo se utiliza la función org? ¿Cambia el lugar de memoria
> donde se guardan las instrucciones y el PC?
>

Hay muchas variantes de ORG. Siempre el objetivo es indicarle al que hace la traducción (el ensamblador) en qué lugar de memoria quiero que sea cargado el código que sigue a continuación del ORG. En términos de lo que vimos en el teórico, el ensamblador cuando procesa el renglón donde aparece el org lo que hace es modificar el valor del Contador de posiciones.

En el ensamblador que utilizan ustedes el nro. que viene a continuación de ORG indica la ubicación relativa al comienzo de la sección de memoria que corresponda (.text. en el caso de ustedes). Cuando compilan el código para usarlo con el debugger, al invocar al linker se le especifica que la sección .text comienza en la dirección 0xB000. Por lo tanto si ponen por ejemplo ORG 0x0100 el código que sigue a continuación terminará cargándose en memoria en la dirección 0xB100 (0xB000 + 0x0100).

Para ampliar este tema de directivas al ensamblador pueden ir a apuntes de clase (lo vimos en las últimas dos clases), al anexo 1 de la guía o a la documentación del ensamblador y el linker que están referidos en el anexo 2 de la guía.

Saludos,

julio