Intel HEX


De Wikipedia, la enciclopedia libre
  (Redirigido desde el formato hexadecimal de Intel )
Saltar a navegación Saltar a búsqueda

El formato de archivo de objeto hexadecimal de Intel , el formato hexadecimal de Intel o Intellec Hex es un formato de archivo que transmite información binaria en forma de texto ASCII . [6] Se utiliza comúnmente para programar microcontroladores , EPROM y otros tipos de dispositivos lógicos programables. En una aplicación típica, un compilador o ensamblador convierte un programa 's código fuente (como en C o lenguaje ensamblador ) a código de máquinay lo envía a un archivo HEX. Las extensiones de archivo comunes que se utilizan para los archivos resultantes son .HEX [1] o .H86. [2] [3] A continuación, un programador lee el archivo HEX para escribir el código de la máquina en una PROM o se transfiere al sistema de destino para su carga y ejecución. [7] [8]

Historia

El formato hexadecimal de Intel se diseñó originalmente para los sistemas de desarrollo de microcomputadoras (MDS) Intellec de Intel en 1973 con el fin de cargar y ejecutar programas desde cinta de papel para reemplazar el formato BNPF / BPNF de "uso intensivo de papel" . [9] Además, sirvió para facilitar la transmisión de datos de los clientes a Intel para la producción de ROM. [10] El formato se utilizó para programar (E) PROM mediante cintas de papel (en formato Intellec Hex Paper Tape ) o para controlar programadores EPROM controlados por tarjeta perforada (a través del formato de tarjeta perforada por computadora Intellec Hex ). [10]

Desde 1975, también fue utilizado por los sistemas ISIS-II basados ​​en disquetes MCS Serie II , utilizando la extensión de archivo HEX. [9]

Formato

Intel HEX consta de líneas de texto ASCII que están separadas por caracteres de salto de línea o retorno de carro o ambos. Cada línea de texto contiene caracteres hexadecimales que codifican varios números binarios. Los números binarios pueden representar datos, direcciones de memoria u otros valores, según su posición en la línea y el tipo y longitud de la línea. Cada línea de texto se llama registro .

Estructura de registro

Un registro (línea de texto) consta de seis campos (partes) que aparecen en orden de izquierda a derecha: [7]

  1. Código de inicio , un carácter, dos puntos ASCII ':'.
  2. Recuento de bytes , dos dígitos hexadecimales (un par de dígitos hexadecimales), que indica el número de bytes (pares de dígitos hexadecimales) en el campo de datos. El número máximo de bytes es 255 (0xFF). 16 (0x10) y 32 (0x20) son recuentos de bytes de uso común.
  3. Dirección , cuatro dígitos hexadecimales, que representan el desplazamiento de la dirección de memoria inicial de 16 bits de los datos. La dirección física de los datos se calcula agregando este desplazamiento a una dirección base previamente establecida, lo que permite el direccionamiento de memoria más allá del límite de 64 kilobytes de direcciones de 16 bits. La dirección base, que por defecto es cero, se puede cambiar mediante varios tipos de registros. Las direcciones base y las compensaciones de direcciones siempre se expresan como valores big endian .
  4. Tipo de registro (consulte los tipos de registro a continuación), dos dígitos hexadecimales, 00 a 05 , que definen el significado del campo de datos.
  5. Datos , una secuencia de n bytes de datos, representada por 2 n dígitos hexadecimales. Algunos registros omiten este campo ( n es igual a cero). El significado y la interpretación de los bytes de datos dependen de la aplicación.
  6. Suma de comprobación , dos dígitos hexadecimales, un valor calculado que se puede utilizar para verificar que el registro no tenga errores.

Leyenda de color

Como ayuda visual, los campos de los registros Intel HEX están coloreados a lo largo de este artículo de la siguiente manera:

  Código de inicio  Conteo de bytes  Dirección  Tipo de registro  Datos  Suma de comprobación     

Cálculo de suma de comprobación

Byte de suma de comprobación de un registro es el complemento a dos del byte menos significativo (LSB) de la suma de todos los valores de bytes decodificados en el registro anteriores a la suma de comprobación. Se calcula sumando los valores de bytes decodificados y extrayendo el LSB de la suma (es decir, la suma de control de datos), y luego calculando el complemento a dos del LSB (por ejemplo, invirtiendo sus bits y agregando uno).

