Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

Формат Intel шестнадцатеричный объектный файл , формат Intel шестигранной или интеллек Hex это формат файла , который передает двоичные данные в ASCII текстовом виде. [6] Он обычно используется для программирования микроконтроллеров , EPROM и других типов программируемых логических устройств. В типичном применении, а компилятор или ассемблер преобразует программные «с исходным кодом (например, в C или сборки языка ) , чтобы машинный коди выводит его в файл HEX. Общие расширения файлов, используемые для полученных файлов, - .HEX [1] или .H86. [2] [3] Затем HEX-файл считывается программистом для записи машинного кода в PROM или передается в целевую систему для загрузки и выполнения. [7] [8]

История [ править ]

Шестнадцатеричный формат Intel был первоначально разработан для Intellec Microcomputer Development Systems (MDS) в 1973 году для загрузки и выполнения программ с бумажной ленты , чтобы заменить «бумажно-интенсивный» формат BNPF / BPNF . [9] Кроме того, это служило цели облегчения передачи данных от клиентов в Intel для производства ПЗУ. [10] Формат использовался для программирования (E) PROM с помощью бумажных лент (в формате Intellec Hex Paper Tape Format ) или для управления программаторами EPROM, управляемыми перфокартами (через Intellec Hex Computer Punched Card Format ). [10]

С 1975 года он также использовался в системах ISIS-II на базе гибких дисков MCS Series II с расширением файла HEX. [9]

Форматировать [ редактировать ]

Intel HEX состоит из строк текста ASCII , разделенных символами перевода строки или возврата каретки или и тем, и другим. Каждая текстовая строка содержит шестнадцатеричные символы, которые кодируют несколько двоичных чисел. Двоичные числа могут представлять данные, адреса памяти или другие значения в зависимости от их положения в строке, а также от типа и длины строки. Каждая текстовая строка называется записью .

Структура записи [ править ]

Запись (строка текста) состоит из шести полей (частей) , которые появляются в порядке слева направо: [7]

  1. Начальный код , один символ, двоеточие ASCII ':'.
  2. Счетчик байтов , две шестнадцатеричные цифры (одна пара шестнадцатеричных цифр), указывающие количество байтов (пары шестнадцатеричных цифр) в поле данных. Максимальное количество байтов - 255 (0xFF). Обычно используются байты 16 (0x10) и 32 (0x20).
  3. Адрес , четыре шестнадцатеричных цифры, представляющие 16-битное смещение начального адреса памяти данных. Физический адрес данных вычисляется путем добавления этого смещения к ранее установленному базовому адресу, что позволяет адресовать память за пределами 64-килобайтного ограничения 16-битных адресов. Базовый адрес, который по умолчанию равен нулю, может быть изменен различными типами записей. Базовые адреса и смещения адресов всегда выражаются в виде значений с прямым порядком байтов .
  4. Тип записи (см. Типы записей ниже), две шестнадцатеричные цифры от 00 до 05 , определяющие значение поля данных.
  5. Данные , последовательность из n байтов данных, представленная 2 n шестнадцатеричными цифрами. В некоторых записях это поле отсутствует ( n равно нулю). Значение и интерпретация байтов данных зависит от приложения.
  6. Контрольная сумма , две шестнадцатеричные цифры, вычисленное значение, которое можно использовать для проверки, что запись не содержит ошибок.

Цветовая легенда [ править ]

В качестве наглядного пособия поля записей Intel HEX в этой статье окрашены следующим образом:

  Начальный код  Счетчик байтов  Адрес  Тип записи  Данные  Контрольная сумма

Расчет контрольной суммы [ править ]

Контрольная сумма байты рекорда является дополнением до двух из младшего байта (LSB) суммы всех декодированных значений байт в записи , предшествующих контрольную сумму. Он вычисляется путем суммирования декодированных значений байтов и извлечения LSB суммы (т. Е. Контрольной суммы данных), а затем вычисления двух дополнений к LSB (например, путем инвертирования его битов и добавления единицы).

