Los ficheros .hex de 8 bits
Jordi Bartolomé 15-11-2003

 
Los ficheros .HEX

El actual formato .hex fué ideado por Intel para la descripción del código objeto de sus microprocesadores de 8, 16 y 32 bits. Es un formato flexible porque toda la información se representa en ASCII lo que ofrece muchas ventajas: es fácil de representar mediante medios no binarios como hojas impresas o tarjetas perforadas, se puede editar y visualizar desde numerosas aplicaciones y plataformas no especializadas. Estos archivos se pueden ver y modificar prácticamente con cualquier editor de texto. Esta flexibilidad lo convierte en un formato muy utilizado para la descripción del contenido de memorias.

Los siguientes apartados pretenden explicar la estructura de los ficheros .hex utilizados en los dispositivos de 8 bits, los cuales son un poco más sencillos que los .hex utilizados en los dispositivos de 16 y 32 bits. Por tanto aquí sólo se describen los registros de datos y los registros de fin de fichero, pues estos son los únicos utilizados en los archivos .hex de 8 bits. Quien quiera saber como funcionan los de 16 y 32 bits puede consultar el documento “Hexadecimal file object specification" de Intel.

 
Estructura general de un fichero .HEX

Un archivo .HEX se estructura en líneas, cada una de las cuales representa un registro. Cada registro se compone de un conjunto de campos con diferente información en función del tipo de registro que se trate. Existen diferentes tipos de registros, los cuales se pueden combinar indistintamente dentro de un mismo fichero:

Tipo de registro: Tipo de fichero .hex:
Registros de datos HEX 8,16 o 32 bits
Registros de fin de fichero HEX 8,16 o 32 bits
Registro de dirección extendida de segmento HEX 16 o 32 bits
Registro de dirección lineal extendida HEX 32 bits
Registro de inicio de direccion lineal HEX 32 bits
 
Formato general de los registros

La estructura general de un registro es:

Campo: Representación: Valor codificado:
RECORD MARK ‘:’ 1-ASCII  
RECLEN 2-ASCII 1-byte
LOAD OFFSET 4-ASCI 2-byte
RECTYP 2-ASCII 1-byte
INFO or DATA 2n-ASCII n-byte
CHECKSUM 2 ASCII 1-byte

- RECORD MARK - Marca de registro - 1 carácter ASCII codificando el símbolo ":"
Indica el inicio de registro, es decir que comienza un nuevo registro.

- RECLEN - Longitud del registro - 2 carácteres ASCII codificando 1 byte :
Especifica el numero de bytes de información (INFO OR DATA) que hay tras el campo RECTYP, es decir el número de bytes que hay entre RECTYP y CHECKSUM, estos no incluidos. No hace falta recordar que un byte se representa mediante dos digitos hexadecimales, por lo que se usaran dos caracteres ASCII (0..F) por byte.

- LOAD OFFSET - Dirección de memoria - 4 carácteres ASCII codificando 2 bytes:
Aunque aparece en todos los tipos de registros, este campo realmente solo se usa en los registros de datos. Indica la dirección de memoria inicial donde se han de guardar los datos contenidos en este. Los n bytes contenidos en este registro se guardaran en las direcciones sucesivas a la dirección indicada por LOAD OFFSET, por lo que el byte que ocupa la posición n dentro del campo de datos del registro se guardara en la posición LOAD OFFSET + n de la memoria.

- RECTYP - Tipo de registro - 2 carácteres ASCII codificando 1 byte:
Indica el tipo de información contenida en el registro, es decir el tipo de registro que se esta leiendo, lo que permite anticipar que tipo de campos se han de leer de este, es decir que campos se van a encontrar. Puede tomar diferentes valores:

Codigo: Tipo:
00 Registros de datos
01 Registros de fin de fichero
02 Registro de dirección extendida de segmento
03 Registro de dirección de inicio de segmento
04 Registro de dirección lineal extendida
05 Registro de inicio de dirección lineal


- INFO or DATA - Información o datos - 2*n carácteres ASCII codificando N bytes:
Contienen diferente información que se interpreta de una u otra forma en función del tipo de registro.