Por ejemplo, en el caso del registro : 03 0030 00 02337A 1E , la suma de los valores de bytes decodificados es 03 + 00 + 30 + 00 + 02 + 33 + 7A= E2, que tiene valor LSB E2. El complemento a dos de E2es1E , que es el byte de suma de comprobación que aparece al final del registro.

La validez de un registro se puede verificar calculando su suma de verificación y verificando que la suma de verificación calculada sea igual a la suma de verificación que aparece en el registro; se indica un error si las sumas de comprobación difieren. Dado que el byte de suma de verificación del registro es el complemento a dos, y por lo tanto el inverso aditivo , de la suma de verificación de datos, este proceso se puede reducir a sumar todos los valores de bytes decodificados, incluida la suma de verificación del registro, y verificar que el LSB de la suma sea cero. Cuando se aplica al ejemplo anterior, este método produce el siguiente resultado: 03 + 00 + 30 + 00 + 02 + 33 + 7A + 1E = 100, que tiene valor LSB 00.

Terminadores de línea de texto

Los registros Intel HEX están separados por uno o más caracteres de terminación de línea ASCII para que cada registro aparezca solo en una línea de texto. Esto mejora la legibilidad al delimitar visualmente los registros y también proporciona un relleno entre registros que se puede utilizar para mejorar la eficiencia del análisis de la máquina .

Los programas que crean registros HEX suelen utilizar caracteres de terminación de línea que se ajustan a las convenciones de sus sistemas operativos . Por ejemplo, los programas de Linux utilizan un único carácter LF (salto de línea , valor hexadecimal 0A) para terminar las líneas, mientras que los programas de Windows utilizan un CR ( retorno de carro , valor hexadecimal 0D) seguido de un LF.

Tipos de registro

Intel HEX tiene seis tipos de registros estándar: [7]

Formatos con nombre

El formato de cinta de papel Intellec Hex Hex original de 4 bits / 8 bits y el formato de tarjeta perforada por computadora Intellec Hex solo admitían tipos de registro00 y 01. [10]

El formato Extended Intellec Hex admite además el tipo de registro02.

A veces se utilizan nombres especiales para indicar los formatos de archivos HEX que emplean subconjuntos específicos de tipos de registros. Por ejemplo:

  • Los archivos I8HEX usan solo tipos de registro00 y 01 (Direcciones de 16 bits)
  • Los archivos I16HEX usan solo tipos de registro00 mediante 03(Direcciones de 20 bits) [6]
  • Los archivos I32HEX usan solo tipos de registro00, 01, 04, y 05 (Direcciones de 32 bits)

Ejemplo de archivo

Este ejemplo muestra un archivo que tiene cuatro registros de datos seguidos de un registro de fin de archivo:

: 10 0100 00 214601360121470136007EFE09D21901 40 : 10 0110 00 2146017E17C20001FF5F160021480119 28 : 10 0120 00 194E79234623965778239EDA3F01B2CA A7 : 10 0130 00 3F0156702B5E712B722B732146013421 C7 : 00 0000 01FF

  Código de inicio  Conteo de bytes  Dirección  Tipo de registro  Datos  Suma de comprobación     

Variantes

Además de la propia extensión de Intel, varios terceros también han definido variantes y extensiones del formato hexadecimal de Intel, incluida la investigación digital (como en el llamado "formato hexadecimal de investigación digital"), [3] Zilog , Texas Instruments , Microchip y c 't . Estos pueden tener información sobre los puntos de entrada del programa y el contenido del registro, un orden de bytes intercambiados en los campos de datos y otras diferencias.

El formato hexadecimal de Digital Research para procesadores 8086 admite información de segmento agregando tipos de registro para distinguir entre código, datos, pila y segmentos adicionales. [2] [3]

La mayoría de los ensambladores para CP / M-80 (y también XASM09 para Motorola 6809 ) no usan el tipo de registro 01h para indicar el final de un archivo, sino que usan una entrada de tipo de datos de longitud cero 00h en su lugar. Esto facilita la concatenación de varios archivos hexadecimales. [11] [12] [1]

Texas Instruments define una variante en la que las direcciones se basan en el ancho de bits de los registros de un procesador, no en bytes.

