Intel HEX - Intel HEX

Intel шестнадцатеричный
Расширение имени файла
.hex,[1] .h86,[2][3] .hxl,[4] .hxh,[4] .obl,[4] .obh,[4] .mcs,[5] .ihex, .ihe, .ihx, .a43

Формат файла шестнадцатеричных объектов Intel, Шестнадцатеричный формат Intel или же Intellec Hex это формат файла который передает двоичную информацию в ASCII текстовая форма.[6] Обычно используется для программирования микроконтроллеры, EPROM, и другие типы программируемых логических устройств. В типичном приложении компилятор или же ассемблер преобразует программа с исходный код (например, в C или же язык ассемблера ) к Машинный код и выводит его в файл HEX. Общие расширения файлов, используемые для результирующих файлов, - .HEX.[1] или .H86.[2][3] Затем файл HEX читается программист записать машинный код в ВЫПУСКНОЙ ВЕЧЕР или передается в целевую систему для загрузки и выполнения.[7][8]

История

Шестнадцатеричный формат Intel был первоначально разработан для Системы разработки микрокомпьютеров Intellec (MDS) в 1973 году для загрузки и выполнения программ из бумажная лента чтобы заменить «бумажно-интенсивный» БНПФ /БПНФ формат.[9] Кроме того, это служило цели облегчения передачи данных от клиентов в Intel для производства ПЗУ.[10] Формат использовался для программирования (E) PROM с помощью бумажных лент (в Формат шестигранной бумажной ленты Intellec) или контролировать перфокарта -управляемые программаторы СППЗУ (через Компьютерный формат перфокарты Intellec Hex).[10]

С 1975 года он также использовался MCS На базе дискеты Series II ИГИЛ-II систем, используя расширение файла HEX.[9]

Формат

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

Структура записи

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

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

Цветовая легенда

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

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

Расчет контрольной суммы

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

Например, в случае записи :0300300002337A1E, сумма декодированных байтовых значений равна 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]

Шестнадцатеричный кодТип записиОписаниеПример
00ДанныеСодержит данные и 16-битный начальный адрес для данных. Счетчик байтов определяет количество байтов данных в записи. Пример, показанный справа, имеет 0B (одиннадцать) байтов данных (61, 64, 64, 72, 65, 73, 73, 20, 67, 61, 70) расположены в последовательных адресах, начинающихся с адреса 0010.:0B0010006164647265737320676170A7
01Конец файлаДолжен встречаться ровно один раз для каждого файла в последней строке файла. Поле данных пустое (таким образом, количество байтов равно 00), а поле адреса обычно 0000.:00000001FF
02Адрес расширенного сегментаПоле данных содержит 16-битный базовый адрес сегмента (таким образом, количество байтов всегда 02) совместим с адресацией в реальном режиме 80x86. Поле адреса (обычно 0000) игнорируется. Адрес сегмента из самого последнего 02 Запись умножается на 16 и добавляется к каждому последующему адресу записи данных, чтобы сформировать физический начальный адрес для данных. Это позволяет адресовать до одного мегабайта адресного пространства.:020000021200EA
03Адрес начального сегментаДля процессоров 80x86 указывает начальное содержимое регистров CS: IP (то есть начальный адрес выполнения). Поле адреса 0000, количество байтов всегда 04, первые два байта данных - это CS значение, последние два являются IP ценить.:0400000300003800C1
04Расширенный линейный адресПозволяет 32-битную адресацию (до 4 ГБ). Поле адреса записи игнорируется (обычно 0000) и его количество байтов всегда 02. Два байта данных (big endian) определяют старшие 16 бит 32-битного абсолютного адреса для всех последующих типов. 00 записи; эти старшие биты адреса применяются до следующего 04 записывать. Абсолютный адрес типа 00 запись формируется путем объединения старших 16 бит адреса самого последнего 04 запись с младшими 16 адресными битами 00 записывать. Если тип 00 записи не предшествует какой-либо тип 04 затем записывает его старшие 16 бит адреса по умолчанию 0000.:02000004FFFFFC
05Начальный линейный адресПоле адреса 0000 (не используется) и счетчик байтов всегда 04. Четыре байта данных представляют собой 32-битное значение адреса (с прямым порядком байтов). В случае процессоров 80386 и выше этот адрес загружается в регистр EIP.:04000005000000CD

