什么是HEX?
记录格式
英特尔十六进制由任意数量的十六进制记录组成。每条记录包含五个字段,按以下格式排列:
:llaaaatt[dd...]抄送
每组字母对应一个不同的字段,每个字母对应一个十六进制编码的数字。每个字段由至少两个十六进制编码的数字组成,构成一个字节,如下所述:
:每个Intel十六进制记录都以冒号开头。
Ll是数据长度字段,表示记录中的数据字节数(dd)。
Aaaa是一个地址字段,表示记录中数据的起始地址。
Tt是表示十六进制记录类型的字段,可以是以下数据之一:
00-数据记录
01–文件记录结束
02-扩展段地址记录
04-扩展线性地址记录
Dd是一个数据字段,代表一个字节的数据。一个记录可以有许多数据字节。记录中的数据字节数必须与数据长度字段(ll)中指定的数字相匹配。
Cc是校验和字段,表示该记录的校验和。校验和的计算方法是,将记录中所有十六进制编码的数字对的值相加,然后用模数256进行如下补码。
数据记录
英特尔十六进制文件由任意数量的以回车和换行符结尾的数据记录组成。数据记录的外观如下:
:10246200464 c 5549442050524 f 46494 c 4500464 c 33
其中包括:
10是该记录中的数据字节数。
2462是数据将被下载到存储器中的地址。
00是记录类型(数据记录)
464c...464c是数据。
33是该记录的校验和。
扩展线性地址记录(HEX386)
扩展线性地址记录也称为32位地址记录或HEX386记录。这些记录包含数据地址的高16位。扩展线性地址记录总是有两个数据字节,如下所示:
:02000004FFFFFC
其中包括:
02是该记录中的数据字节数。
0000是地址字段。对于扩展线性地址记录,该字段始终为0000。
04是记录类型04(扩展线性地址记录)
FFFF是地址的高16位。
FC是该记录的校验和,计算方法如下:
01h+NOT(02h+00h+00h+04h+FFh+FFh)。
读取扩展线性地址记录时,保存数据字段中存储的扩展线性地址,该地址将应用于从Intel HEX文件中读取的后续记录。线性地址保持有效,直到它被另一个扩展地址记录改变。
通过将记录中的地址字段与来自扩展线性地址记录的移位地址数据相加,获得数据记录的绝对存储器地址。
以下示例演示了这一过程。..
数据记录地址字段中的地址2462
扩展线性地址记录+FFFF的数据字段
-
绝对存储器地址FFFF2462
扩展段地址记录(HEX86)
扩展段地址记录也叫HEX86记录,包括4-19位的数据地址段。扩展段地址记录总是有两个数据字节,其外观如下:
:020000021200EA
其中包括:
02是记录中的数据字节数。
0000是地址字段。对于扩展段地址记录,该字段始终为0000。
02是记录类型02(扩展段地址记录)
1200是地址字段。
EA是该记录的校验和,计算方法如下:
01h+NOT(02h+00h+00h+02h+12h+00h)。
当读取扩展段地址记录时,保存数据字段中存储的扩展段地址,该地址将应用于从Intel HEX文件中读取的后续记录。段地址保持有效,直到它被另一个扩展地址记录改变。
通过将记录中的地址字段与来自扩展段地址记录的移位地址数据相加,获得数据记录的绝对存储器地址。
以下示例演示了这一过程。..
数据记录地址字段中的地址2462
扩展段地址记录数据字段+1200
-
绝对内存地址00014462
文件结束(EOF)记录
英特尔十六进制文件必须以文件结束(EOF)记录结尾。该记录的记录类型字段的值必须是01。EOF记录看起来总是这样:
:00000001FF
其中包括:
00是记录中的数据字节数。
0000是数据下载到存储器的地址。该地址没有意义,在文件的结束记录中被忽略。0000h是典型的地址。
01是记录类型01(文件记录结束)。
FF是该记录的校验和,计算公式如下:
01h+NOT(00h+00h+00h+01h)。
英特尔HEX文档示例:
以下是一个完整的英特尔十六进制文件示例:
:10001300 AC 12ad 13ae 10af 1112002 f8e 0e 8 f0f 2244
:10000300 e 50 b 250 df 509 e 50 a 350 cf 5081200132259
:03000000020023D8
:0c 002300787 Fe 4 f 6d 8 FD 7581130200031D
:10002 f 00 eff 88 df 0 a 4 ff EDC 5 f 0ce a 42 efeec 88 f 016
:04003F00A42EFE22CB
:00000001FF