Microchip define las variantes INTHX8S [13] (INHX8L, [1] INHX8H [1] ), INHX8M, [13] [1] [14] INHX16 [13] (INHX16M [1] ) e INHX32 [15] para sus microcontroladores PIC .

El ensamblador cruzado AS de Alfred Arnold, [1] el emulador 8051 SIM51 de Werner Hennig-Roleff y el convertidor cruzado BINTEL de Matthias R. Paul también son conocidos por definir extensiones al formato hexadecimal de Intel.

Ver también

  • Codificación de binario a texto , una encuesta y comparación de algoritmos de codificación
  • Formato de archivo de la tecnología MOS
  • Formato hexadecimal de registro S de Motorola
  • Formato hexadecimal de Tektronix

Referencias

  1. ↑ a b c d e f g h Arnold, Alfred (2020) [1996, 1989]. "6.3. P2HEX" . Macro Assembler AS - Manual del usuario . V1.42. Traducido por Arnold, Alfred; Hilse, Stefan; Kanthak, Stephan; Sellke, Oliver; De Tomasi, Vittorio. Archivado desde el original el 28 de febrero de 2020 . Consultado el 28 de febrero de 2020 . […] Para los microcontroladores PIC, el conmutador -m <0..3> permite generar las tres variantes diferentes del formato Intel Hex. El formato 0 es INHX8M que contiene todos los bytes en un orden Lo-Hi-Order. Las direcciones se duplican porque los PIC tienen un espacio de direcciones orientado a palabras que incrementa las direcciones solo en una por palabra. […] Con el formato 1 (INHX16M), los bytes se almacenan en su orden natural. Este es el formato Microchiputiliza para sus propios dispositivos de programación. Formato 2 (INHX8L) resp. 3 (INHX8H) divide las palabras en sus resp. bytes superiores. […] Desafortunadamente, uno encuentra declaraciones diferentes sobre la última línea de un archivo Intel-Hex en la literatura. Por lo tanto, P2HEX conoce tres variantes diferentes que pueden seleccionarse […]: 00000001FF […]: 00000001 […]: 0000000000 […] Por defecto, se usa la variante 0 que parece ser la más común. […] Si el nombre del archivo de destino no tiene una extensión, se supone una extensión de HEX. […]
  2. ^ a b c "3.1. Formato de archivo hexadecimal Intel 8086". Sistema operativo CP / M-86 - Guía del sistema (PDF) (2ª impresión, 1ª ed.). Pacific Grove, California, Estados Unidos: Investigación digital . Junio ​​de 1981. págs. 15-16. Archivado (PDF) desde el original el 28 de febrero de 2020 . Consultado el 28 de febrero de 2020 . (17 páginas)
  3. ^ a b c d "Apéndice C. Formato de salida hexadecimal de ASM-86". CP / M-86 - Sistema operativo - Guía del programador (PDF) (3 ed.). Pacific Grove, California, Estados Unidos: Investigación digital . Enero de 1983 [1981]. págs. 97–100. Archivado (PDF) desde el original el 27 de febrero de 2020 . Consultado el 27 de febrero de 2020 . […] El formato Intel es idéntico al formato definido por Intel para el 8086 . El formato de investigación digital es casi idéntico al formato de Intel, pero agrega información de segmento a los registros hexadecimales. La salida de cualquier formato se puede ingresar en GENCMD , pero el formato de investigación digital proporciona automáticamente la identificación del segmento. Un segmento es la unidad más pequeña de un programa que se puede reubicar. […] Es en la definición de los tipos de registro 00 y 02 que el formato hexadecimal de Digital Research se diferencia del de Intel. Intel define un valor para cada tipo de registro de datos y el tipo de dirección de segmento. Digital Research identifica cada registro con el segmento que lo contiene.[…] 00H para datos pertenecientes a todos los 8086 segmentos […] 81H para datos pertenecientes al segmento CODE […] 82H para datos pertenecientes al segmento DATA […] 83H para datos pertenecientes al segmento STACK […] 84H para datos perteneciente al segmento EXTRA […] 02H para todos los registros de dirección de segmento […] 85H para una dirección de segmento CÓDIGO absoluto […] 86H para una dirección de segmento de DATOS […] 87H para una dirección de segmento STACK […] 88H para un segmento EXTRA Dirección […] [1] (1 + viii + 122 + 2 páginas)
  4. ^ a b c d "El desensamblador interactivo - formatos de archivo hexadecimales" . Rayos hexagonales . 2006. Archivado desde el original el 1 de marzo de 2020 . Consultado el 1 de marzo de 2020 . [2]
  5. ^ "AR # 476 PROMGen - Descripción de formatos de archivo PROM / EEPROM: MCS, EXO, HEX y otros" . Xilinx . 2010-03-08. Objeto hexadecimal Intel MCS-86 - Código de formato de archivo 88. Archivado desde el original el 2020-03-03 . Consultado el 3 de marzo de 2020 .
  6. ^ a b "Apéndice D. Formatos de archivo de objeto absoluto MCS-86: formulario de archivo de objeto hexadecimal". Utilidades de la familia 8086: Guía del usuario para sistemas de desarrollo basados ​​en 8080/8085 (PDF) . Revisión E (A620 / 5821 6K DD ed.). Santa Clara, California, Estados Unidos: Intel Corporation . Mayo de 1982 [1980, 1978]. págs. D-8 – D-13. Número de pedido: 9800639-04. Archivado (PDF) desde el original el 29 de febrero de 2020 . Consultado el 29 de febrero de 2020 .
  7. ^ a b c Especificación de formato de archivo de objeto hexadecimal . Revisión A. Intel . 1998 [06/01/1988] . Consultado el 23 de julio de 2019 . [3] [4]
  8. ^ "General: formato de archivo Intel Hex" . ARM Germany GmbH . Archivado desde el original el 27 de febrero de 2020 . Consultado el 6 de septiembre de 2017 .
  9. ↑ a b Feichtinger, Herwig (1987). "1.8.5. Lochstreifen-Datenformate: Das Intel-Hex-Format" [1.8.5. Formatos de datos de cinta de papel]. Arbeitsbuch Mikrocomputer [ Libro de trabajo del microordenador ] (en alemán) (2 ed.). Múnich, Alemania: Franzis-Verlag GmbH . págs. 240–243 [243]. ISBN 3-7723-8022-0.(NB. El libro también describe un formato hexadecimal BNPF , Motorola S y MOS 6502 ).
  10. ^ a b c "Capítulo 6. Hoja de datos de componentes del sistema de microcomputadora - EPROM y ROM: I. Instrucciones de programación de PROM y ROM - B1. Formato de cinta de papel Intellec Hex / C1. Formato de tarjeta perforada por ordenador Intellec Hex". Manual del usuario del MCS-80 (con introducción al MCS-85) . Intel Corporation . Octubre de 1977 [1975]. págs. 6-75–6-78. 98-153D . Consultado el 27 de febrero de 2020 . [5] [6] (NB. Este manual también describe un " Formato de cinta de papel BPNF ", un "Formato de cinta de papel no Hex de Intellec" y un "Formato de tarjeta perforada por computadora PN").
  11. ^ Zschocke, Jörg (noviembre de 1987). "Nicht nur Entwicklungshilfe - Down-Loading für Einplatinencomputer am Beispiel des EPAC-09: Intel-Hex-Format". c't - magazin für computertechnik (en alemán). Vol. 1987 no. 11. Verlag Heinz Heise GmbH & Co. KG . pp. 198, 200, 202-203, [200]. ISSN 0724-8679 . […] Den Vorspann beschließt ein Byte, dessen Wert den Typ des Blockes angibt: 0 = Datenblock, 1 = Endblock. Auf diese Unterscheidung kann jedoch verzichtet werden, wenn sich ein Endblock auch durch eine Blocklänge gleich Null eindeutig kennzeichnen läßt. (Verfahren die meisten Assembler unter CP / M , auch der XASM09; das Typbyte ist dann immer Null). […]  [7] (NB. XASM09 es un ensamblador Motorola 6809 ).
  12. Prior, James E. (24 de febrero de 1989). "Re: preguntas de formato Intel hex (* .HEX)" . Grupo de noticiascomp.os.cpm . Consultado el 27 de febrero de 2020 .
  13. ^ a b c "Especificación de programación PIC16C5X 5.0 - PIC16C5X Formatos de datos hexadecimales: 5.1. Formato hexadecimal de Intellec dividido de 8 bits (INHX8S) / 5.2. Formato hexadecimal de Intellec combinado de 8 bits (INHX8M) / 5.3. Formato hexadecimal de 16 bits / 5.4 . Formato de palabra de 8 bits / 5.5. Formato de palabra de 16 bits ". Libro de datos de Microchip (ed. 1994). Microchip Technology Inc. Abril de 1994. págs. 3-10-3-11, 9-10, 9-15, 9-17, 9-21, 9-23, 9-27. DS00018G . Consultado el 28 de febrero de 2020 .[…] Los ensambladores del PIC16C5X pueden producir archivos de objeto PIC16C5X en varios formatos. Un programador PIC16C5X debe poder aceptar y enviar datos en al menos uno de los siguientes formatos. Se prefiere el formato combinado de 8 bits (INHX8M). […] Formato […] INHX8S […] produce dos archivos hexadecimales de 8 bits. Un archivo contendrá los pares de dirección / datos para los 8 bits de orden superior y el otro archivo contendrá los 8 bits de orden inferior. Las extensiones de archivo para el código objeto serán '.obl' y '.obh' para archivos de orden bajo y alto […] formato […] INHX8M […] produce un archivo hexadecimal de 8 bits con una combinación de byte bajo / byte alto. Dado que cada dirección solo puede contener 8 bits en este formato, todas las direcciones se duplicarán. Las extensiones de archivo para el código de objeto serán '.obj' […] formato […] INHX16 […] produce un archivo hexadecimal de 16 bits.La extensión del archivo para el código objeto será '.obj'. […] [8] [9]
  14. ^ Beard, Brian (2016) [2010]. "Formato de registro HEX de Microchip INHX8M" . Tecnologías lúcidas . Archivado desde el original el 28 de febrero de 2020 . Consultado el 28 de febrero de 2020 .
  15. ^ Beard, Brian (2016) [2013]. "Formato de registro HEX de Microchip INHX32" . Tecnologías lúcidas . Archivado desde el original el 28 de febrero de 2020 . Consultado el 28 de febrero de 2020 .

Otras lecturas

  • "2.8. Formatos de microprocesador 2.8.1. Requisitos de entrada: Formato Intel Intellec 8 / MDS. Seleccione el código 83". Guía del operador para las capacidades de E / S en serie de los programadores de E / S de datos - Paquete de formato de traducción (PDF) . Revisión C. Corporación de E / S de datos . Octubre de 1980. p. 2-10. 055-1901. Archivado (PDF) desde el original el 1 de marzo de 2020 . Consultado el 1 de marzo de 2020 .
  • Formatos de archivos de traducción . Corporación de E / S de datos . 1987-09-03. Archivado desde el original el 1 de marzo de 2020 . Consultado el 1 de marzo de 2020 . [10] (56 páginas)
  • "¿Cómo interpreto datos formateados Motorola S e Intel HEX? Intel Hex-32, código 99" . Inicio> Hardware>…> Sistemas de prueba en circuito> Equipo de prueba automatizado [descontinuado]> Detalles . Tecnologías Keysight . Archivado desde el original el 1 de marzo de 2020 . Consultado el 1 de marzo de 2020 .
  • Bergmans, San (2 de junio de 2019) [2001]. "Formato Intel HEX" . SB-Proyectos . Archivado desde el original el 1 de marzo de 2020 . Consultado el 1 de marzo de 2020 .
  • Beard, Brian (2016) [2007]. "Formato de registro Intel HEX" . Tecnologías lúcidas . Archivado desde el original el 28 de febrero de 2020 . Consultado el 28 de febrero de 2020 .

enlaces externos

  • binex : un convertidor entre Intel HEX y binario para Windows.
  • SRecord , un convertidor entre Intel HEX y binario para Linux ( uso ), código fuente C ++.
  • kk_ihex , biblioteca C de código abierto para leer y escribir Intel HEX
  • libgis , biblioteca C de código abierto que convierte archivos Intel HEX, Motorola S-Record, Atmel Generic.
  • bincopy es un paquete de Python para manipular archivos Intel HEX.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Intel_HEX&oldid=1037499062 "