- CHECKSUM - Checksum de comprobación - 2 carácteres ASCII codificando 1 byte:
Es el byte de comprobación de integridad del resto de campos del registro. Este campo es la suma complementada de todos los bytes del registro desde RECLEN hasta el ultimo byte del campo INFO OR DATA, ambos bytes incluidos. Si el fichero esta en buen estado, la suma de estos bytes y el byte de CHECSKUM debería dar 00h, debido a que son valores complementarios. El RECORD MARK no interviene en la suma.

Ej: Dado el registro (recordar que los valores están en hexadecimal) “: 0x02 0x00 0x00 0x00 0x07 0xC0 0x37 “ la comprobación del checksum se haría de la siguiente manera: primero se suman todos los bytes desde RECLEN hasta el ultimo campo INFO or DATA : 0x02+0x00+0x00+0x00+0x07+0xCO = 0xC9, a continuación el valor obtenido se suma al valor de checksum: 0xC9+0x37 = 0x1) 0x00. La suma es 0x0 por tanto los dos valores se complementan, lo que indica que no hay ningún error en el registro

 
Formato de los registros de datos
Estos registros describen el contenido de una porción de memoria: contienen los datos y la dirección donde se han de ubicar estos:

Campo: Representación: Valor codificado:
RECORD MARK ‘:'

1-ASCII

 

RECLEN

2-ASCII

1-byte

LOAD OFFSET

4-ASCII

2-bytes

RECTYP ‘00'

2-ASCII

1-byte

DATA

2-n ASCII

n-bytes

CHECKSUM

2-ASCII

1-byte

En estos registros el campo RECLEN puede valer hasta FFh, lo que significa que puede contener hasta 255 bytes de datos.

El campo LOAD OFFSET contiene la dirección donde se guarda el primer byte de la secuencia de datos contenida en el registro de datos, así la dirección de los diferentes bytes de la secuencia se puede obtener sumando su posición a LOAD OFFSET. A la hora de interpretar la dirección hay que tener en cuenta si se trabaja con archivos .HEX de 8 bits, de 16 bits o de 32 bits ya que en los formatos de 16 o 32 bits LOAD OFFSET sólo da parte de la dirección, la otra parte se obtiene a partir de otros tipos de registros.

 

Formato del registro de fin de fichero

Este registro indica el fin del fichero .hex . Los campos de este siempre toman los mismos valores:

Campo: Representación: Valor codificado:
RECORD MARK ‘:'

1-ASCII

 

RECLEN '00'

2-ASCII

1-byte

LOAD OFFSET '0000'

4-ASCII

2-bytes

RECTYP '01'

2-ASCII

1-byte

CHECKSUM 'FF'

2-ASCII

1-byte

 

Formato del registro de dirección extendida de segmento

Se conoce también como registro HEX86 y se utiliza para extender el rango de direcciones. El valor contenido en este tipo de registros se corresponde con los bits del 4 a 19 de la dirección, de modo que a la dirección de los datos de los siguientes registros, se le ha de sumar el valor indicado en el último registro de dirección extendida de segmento.

Ej: si el valor del registro de dirección extendida de segmento es 0x2300 y el de un registro de datos que se encuentra a continuación es 0x1356, la dirección absoluta se conseguiría sumando a 0x1356 el valor 0x23000 ( se le añaden 4 bits 0 ).

Campo: Representación: Valor codificado:
RECORD MARK ‘:'

1-ASCII

 

RECLEN '02'

2-ASCII

1-byte

LOAD OFFSET '0000'

4-ASCII

2-bytes

RECTYP '02'

2-ASCII

1-byte

SEGMENT ADDRESS

4-ASCII

2-byte

CHECKSUM

2-ASCII

1-byte

 
Resto de registros
En el caso de quere trabajar con sistemas de 16 o32 bits, el documento “Hexadecimal file object specification” de Intel se puede encontrar la descripción detallada de la estructura y funcionalidad del resto de registros necesarios .
 

Regresar al índice de documentos