Например, в случае записи : 03 0030 00 02337A 1E сумма декодированных байтовых значений равна 03 + 00 + 30 + 00 + 02 + 33 + = E2, который имеет значение LSB E2. Два дополнения E2:1E , который представляет собой байт контрольной суммы, появляющийся в конце записи.

Достоверность записи можно проверить, вычислив ее контрольную сумму и убедившись, что вычисленная контрольная сумма равна контрольной сумме, указанной в записи; ошибка отображается, если контрольные суммы различаются. Поскольку байт контрольной суммы записи является дополнением до двух - и, следовательно, аддитивным обратным - контрольной суммы данных, этот процесс можно свести к суммированию всех декодированных значений байтов, включая контрольную сумму записи, и проверки того, что младший бит суммы равен нулю. Применительно к предыдущему примеру этот метод дает следующий результат: 03 + 00 + 30 + 00 + 02 + 33 + + 1E = 100, имеющий значение LSB 00.

Терминаторы текстовой строки [ править ]

Записи Intel HEX разделяются одним или несколькими символами завершения строки ASCII, поэтому каждая запись появляется отдельно в текстовой строке. Это улучшает читаемость за счет визуального разделения записей, а также обеспечивает заполнение между записями, которое можно использовать для повышения эффективности машинного анализа .

Программы, которые создают записи HEX, обычно используют символы завершения строки, которые соответствуют соглашениям их операционных систем . Например, программы Linux используют один символ LF ( перевод строки , шестнадцатеричное значение 0A) для завершения строк, тогда как программы Windows используют CR ( возврат каретки , шестнадцатеричное значение 0D), за которым следует LF.

Типы записей [ править ]

Intel HEX имеет шесть стандартных типов записей: [7]

Именованные форматы [ править ]

Исходный 4-битный / 8-битный формат Intellec Hex Paper Tape Format и Intellec Hex Computer Punched Card Format поддерживал только типы записи.00 и 01. [10]

Extended интеллек Hex Формат дополнительно поддерживает тип записи02.

Специальные имена иногда используются для обозначения форматов файлов HEX, которые используют определенные подмножества типов записей. Например:

  • Файлы I8HEX используют только типы записей00 и 01 (16-битные адреса)
  • Файлы I16HEX используют только типы записей00 через 03(20-битные адреса) [6]
  • Файлы I32HEX используют только типы записей00, 01, 04, и 05 (32-битные адреса)

Пример файла [ править ]

В этом примере показан файл с четырьмя записями данных, за которыми следует запись о конце файла:

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

  Начальный код  Счетчик байтов  Адрес  Тип записи  Данные  Контрольная сумма

Варианты [ править ]

Помимо собственного расширения Intel, несколько сторонних производителей также определили варианты и расширения шестнадцатеричного формата Intel, включая Digital Research (как в так называемом «шестнадцатеричном формате Digital Research»), [3] Zilog , Texas Instruments , Microchip и c. т . Они могут содержать информацию о точках входа в программу и содержимом регистров, об измененном порядке байтов в полях данных и других различиях.

Шестнадцатеричный формат Digital Research для процессоров 8086 поддерживает информацию о сегментах путем добавления типов записей, чтобы различать код, данные, стек и дополнительные сегменты. [2] [3]

Большинство ассемблеров для CP / M-80 (а также XASM09 для Motorola 6809 ) не используют тип записи 01h для обозначения конца файла, а вместо этого используют запись типа данных нулевой длины 00h. Это упрощает объединение нескольких шестнадцатеричных файлов. [11] [12] [1]

Texas Instruments определяет вариант, в котором адреса основаны на разрядности регистров процессора, а не в байтах.

