Extensión de nombre de archivo |
---|
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]
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]
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 .
Un registro (línea de texto) consta de seis campos (partes) que aparecen en orden de izquierda a derecha: [7]
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
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
.
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.
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 del más reciente 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 |
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:
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
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.
[…] 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. […]
[…] 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)
[…] 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 ).
[…] 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]