1.什么是Intel Hex文件

Intel HEX文件时遵循Intel HEX文件格式的ASCII文本文件。在Intel HEX文件的每一行都包含了 一个HEX记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成的。Intel HEX文件常用来传输要存储在ROM 或者 EPROM中的程序和数据。大部分的EPROM编程器能使用Intel HEX文件。

2.Intel HEX文件组成

Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列:

Start Code 每个Intel HEX记录都由冒号开头。

Byte count 是数据长度域,它代表记录当中数据字节的数量。

Address 是地址域,它代表记录当中数据的起始地址。

Record type是代表HEX记录类型的域,它可能是以下数据当中的一个:

00-数据记录

01-文件结束记录

02-扩展段地址记录

03-开始段地址记录

04-扩展线性地址记录

05-开始线性地址记录

3.内容分析

(00)数据记录

Intel HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束<回车为0x0d换行为0x0a>。
比如下面的一条数据记录

:10246200464C5549442050524F46494C4500464C3

10      是此行记录数据的字节数目
2462     是数据在内存<将要烧写的eprom地址>中的起始地址
00      是记录类型00(是一个数据记录)
46到4C    是数据

33      是此行记录的效验和

(01)文件结束记录(EOF)

一个Intel HEX文件必须有一个文件结束记录,这个记录的类型域必须是01,
一个EOF记录总是这样:

:00000001FF

00     是记录中数据字节的数目
0000    这个地址对于EOF记录来说无任何意义
01     记录类型是01(文件结束记录标示)
FF     是效验和计算如下

01h + NOT(00h + 00h + 00h + 01h).

(02)扩展段地址记录 (HEX86)

扩展段地址记录也被称为 HEX86记录, 包含 4-19位的数据地址段,这个扩展段地址记录总是有两字节数据,如下:

:020000021200EA

02       是记录中的数据字节数目
0000      是地址域(在扩展段地址记录中,这个域总是0000)
02       是记录类型02(扩展段地址的标示)
1200      是该段的地址

EA       是效验和计算如下:
01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).

当扩展段地址记录被读后,扩展段地址将被存储并应用到以后从Intel HEX文件读出的记录,这个段地址一直有效直到读到下一个扩展段地址记录

绝对内存地址 = 数据记录中的地址 + 移位后的扩展段地址(这个需要左移8位)

下面举例说明这个过程:
从数据记录的地址域得到地址 :     2 4 6 2
从扩展段地址记录的地址域得到地址:  1 2 0 0
绝对内存地址:             0 0 0 1 4 4 6 2

(03)开始段地址记录

对于80x86处理器,他指定CS:IP寄存器的初始内容,地址域为0000,数据数目为04,前2个位CS值,后面两个为IP值。

(04)扩展线性地址记录(HEX386)

扩展线性地址记录也可称为 32位地址记录 和 HEX386记录,这个纪录包含高16(16-31位)位数据地址,这种扩展的线性记录总是有两个字节数据,像下面这样:

:02000004FFFFFC
02      是记录的数据字节数目
0000     是地址域(在扩展地址记录中总是0000)
04      是记录类型04(扩展地址记录)
FFFF     是高16位地址
FC      是记录效验和,计算方法如下:
01h + NOT(02h + 00h + 00h + 04h + FFh + FFh)

当一个扩展线性地址记录被读到后,扩展线性地址记录的数据区域将被保存并应用到后面从Intel HEX文件中读出的记录,这个扩展线性记录一直有效,直到读到下一个扩展线性记录.

绝对内存地址 = 数据记录中的地址 + 移位后的扩展线性地址(这个需要左移16位)

示例如下:

从数据记录的地址域得到地址:       2462
从扩展线性地址记录的地址域得到地址:   FFFF
则绝对内存地址为:            FFFF2462

(05)开始线性地址记录

地址域为0000,数据个数为04,4位数据描述的是装载进80386或者更高cpu EIP寄存器的32bit值。

完整的hex文件一般有头行,数据行,结束行。

举个例子如下:

:020000042A00D0
:10000000D1DC4B843410D7730D000000FFFFFFFFDD
:10001000FFFFFFFF500000005000002AD8CB000077

:040000052A000000CD
:00000001FF

第一行(头行):

1) 02代表数据域长度为0x02,即2A 00两个字节都为数据域

2) 0000代表地址,对于扩展线性地址而言,这个值一直为0000

3) 04代表扩展线性地址

4) 2A 00代表基址值为0x2A 00

5) D0代表校验值

当扩展线性地址被读取时,扩展线性地址值将会被保存,并且作用于后面从intel hex文件读取的子记录,同时扩展线性地址将一直发挥作用直到下一次扩展性线性地址读取。

第二行(数据行):

1) 10代表数据域长度为0x10,即D1 DC 4B 84 34 10 D7 73 0D 00 00 00 FF FF FF FF 16个字节都为数据域

2) 0000代表地址偏移为0000

3) 00代表数据域

4) D1 DC 4B 84 34 10 D7 73 0D 00 00 00 FF FF FF FF 代表数据值

5) 77代表校验值

绝对地址记录是扩展线性基址加上地址偏移所决定的,这第二行的数据绝对地址计算如下:

0000 地址偏移