Microchip определяет варианты INTHX8S [13] (INHX8L, [1] INHX8H [1] ), INHX8M, [13] [1] [14] INHX16 [13] (INHX16M [1] ) и INHX32 [15] для своих микроконтроллеров PIC .

Alfred Arnold кросс-макро-ассемблер А.С., [1] Вернер Хенниг-Roleff - х 8051 -emulator SIM51, и кросс-конвертер BINTEL Matthias Р. Павла также известны , чтобы определить расширения для формата Intel Hex.

См. Также [ править ]

  • Двоичное кодирование в текст , обзор и сравнение алгоритмов кодирования
  • Формат файлов MOS Technology
  • Шестнадцатеричный формат Motorola S-record
  • Шестнадцатеричный формат Tektronix

Ссылки [ править ]

  1. ^ a b c d e f g h Арнольд, Альфред (2020) [1996, 1989]. «6.3. P2HEX» . Macro Assembler AS - Руководство пользователя . V1.42. Перевод Арнольда, Альфреда; Хильсе, Стефан; Кантак, Стефан; Селлке, Оливер; Де Томази, Витторио. Архивировано 28 февраля 2020 года . Проверено 28 февраля 2020 . […] Для микроконтроллеров PIC, ключ -m <0..3> позволяет сгенерировать три различных варианта формата Intel Hex. Формат 0 - INHX8M, который содержит все байты в нижнем порядке. Адреса становятся вдвое больше, потому что PIC имеют адресное пространство, ориентированное на слова, которое увеличивает адреса только на один за слово. […] В формате 1 (INHX16M) байты хранятся в их естественном порядке. Это формат Microchipиспользует для собственного программирования устройства. Формат 2 (INHX8L) соотв. 3 (INHX8H) разбивают слова на их нижние соотв. старшие байты. […] К сожалению, в литературе можно найти разные утверждения о последней строке файла Intel-Hex. Следовательно, P2HEX знает три различных варианта, которые можно выбрать […]: 00000001FF […]: 00000001 […]: 0000000000 […] По умолчанию используется вариант 0, который кажется наиболее распространенным. […] Если имя целевого файла не имеет расширения, предполагается расширение HEX. […]
  2. ^ a b c «3.1. Формат шестнадцатеричного файла Intel 8086». Операционная система CP / M-86 - Системное руководство (PDF) (2-е издание, 1-е изд.). Пасифик Гроув, Калифорния, США: Цифровые исследования . Июнь 1981 г. С. 15–16. Архивировано (PDF) из оригинала 28.02.2020 . Проверено 28 февраля 2020 . (17 страниц)
  3. ^ a b c d "Приложение C. Шестнадцатеричный формат вывода ASM-86". CP / M-86 - Операционная система - Руководство программиста (PDF) (3-е изд.). Пасифик Гроув, Калифорния, США: Цифровые исследования . Январь 1983 [1981]. С. 97–100. Архивировано (PDF) из оригинала 27.02.2020 . Проверено 27 февраля 2020 . […] Формат Intel идентичен формату, определенному Intel для 8086 . Формат Digital Research почти идентичен формату Intel, но добавляет сегментную информацию в шестнадцатеричные записи. Вывод любого формата может быть введен в GENCMD. , но формат Digital Research автоматически обеспечивает идентификацию сегмента. Сегмент - это наименьшая единица программы, которую можно переместить. […] Именно в определении типов записей 00 и 02 шестнадцатеричный формат Digital Research отличается от формата Intel. Intel определяет по одному значению для типа записи данных и типа адреса сегмента. Digital Research идентифицирует каждую запись с сегментом, который ее содержит.[…] 00H для данных, принадлежащих всем сегментам 8086 […] 81H для данных, принадлежащих сегменту CODE […] 82H для данных, принадлежащих сегменту DATA […] 83H для данных, принадлежащих сегменту STACK […] 84H для данных принадлежащий сегменту EXTRA […] 02H для всех записей адреса сегмента […] 85H для адреса абсолютного сегмента CODE […] 86H для адреса сегмента DATA […] 87H для адреса сегмента STACK […] 88H для сегмента EXTRA адрес […] [1] (1 + viii + 122 + 2 страницы)
  4. ^ a b c d "Интерактивный дизассемблер - шестнадцатеричные форматы файлов" . Hex-лучи . 2006. Архивировано 01 марта 2020 года . Проверено 1 марта 2020 . [2]
  5. ^ "AR # 476 PROMGen - Описание форматов файлов PROM / EEPROM: MCS, EXO, HEX и другие" . Xilinx . 2010-03-08. Intel MCS-86 шестнадцатеричных Object - Формат файла Код 88. архивации от оригинала на 2020-03-03 . Проверено 3 марта 2020 .
  6. ^ a b «Приложение D. Абсолютные форматы объектных файлов MCS-86: шестнадцатеричная форма объектных файлов». Утилиты семейства 8086 - Руководство пользователя систем разработки на базе 8080/8085 (PDF) . Редакция E (A620 / 5821 6K DD ed.). Санта-Клара, Калифорния, США: Intel Corporation . Май 1982 [1980, 1978]. стр. D-8 – D-13. Номер заказа: 9800639-04. Архивировано (PDF) из оригинала 29 февраля 2020 года . Проверено 29 февраля 2020 .
  7. ^ a b c Спецификация формата шестнадцатеричного объектного файла . Редакция A. Intel . 1998 [1988-01-06] . Проверено 23 июля 2019 . [3] [4]
  8. ^ «Общие: формат файла Intel Hex» . ARM Germany GmbH . Архивировано 27 февраля 2020 года . Проверено 6 сентября 2017 .
  9. ^ a b Файхтингер, Хервиг (1987). «1.8.5. Lochstreifen-Datenformate: Das Intel-Hex-Format» [1.8.5. Форматы данных на бумажной ленте. Arbeitsbuch Mikrocomputer [ Рабочая тетрадь по микрокомпьютерам ] (на немецком языке) (2-е изд.). Мюнхен, Германия: Franzis-Verlag GmbH . С. 240–243 [243]. ISBN 3-7723-8022-0.(NB. В книге также описаны BNPF , Motorola S и шестнадцатеричный формат MOS 6502. )
  10. ^ a b c «Глава 6. Спецификация компонентов микрокомпьютерной системы - EPROM и ROM: I. Инструкции по программированию PROM и ROM - B1. Intellec Hex Paper Tape Format / C1. Intellec Hex Computer Punched Card Format». Руководство пользователя MCS-80 (с введением в MCS-85) . Корпорация Intel . Октябрь 1977 г. [1975 г.]. С. 6-75–6-78. 98-153D . Проверено 27 февраля 2020 . [5] [6] (NB. В этом руководстве также описаны « Формат бумажной ленты BPNF », «Формат шестигранной бумажной ленты не Intellec» и «Формат компьютерной перфокарты PN».)
  11. ^ Zschocke Йорг (ноябрь 1987). "Nicht nur Entwicklungshilfe - Загрузка для Einplatinencomputer am Beispiel des EPAC-09: Intel-Hex-Format". c't - магазин компьютерной техники (на немецком языке). Vol. 1987 г. 11. Verlag Heinz Heise GmbH & Co. KG . С. 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. (Так что проверьте, чтобы ассемблер был в CP / M , auch der XASM09; das Typbyte ist dann immer Null). […]  [7] (NB. XASM09 - ассемблер Motorola 6809. )
  12. ^ Прайор, Джеймс Э. (1989-02-24). "Re: Вопросы о формате Intel hex (* .HEX)" . Группа новостейcomp.os.cpm . Проверено 27 февраля 2020 .
  13. ^ a b c "PIC16C5X Programming Specification 5.0 - PIC16C5X Hex Data Formats: 5.1. 8-Bit Split Intellec Hex Format (INHX8S) / 5.2. 8-Bit Merged Intellec Hex Format (INHX8M) / 5.3. 16-Bit Hex Format / 5.4. . 8-битный формат слова / 5.5. 16-битный формат слова ". Microchip Databook (изд. 1994). Microchip Technology Inc., апрель 1994 г., стр. 3-10–3-11, 9-10, 9-15, 9-17, 9-21, 9-23, 9-27. DS00018G . Проверено 28 февраля 2020 .[…] Ассемблеры для PIC16C5X могут создавать объектные файлы PIC16C5X в различных форматах. Программист PIC16C5X должен уметь принимать и отправлять данные как минимум в одном из следующих форматов. 8-битный объединенный формат (INHX8M) является предпочтительным. […] Формат […] INHX8S […] создает два 8-битных файла Hex. Один файл будет содержать пары адрес / данные для 8-битных старших разрядов, а другой файл будет содержать 8-битные младшие разряды. Расширения файлов для объектного кода будут '.obl' и '.obh' для файлов младшего и высокого порядка […] формат […] INHX8M […] создает один 8-битный шестнадцатеричный файл с комбинацией младших и старших байтов. Поскольку каждый адрес может содержать только 8 бит в этом формате, все адреса будут удвоены. Расширения файлов для объектного кода будут иметь формат '.obj' […] […] INHX16 […] создает один 16-битный шестнадцатеричный файл.Расширение файла для объектного кода будет «.obj». […] [8] [9]
  14. ^ Борода, Брайан (2016) [2010]. "Формат HEX-записи микрочипа INHX8M" . Lucid Technologies . Архивировано 28 февраля 2020 года . Проверено 28 февраля 2020 .
  15. ^ Борода, Брайан (2016) [2013]. "Формат HEX-записи микрочипа INHX32" . Lucid Technologies . Архивировано 28 февраля 2020 года . Проверено 28 февраля 2020 .

Дальнейшее чтение [ править ]

  • «2.8. Форматы микропроцессоров 2.8.1. Входные требования: формат Intel Intellec 8 / MDS. Выберите код 83». Руководство оператора по возможностям последовательного ввода-вывода программистов ввода-вывода данных - пакет формата перевода (PDF) . Редакция C. Data I / O Corporation . Октябрь 1980 г. с. 2-10. 055-1901. Архивировано (PDF) из оригинала 2020-03-01 . Проверено 1 марта 2020 .
  • Форматы файлов перевода . Корпорация ввода-вывода данных . 1987-09-03. Архивировано 01 марта 2020 года . Проверено 1 марта 2020 . [10] (56 страниц)
  • «Как интерпретировать данные Motorola S и Intel в формате HEX? Intel Hex-32, Code 99» . На главную> Оборудование>…> Системы внутрисхемного тестирования> Автоматизированное испытательное оборудование [Снято с производства]> Подробнее . Keysight Technologies . Архивировано 01 марта 2020 года . Проверено 1 марта 2020 .
  • Бергманс, Сан (2019-06-02) [2001]. «Формат Intel HEX» . SB-Projects . Архивировано из оригинала на 2020-03-01 . Проверено 1 марта 2020 .
  • Борода, Брайан (2016) [2007]. «Формат Intel HEX-записи» . Lucid Technologies . Архивировано 28 февраля 2020 года . Проверено 28 февраля 2020 .

Внешние ссылки [ править ]

  • binex - конвертер между Intel HEX и двоичным кодом для Windows.
  • SRecord , преобразователь между Intel HEX и двоичным кодом для Linux ( использование ), исходный код C ++.
  • kk_ihex , библиотека C с открытым исходным кодом для чтения и записи Intel HEX
  • libgis , библиотека C с открытым исходным кодом, которая конвертирует файлы Intel HEX, Motorola S-Record, Atmel Generic.
  • bincopy - это пакет Python для управления файлами Intel HEX.