加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

你怎么理解Hex文件? (扩展地址记录)

发布时间:2020-12-16 05:06:22 所属栏目:百科 来源:网络整理
导读:我正在尝试为PIC18制作一个引导程序,所以我需要了解如何正确处理hex文件.例如,我理解如何处理以下十六行. :040C0000E2EFFFF030 04:字节数 0C00:十六进制数字的地址 00:数据记录 E2EFFFF0:数据序列 30:校验和 所以我会知道如何处理上面的行,但是下面的十
我正在尝试为PIC18制作一个引导程序,所以我需要了解如何正确处理hex文件.例如,我理解如何处理以下十六行.
:040C0000E2EFFFF030

04:字节数

0C00:十六进制数字的地址

00:数据记录

E2EFFFF0:数据序列

30:校验和

所以我会知道如何处理上面的行,但是下面的十六行怎么样.

:020000040001F9

02:字节数

0000:地址

04:扩展线性地址记录

0001:数据

F9:校验和

但究竟我该怎么做呢?我是否将这些数据写入该地址?你能把它翻译成机器语言吗?

顺便说一句,我的应用程序从地址0c00开始,bootloader从地址0020开始,在它上面,是中断向量.谢谢!

更新

如果hex文件的第三行是以下,地址FFC0会改变吗?

:10FFC000FF00FF00FF00FF00FF00FF000001E9EF5E

我在想,因为hex文件的第二行有04(扩展线性地址记录),那么我应该将0001添加到第三行FFC0的地址,所以新地址将是这样的.

$0001 $FFC0将等于1FFC0,因此第3行的下一组数据字节应写入此地址1FFC0,这是正确的吗?

解决方法

来自维基百科 Intel Hex(此类信息的明显来源)

04,Extended Linear Address Record,allowing for fully 32 bit
addressing (up to 4GiB). The address field is 0000,the byte count is
02. The two data bytes (two hex digit pairs in big endian order) represent the upper 16 bits of the 32 bit address for all subsequent
00 type records until the next 04 type record comes. If there is not a
04 type record,the upper 16 bits default to 0000. To get the absolute
address for subsequent 00 type records,the address specified by the
data field of the most recent 04 record is added to the 00 record
addresses.

所以公式是(linAddr<< 16)addr或在你的情况下($0001<< 16)$FFC0 对于02 /扩展段地址记录的情况,公式更改为(segAddr<< 4)addr

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读