2A00 扩展线性地址

-------------------

2A00 0000 绝对地址

倒数第二行(最后的数据行):

1) 04代表数据域长度为0x04,即2A 00 00 00 4个字节都为数据域

2) 0000代表地址偏移为0000

3) 05代表开始线性地址并且后面才是真正数据记录。而真正的数据记录个人理解为后面读取的mbn数据。

4) 2A 00 00 00 代表真正数据记录的基址

5) CD代表校验值

最后行(结束行):

1) 00代表数据域长度为0

2) 0000代表地址将放入到内存的位置

3) 01代表文件结束

4) FF校验值(01h + NOT(00h + 00h + 00h +01h))

Intel Hex格式说明相关推荐

  1. 【嵌入式烧录/刷写文件】-2.1-详解Intel Hex格式文件

    目录 1 什么是Intel Hex 2 Intel Hex的格式 2.1 Intel Hex的Record结构 2.1.1 "Record type记录类型"的说明 2.1.2 & ...

  2. Intel HEX文件解析

    Hex文件的INTEL格式:这是Intel公司提出的按地址排列的数据信息,数据宽度为字节, 所有数据使用16进制数字表示. 这是一个例子: :10008000AF5F67F0602703E0322CF ...

  3. 80C51和ARM的Intel hex解析

    更改说明 版本号 日期 作者 描述 1.0 2020-11-20 靴子丢了的猫 第一个版本 1.1 2020-11-21 靴子丢了的猫 添加ARM汇编和intel hex对应关系 创建开发环境得到汇编 ...

  4. 05 hex 格式_SREC、Hex、Bin等烧录文件格式完全解读

    ↑点击上方蓝色字体,关注"嵌入式软件实战派"获得更多精品干货. ▍1. 关于烧录文件 在典型的应用程序中,编译器或汇编器将程序的源代码(例如C或汇编语言)转换为机器代码,并将其输出 ...

  5. Intel Hex概述

    什么是Intel Hex文件 Intel HEX文件时遵循Intel HEX文件格式的ASCII文本文件.在Intel HEX文件的每一行都包含了 一个HEX记录.这些记录是由一些代表机器语言代码和常 ...

  6. hex文件matlab处理,基于MATLAB生成Intel HEX文件

    %生成Intel Hex file的MATLAB源程序 %see also http://www.matlabsky.com %2008.12.6 % % Intel HEX文件是由一行行符合Inte ...

  7. Intel Hex 文件格式

    简介 这种文件格式一般是以hex为后缀名,在嵌入式MCU程序开发中,经常编译链接后生成一个这样文件,然后将这个文件烧写到MCU的ROM中. 所以,这个是开发工程的输出文件类型的一种. 发明这种文件格式 ...

  8. Intel HEX介绍

    来源: http://baike.baidu.com/view/1229888.htm Intel HEX介绍 记录格式 Intel HEX由任意数量的十六进制记录组成.每个记录包含5个域,它们按以下 ...

  9. 程序猿(媛)实用颜色表 [颜色图示,英文代码,形象颜色,HEX格式,RGB格式]

    非ie6 例如:if ( document.getElementById("XX").style.color == "rgb(184, 0, 0)") 注意:& ...

最新文章

  1. 在开课吧学python的经历-“你毕业2年,为什么写3年的工作经验?”“加班啊”...
  2. PI Function Library 应用,公共UDF开发
  3. jedis set集合 java,使用Jedis操作String、List、Set、Map等常见数据 | zifangsky的个人博客...
  4. ubuntu16.04 64bit 安装 ida
  5. 帮管客CRM客户管理系统 v3.6.0
  6. Redis系列-主从复制配置
  7. 天池实验室-Task04-Python数据分析:从0完成一个数据分析实战
  8. python参数类型定义_Python的参数类型
  9. 20190906每日一句
  10. 马克思主义哲学与价值哲学
  11. 【技术分享】Lombok!代码简洁神器还是代码“亚健康”元凶?
  12. 阿里云服务器ECS的建站完整过程
  13. 解决方案(二)— 将 http://apache.org/xml/features/disallow-doctype-decl 设置为“true”时, 不允许使用 DOCTYPE
  14. 使用Mixamo绑定骨骼导入动画
  15. unity.生成表示地图信息的二维数组_Unity3D 中生成任意形状3D Texture amp; 体积云...
  16. 机器学习四大任务:回归、分类、聚类与降维
  17. Ubuntu20.04部署ntp服务
  18. 雅思口语的具体步骤和时间安排是什么样的?
  19. Typora基础用法:pandoc安装,导入导出word文档,pdf文件。设置图片目录
  20. 移动端跨平台开发Flutter 与 React Native对比

热门文章

  1. LUOGU 3089 后缀排序(模板)
  2. 软件测试相关好文收集
  3. 英语学习APP的案例分析
  4. 搞明白这八个问题,Linux系统就好学多了
  5. Spring访问数据库异常的处理方法(转)
  6. 酒店管理系统房态图的效果制作
  7. OpenGL和D3D的区别
  8. Java连MySQL性能调优(batch insert和连续left join筛选)
  9. Nuxt爬坑系列之vuex
  10. SqlServer 获取汉字的拼音首字母