什么是hex文件
以*.hex为后缀的文件我们称之为HEX文件。hex是intel规定的标准,hex的全称是Intel HEX,此类文件通常用于传输将被存于ROM或EEPROM中的程序和数据。是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。
HEX的英语原始意思是16进制。这种文件格式主要用于保存单片机固件。
整个文件以行为单位,每行以冒号开头,内容全部为16进制码,2个ASCII码字符表示1个Hex字节
起始码:每行数据作为一帧,并由:作为起始码;
数据长度:两个十六进制数字(一对十六进制数字),指示数据字段中的字节数(十六进制数字对)。最大字节数为255(0xFF)。16(0x10)和32(0x20)是常用的字节数;
地址:四个十六进制数字,代表数据的16位起始存储器地址偏移量。数据的物理地址是通过将此偏移量添加到先前建立的基地址来计算的,因此允许内存寻址超过16位地址的64 KB限制。基地址默认为零,可以通过各种类型的记录进行更改。基地址和地址偏移量始终表示为大端值。
校验码:(两个十六进制数字),可以用来验证记录没有错误的计算值;
数据:n字节数据序列,由2个n十六进制数字表示;
注意校验和算法:累加和=校验码之前所有16进制,校验和=0x100-累加和。
Hex文件解析
可以看做是0x02 0x00 0x00 0x04 0x08 0x04 0xEE
02:代表本行有2个字节数据
0000:表示偏移地址或无用填0
04:数据类型,扩展线性地址标识,表面后面2个字节数据是后面数据的基地址
注:由于每行标识数据地址的只有2Byte,所以最大只能到64K,为了可以保存高地址的数据,故有了扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录含数据的高16位,扩展线性地址记录总是有两个数据字节。
0804:是扩展地址 (0x0804 << 16) = 0x08040000后面的数据记录都以这个地址为基地址。
EE: 记录本行校验和 EE=0x100-(0x02+0x04+0x08+0x04)
10 0000 00 A8990020C1010408830B040839080408 DA
10:有0x10个Byte数据(即16个字节数据)
0000:表示本行数据起始地址为0x08040000,下一行则是0x08040010依次类推
00:数据类型,表示后面字节为记录的数据
A8990020C1010408830B040839080408:16个byte的数据
DA: 校验和
04 0000 05 080401AD 3D
04:表示有4个Byte数据
0000:无用填0
05:数据类型,表示开始线性地址记录
080401AD:表示要执行的下一个指令的地址(main函数地址) 3D:校验和
00000001FF
00:代表本行有0个字节数据 0000:无用填0
01:数据类型,标识hex文件结束 FF:校验和
指令类型
两个十六进制数字00到05,定义了这行数据的具体含义
数据类型 |
作用 |
'00' DataRrecord |
用来记录数据,HEX文件的大部分记录都是数据记录 |
'01' End of File Record |
用来标识文件结束,放在文件的最后,标识HEX文件的结尾。数据字段为空(因此字节数为00)并且地址字段通常为 0000 |
'02’Extended Segment Address Record |
用来标识扩展段地址的记录,数据字段包含一个16位的段基址(因此字节数始终为02)与80x86实模式寻址兼容。地址字段(通常为0000)被忽略。最近的段地址02记录乘以16,然后加到每个后续数据记录地址,以形成数据的物理起始地址。这允许寻址多达1MB的地址空间 |
'03' Start Segment Address Record |
开始段地址记录,对于80x86处理器,请指定CS:IP寄存器的初始内容(即起始执行地址)地址字段是0000,字节数始终为04,前两个数据字节是CS值,后两个是IP值 |
'04’ Extended Linear Address Record |
用来标识扩展线性地址的记录,允许32位寻址(最大4GiB)。记录的地址字段将被忽略(通常是0000),其字节数始终为02。两个数据字节(大字节序)为所有后续类型指定32位绝对地址的高16位00记录,这些高位地址位适用于下一个04记录。类型的绝对地址00 通过组合最近的高16位地址位形成记录 04 用低16位的地址记录 00记录如果是类型00 记录之前没有任何类型 04 记录,然后其高16位地址位默认为0000 |
'05' Start Linear Address Record |
开始线性地址记录,地址字段是 0000(未使用),字节数始终为04。四个数据字节代表一个32位地址值(big-endian)。对于80386和更高版本的CPU,此地址将加载到EIP寄存器中。 |
文章评论