Именованные форматы

Исходный 4-битный / 8-битный Формат шестигранной бумажной ленты Intellec и Компьютерный формат перфокарты Intellec Hex поддерживаются только типы записей 00 и 01.[10]

В Расширенный шестнадцатеричный формат Intellec дополнительно поддерживает тип записи 02.

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

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

Пример файла

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

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

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

Варианты

Помимо собственного расширения Intel, несколько сторонних производителей также определили варианты и расширения шестнадцатеричного формата Intel, включая Цифровые исследования (как в так называемом "шестнадцатеричном формате Digital Research"),[3] Зилог, Инструменты Техаса, Микрочип, и c't. Они могут содержать информацию о точках входа в программу и содержимом регистров, об измененном порядке байтов в полях данных и других различиях.

Шестнадцатеричный формат 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.

Кросс-макроассемблер AS Альфреда Арнольда,[1] Вернера Хеннига-Ролеффа 8051 -эмулятор SIM51 и кросс-преобразователь BINTEL Маттиаса Р. Пола также известны для определения расширений шестнадцатеричного формата Intel.

Смотрите также

Рекомендации

  1. ^ а б c d е ж грамм час Арнольд, Альфред (2020) [1996, 1989]. «6.3. P2HEX». Macro Assembler AS - Руководство пользователя. V1.42. Перевод Арнольда, Альфреда; Хильсе, Стефан; Кантак, Стефан; Селлке, Оливер; Де Томази, Витторио. В архиве из оригинала на 2020-02-28. Получено 2020-02-28. […] Для Микроконтроллеры PIC, ключ -m <0..3> позволяет сгенерировать три различных варианта формата Intel Hex. Формат 0 - INHX8M, который содержит все байты в нижнем верхнем порядке. Адреса становятся вдвое больше, потому что PIC имеют адресное пространство, ориентированное на слова, которое увеличивает адрес только на один за слово. […] В формате 1 (INHX16M) байты хранятся в их естественном порядке. Это формат Микрочип использует для собственного программирования устройства. Формат 2 (INHX8L) соотв. 3 (INHX8H) разбивают слова на их нижние соотв. старшие байты. […] К сожалению, в литературе можно найти разные утверждения о последней строке файла Intel-Hex. Следовательно, P2HEX знает три различных варианта, которые можно выбрать […]: 00000001FF […]: 00000001 […]: 0000000000 […] По умолчанию используется вариант 0, который кажется наиболее распространенным. […] Если имя целевого файла не имеет расширения, предполагается расширение HEX. […]
  2. ^ а б c «3.1. Формат файла Intel 8086 Hex». Операционная система CP / M-86 - Руководство по системе (PDF) (2-е издание, 1-е изд.). Пасифик Гроув, Калифорния, США: Цифровые исследования. Июнь 1981 г. С. 15–16. В архиве (PDF) из оригинала на 2020-02-28. Получено 2020-02-28. (17 страниц)
  3. ^ а б c d «Приложение C. Формат шестнадцатеричного вывода ASM-86». CP / M-86 - Операционная система - Руководство программиста (PDF) (3-е изд.). Пасифик Гроув, Калифорния, США: Цифровые исследования. Январь 1983 [1981]. С. 97–100. В архиве (PDF) из оригинала на 27.02.2020. Получено 2020-02-27. […] Intel формат идентичен формату, определенному Intel для 8086. В Цифровые исследования формат почти идентичен формату 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. ^ а б c d «Интерактивный дизассемблер - шестнадцатеричные форматы файлов». Hex-лучи. 2006. В архиве из оригинала 2020-03-01. Получено 2020-03-01. [2]
  5. ^ "AR # 476 PROMGen - Описание форматов файлов PROM / EEPROM: MCS, EXO, HEX и другие". Xilinx. 2010-03-08. Шестнадцатеричный объект Intel MCS-86 - код формата файла 88. В архиве из оригинала 2020-03-03. Получено 2020-03-03.
  6. ^ а б «Приложение D. Абсолютные форматы объектных файлов MCS-86: шестнадцатеричная форма объектных файлов». Утилиты семейства 8086 - Руководство пользователя систем разработки на базе 8080/8085 (PDF). Редакция E (A620 / 5821 6K DD ed.). Санта-Клара, Калифорния, США: Корпорация Intel. Май 1982 [1980, 1978]. стр. D-8 – D-13. Номер заказа: 9800639-04. В архиве (PDF) из оригинала на 2020-02-29. Получено 2020-02-29.
  7. ^ а б c Спецификация формата шестнадцатеричного объектного файла. Редакция А. Intel. 1998 [1988-01-06]. Получено 2019-07-23. [3][4]
  8. ^ «Общие: формат файла Intel Hex». ARM Germany GmbH. В архиве из оригинала на 27.02.2020. Получено 2017-09-06.
  9. ^ а б Файхтингер, Хервиг (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. В книге также описывается БНПФ, а Motorola S и MOS 6502 шестнадцатеричный формат.)
  10. ^ а б 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. Получено 2020-02-27. [5][6] (NB. В этом руководстве также описывается "БПНФ Формат бумажной ленты »,« Формат шестигранной бумажной ленты не Intellec »и« Формат компьютерной перфокарты PN ».)
  11. ^ Zschocke, Jörg (ноябрь 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. (So ​​verfahren die meisten Assembler unter CP / M, auch der XASM09; das Typbyte ist dann immer Null). […] [7] (NB. XASM09 это Motorola 6809 ассемблер.)
  12. ^ Прайор, Джеймс Э. (24 февраля 1989 г.). "Re: вопросы о формате Intel в шестнадцатеричном формате (* .HEX)". Группа новостейcomp.os.cpm. Получено 2020-02-27.
  13. ^ а б c "Спецификация программирования PIC16C5X 5.0 - Шестнадцатеричные форматы данных PIC16C5X: 5.1. 8-битный шестнадцатеричный формат Intellec (INHX8S) / 5.2. 8-битный объединенный шестнадцатеричный формат Intellec (INHX8M) / 5.3. 16-битный шестнадцатеричный формат / 5.4. 8-бит Формат слова / 5.5. 16-битный формат слова ». Справочник по микрочипам (Издание 1994 г.). Microchip Technology Inc. Апрель 1994. С. 3-10–3-11, 9-10, 9-15, 9-17, 9-21, 9-23, 9-27. DS00018G. Получено 2020-02-28. […] Ассемблеры для PIC16C5X могут создавать объектные файлы PIC16C5X в различных форматах. Программист PIC16C5X должен иметь возможность принимать и отправлять данные как минимум в одном из следующих форматов. 8-битный объединенный формат (INHX8M) является предпочтительным. […] Формат […] INHX8S […] создает два 8-битных файла Hex. Один файл будет содержать пары адрес / данные для 8-ми битов старшего разряда, а другой файл будет содержать 8-биты младшего разряда. Расширения файлов для объектного кода будут '.obl' и '.obh' для файлов младшего и высокого порядка […] формат […] INHX8M […] создает один 8-битный шестнадцатеричный файл с комбинацией младших и старших байтов. Поскольку каждый адрес может содержать только 8 бит в этом формате, все адреса будут удвоены. Расширения файлов для объектного кода будут иметь формат '.obj' […] […] INHX16 […] создает один 16-битный файл Hex. Расширение файла для объектного кода будет «.obj». […] [8][9]
  14. ^ Борода, Брайан (2016) [2010]. "Формат HEX-записи Microchip INHX8M". Lucid Technologies. В архиве из оригинала на 2020-02-28. Получено 2020-02-28.
  15. ^ Борода, Брайан (2016) [2013]. "Формат HEX-записи Microchip INHX32". Lucid Technologies. В архиве из оригинала на 2020-02-28. Получено 2020-02-28.

дальнейшее чтение

внешняя ссылка

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