Ubicaciones de memoria en el archivo hexadecimal AVR

2

Estoy tratando de entender el archivo hex generado por AVR Studio. Escribí un código en ensamblador. El código es el siguiente:

#include "m328pdef.inc"
.org 33
rjmp reset
reset: 
        add r16,r17
main:
        out DDRB,r16
        rjmp main

El .org es para codificar mi código en la ubicación de la memoria 33. Luego verifiqué el archivo hex generado. Eso es lo siguiente:

:020000020000FC
:0800420000C0010F04B9FECF5C
:00000001FF

La segunda línea debe ser de interés. La dirección donde se almacena esto es 0042. ¿Cómo es así? ¿Puede aclarar amablemente mi comprensión, por favor?

    
pregunta Board-Man

2 respuestas

2

Este es un formato estándar archivo hexadecimal de Intel utilizado por los enlazadores de muchos fabricantes.

El primer carácter siempre es ':'

Los siguientes dos dígitos hexadecimales son el conteo de bytes, en pares de dos dígitos, en el campo de datos de la línea. Así que la primera línea tiene dos bytes de datos, los siguientes ocho bytes y los últimos cero bytes.

Los siguientes cuatro dígitos hexadecimales son la dirección, en bytes. Olin ya ha mencionado por qué la dirección de inicio de 33 (0x21) se muestra como 0042.

Los siguientes dos dígitos hexadecimales son el tipo de registro. 02 es un tipo de dirección extendida, que permite que las direcciones se extiendan más allá del límite de 64K del formato original. Pero el campo de datos que sigue al 02 en la primera línea es 0000, por lo que realmente no hay ninguna extensión en este caso.

Los dos últimos dígitos hexadecimales son la suma de comprobación (consulte el artículo de Wikipedia para el cálculo).

En la segunda línea, el registro 00 dice que habrá un campo de dirección (por ejemplo, 0042) que precede al tipo de registro, y los ocho bytes de datos que siguen al tipo de registro (00, C0, ... a través de CF).

La última línea, con el tipo de registro 01, es un final de registro.

    
respondido por el tcrosley
5

No sé nada de binario AVR, por lo que esta es una conjetura aunque parece encajar muy bien.

Le dijiste que comenzara a poner tu código en 33, que es 21h. Las direcciones probablemente se duplican en el archivo HEX porque la palabra direccionable es más ancha que 8 bits, por lo que sale a 42h. Por supuesto, todo esto debe estar bien documentado en el manual del enlazador o ensamblador.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas