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]
Extensión de nombre de archivo |
---|
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]
- Código de inicio , un carácter, dos puntos ASCII ':'.
- 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.
- 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 .
- 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.
- 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.
- 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 Recuento de bytes Habla a 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 E2
es1E , 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]
Código hexadecimal | Tipo de registro | Descripción | Ejemplo |
---|---|---|---|
00 | Datos | Contiene datos y una dirección inicial de 16 bits para los datos. El recuento de bytes especifica el número de bytes de datos en el registro. El ejemplo que se muestra a la derecha tiene 0B (once) bytes de datos (61, 64, 64, 72, sesenta y cinco, 73, 73, 20, 67, 61, 70) ubicado en direcciones consecutivas que comienzan en la dirección 0010. | : 0B 0010 00 6164647265737320676170 A7 |
01 | Fin del documento | Debe ocurrir exactamente una vez por archivo en la última línea del archivo. El campo de datos está vacío (por lo tanto, el recuento de bytes es 00) y el campo de dirección suele ser 0000. | : 00 0000 01FF |
02 | Dirección de segmento extendido | El campo de datos contiene una dirección base de segmento de 16 bits (por lo tanto, el recuento de bytes es siempre 02) compatible con direccionamiento en modo real 80x86. El campo de dirección (normalmente0000) se ignora. La dirección del segmento de la más reciente02El registro se multiplica por 16 y se agrega a cada dirección de registro de datos subsiguiente para formar la dirección física de inicio de los datos. Esto permite direccionar hasta un megabyte de espacio de direcciones. | : 02 0000 02 1200 EA |
03 | Dirección de segmento inicial | Para procesadores 80x86, especifica el contenido inicial de los registros CS: IP (es decir, la dirección de ejecución inicial). El campo de dirección es0000, el recuento de bytes es siempre 04, los dos primeros bytes de datos son el valor de CS , los dos últimos son el valor de IP . | : 04 0000 03 00003800 C1 |
04 | Dirección lineal extendida | Permite direccionamiento de 32 bits (hasta 4GiB). El campo de dirección del registro se ignora (normalmente0000) y su recuento de bytes es siempre 02. Los dos bytes de datos (big endian) especifican los 16 bits superiores de la dirección absoluta de 32 bits para todos los tipos posteriores.00registros; estos bits de dirección superiores se aplican hasta el próximo04registro. La dirección absoluta de un tipo00 El registro se forma combinando los 16 bits de dirección superiores de los 04 grabar con los 16 bits de dirección bajos del 00registro. Si un tipo00 el registro no va precedido de ningún tipo 04 registra entonces sus 16 bits de dirección superiores predeterminados a 0000. | : 02 0000 04 FFFF FC |
05 | Iniciar dirección lineal | El campo de dirección es 0000(no se usa) y el número de bytes es siempre 04. Los cuatro bytes de datos representan un valor de dirección de 32 bits (big-endian). En el caso de las CPU 80386 y superiores, esta dirección se carga en el registro EIP. | : 04 0000 05 000000CD 2A |
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 Recuento de bytes Habla a 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
- ↑ 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 que utiliza Microchip 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. […]
- ^ 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)
- ^ a b c d "Apéndice C. Formato de salida hexadecimal 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 cualquiera de los formatos 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 habla a […]
[1] (1 + viii + 122 + 2 páginas) - ^ 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]
- ^ "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 .
- ^ 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 .
- ^ 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]
- ^ "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 .
- ^ 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 ).
- ^ a b c "Capítulo 6. Hoja de datos de componentes del sistema de microcomputadoras - 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").
- ^ 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 ). - ^ Prior, James E. (24 de febrero de 1989). "Re: preguntas de formato Intel hex (* .HEX)" . Grupo de noticias : comp.os.cpm . Consultado el 27 de febrero de 2020 .
- ^ a b c "Especificación de programación PIC16C5X 5.0 - PIC16C5X Formatos de datos hexadecimales: 5.1. Formato hexadecimal intellec dividido de 8 bits (INHX8S) / 5.2. Formato hexadecimal Intellec combinado de 8 bits (INHX8M) / 5.3. Formato hexadecimal de 16 bits / 5.4. Formato de Word / 5.5. Formato de Word 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] - ^ 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 .
- ^ 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.