Intel十六进制格式

Intel十六进制格式是一种由Intel开发,以ASCII文本形式传达二进制信息的文件格式。 通常被用于对微控制器EPROM和其他类型的可编程逻辑器件和硬件仿真器进行编程。

Intel hex
扩展名
.hex,[1] .h86,[2][3] .hxl,[4] .hxh,[4] .obl,[4] .obh,[4] .mcs,[5] .ihex, .ihe, .ihx, .a43, .a90, .p00[6] to .pff[6]

在典型的应用程序中,编译器汇编器程序源代码(例如C语言或汇编语言)转换为机器代码并将其输出到HEX文件中。也可以將它用作保存流数据容器格式。 用于生成文件的通用文件扩展名是 .HEX或 . H86。然后程序通过读取HEX文件将机器代码写入PROM或传输到目标系统以进行加载和执行。

历史

Intel十六进制格式最初是在1973年为Intel的Intellec 微型计算机开发系统(MDS) 设计的,以便从纸带加载和执行程序。它还用于向英特尔指定用于 ROM 生产的内存内容从 1975 年开始,MCS 系列 II ISIS-II系统使用该格式,使用文件扩展名 HEX。 许多PROMEPROM编程设备都接受这种格式。

格式

包含由换行符回车符或两者分隔的ASCII文本行。每个文本行都包含对多个二进制数进行编码的十六进制字符。二进制数可以表示数据、内存地址或其他值,具体取决于它们在行中的位置以及行的类型和长度。每个文本行称为一个记录

记录结构

一条记录(文本行)由六个字段(部分)组成,从左到右依次出现:

  1. 起始码,一个字符,一个 ASCII 冒号 ' : '。记录中该符号前面的所有字符都应被忽略。 事实上,该规范的早期版本甚至要求在第一个记录之前和最后一个记录之后至少有 25 个NUL字符。 然而,由于这是规范中鲜为人知的部分,并非所有编写的软件都能正确处理这一点。它允许将其他相关信息存储在同一文件(甚至同一行)中, 各种软件开发实用程序用来存储符号表或附加注释的工具,和第三方扩展使用其他字符作为起始码,例如Keil的数字“ 0 ”, Mostek的 ' $ ', 或 ' ! '、' @ '、' # '、' \ '、' & '和' ; ' 而按照惯例,' // ' 通常用于注释。这些扩展都不能包含任何 ':' 字符。
  2. 字节数量 ,由两个十六进制数字(一个十六进制数字对)组成,表示数据字段中的字节数(十六进制数字对)。最大字节数为255(0xFF)。8(0x08), 16(0x10)和32(0x20)是常用的字节数。因为并非所有软件都能处理大于16的计数。
  3. 地址,由四个十六进制数字组成,代表数据的 16 位起始内存地址偏移量。数据的物理地址是通过将此偏移量添加到先前建立的基地址来计算的,因此允许内存寻址超出 16 位地址的 64 KB 限制。基地址,默认为零,可以被各种类型的记录改变。基地址和地址偏移量始终表示为大端值。
  4. 记录类型(见下面的记录类型),由两个十六进制数字,00至 05 、定义数据字段的含义。
  5. 数据,一个n字节数据的序列,由2n个十六进制数字表示。一些记录省略了这个字段( n等于 0)。数据字节的含义和解释取决于应用程序。 (4 位数据必须存储在字节的下半部分或上半部分,也就是说,一个字节只包含一个可寻址数据项。 )
  6. 校验和,由两个十六进制数字组成,可用于验证记录没有错误的计算值。

参考资料

  1. ^ 引证错误:没有为名为Arnold_2020_AS的参考文献提供内容
  2. ^ 引证错误:没有为名为DRI_1981_CPM86-SG的参考文献提供内容
  3. ^ 引证错误:没有为名为DRI_1983_CPM86-PG的参考文献提供内容
  4. ^ 4.0 4.1 4.2 4.3 引证错误:没有为名为IDA_2006_Hexforms的参考文献提供内容
  5. ^ 引证错误:没有为名为Xilinx_2010_MCS的参考文献提供内容
  6. ^ 6.0 6.1 引证错误:没有为名为Roche_2000的参考文献提供内容