HEX (Intel)

formato de archivo creado por Intel para información binaria

El Hexadecimal Object File Format es un formato de archivo para la programación de microcontroladores, EPROMs y otros circuitos integrados. Es uno de los formatos más antiguos con esta finalidad.

Formato de archivo para objetos hexadecimales
Desarrollador
Intel
Información general
Extensión de archivo .hex
Lanzamiento inicial 1988
Formato abierto ?

Consiste en un archivo de texto cuyas líneas contienen valores hexadecimales que codifican los datos, y su offset o dirección de memoria.

Los distintos tipos de Intel Hex (8-bit, 16-bit y 32-bit) se diferencian en su endianness.

Cada línea consta de los siguientes elementos:

  1. Código de inicio, un símbolo ':'
  2. Longitud del registro, dos dígitos hexadecimales con la cantidad de bytes del campo de datos. Usualmente son 16 o 32 bytes.
  3. Dirección, cuatro dígitos hexadecimales en big endian, con la dirección de inicio de los datos. Para direcciones mayores a 0xFFFF se emplean otros tipos de registro.
  4. Tipo de registro, dos dígitos hexadecimales, de 00 a 05, definen el tipo del campo de datos
  5. Datos, duplas de dígitos hexadecimales que contienen los datos
  6. Checksum, dos dígitos hexadecimales con el complemento a dos de la suma de todos los campos anteriores, salvo el ':'.

Hay seis tipos de registros:

  • 00, Datos, contiene una dirección de 16 bits y los datos correspondientes
  • 01, Fin de archivo, no contiene datos y debe estar al final del archivo.
  • 02, Dirección Extendida de Segmento, dirección base del segmento, para acceder a direcciones con más de 16 bits. Este valor se desplaza 4 bits a la izquierda (= multiplicar con 16) y se suma a la dirección proporcionada por los registros de datos. Su campo de longitud debe valer 02 y el de dirección 0000.
  • 03, Dirección de Comienzo de Segmento, especifica los valores iniciales de los registros CS:IP, para procesadores 80x86. El campo de dirección es 0000, longitud 04 y los datos contienen dos bytes para el segmento de código y otros dos para el instruction pointer
  • 04, Dirección Lineal Extendida, permite dirigirse a 32 bits de memoria al contener los 16 bits superiores de la dirección. Su campo de dirección vale 0000 y el de longitud 02.
  • 05, Comienzo de Dirección Lineal. Contiene 4 bytes que se cargan en el registro EIP de los procesadores 80386 y superiores. Su campo de dirección vale 0000 y el de longitud 04.

Existen varios sub-formatos:

  • I8HEX o INTEL 8, de 8 bits
  • I16HEX o INTEL 16, de 16 bits. Emplea registros 02 y 03, y la endianness de los datos puede variar.
  • I32HEX o INTEL 32, de 32 bits. Agrega los registros 04 y 05.

Los procesadores Motorola utilizan un formato similar, denominado SREC.

Ejemplo editar

:10010000214601360121470136007EFE09D2190140
:100110002146017EB7C20001FF5F16002148011988
:10012000194E79234623965778239EDA3F01B2CAA7
:100130003F0156702B5E712B722B732146013421C7
:00000001FF

     Código de inicio      Longitud      Dirección      Tipo de registro      Datos      Checksum

Enlaces externos editar