- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
解读hex文件
PIC HEX文件格式分析 - 适用MPLAB
HYPERLINK /blog/ \l m=0t=1c=fks_084067087081084070080095084095085084080066082080085074093 \o 8位機 8位機 2011-03-25 11:26:40 阅读39 评论0 ??字号:大中小?订阅
本文引自: HYPERLINK /212583/95624 /212583/95624
概要
.HEX文件是MPLAB生成的一种可执行文件的格式,它本身是由ASCII字符组成的,但其包含16进制的可执行代码的信息,也就是说,这类文件描述在程序存储器的哪个单元放入什么指令。
.HEX文件的种类
MPLAB可以生成3种不同格式的可执行文件。其中两种是.HEX文件,它们分别称为INHX8M格式(Intel Hex Format)和INHX32格式(Intel Hex 32 Format);另外一种称为INHX8S格式(Intel Split Hex Format),这种格式会同时生成.HXL和.HXH文件,两个文件分别存放指令数据的低字节和高字节。这里只讨论两种.HEX文件。MPLAB内嵌的连接器MPLINK在默认情况下生成INHX32格式的.HEX文件,也可以使用/aINHX8M选项指定生成INHX8M格式的.HEX文件。我们的烧写器应该能支持这两种格式的.HEX文件。
INHX32格式的.HEX文件
一个INHX32格式的.HEX文件是由若干个形式相同的行构成的。
行的种类
对于最多只有8K字程序空间的PIC16F87X单片机而言,相应的.HEX文件只有3种不同的行:线性地址定位行,代码数据行,结尾标志行。一个.HEX文件的第1行是一个线性地址定位行,后面接着是若干个代码数据行,最后一行是结尾标志行。线性地址定位行仅仅对超过32K字代码的程序有用。实际上,INHX32格式与INHX8M格式的不同之处就在于它能表示超过32K字代码的程序。线性地址定位行中指定指令存放地址的高16位,而低16位由代码数据行中的“AAAA”部分指定。“AAAA”表示指令存放地址的2倍,所以最多能表示32K字的指令,而PIC16F87X单片机最多只有8K字程序空间,故不需要用到指令地址的高16位,因此.HEX文件的线性地址定位行指定的指令地址的高16位总为“0000”。代码数据行指定一段连续存放的代码的起始存放地址和代码值。通常一行中最多有16条语句的代码。结尾标志行标志整个文件的结束。
行的格式
一个INHX32格式的.HEX文件的每一行都是下面这种格式::BBAAAATTHHHH....HHHHCC即开始是9个字符组成的前缀“:BBAAAATT”,加上若干个4字符的“HHHH”数据,结尾是2个字符的校验字“CC”。这里所说的“字符”是指组成文件的ASCII字符,而一个16进制“字节”必须用两个“字符”表示。各个部分的意义是:: 一行的开始符。BB 数据部分的字节数,即“HHHH”部分的字节数。AAAA 代码开始存放的地址的2倍。仅在代码数据行中有意义,在其余两种类型的行中这一部分为“0000”。TT 行的类型。????????? 00??? 代码数据行????????? 01??? 结尾标志行????????? 02??? 段地址定位行(PIC16F87X单片机的.HEX文件中没有用到)??? ????????? 04??? 线性地址定位行HHHH 在代码数据行中,表示一条14-bit的指令代码,其中低字节在前,高字节在后,比如“movlw 0xaa”这条指令对应的代码是30AA,相应的HHHH表示为AA30;在结尾标志行中,没有这一部分;在线性地址定位行中,这一部分为指令存放地址的高16位。CC 校验字。校验规则是,本行中前面所有的字节(两个字符)表示的16进制数相加,再加上CC表示的16进制数,所得的和必须是256的整数倍,即用16进制表示时末尾两位都为0。
示例
下面是一个简单的程序的汇编语句及对应的可执行代码。地址???? 代码?? 汇编解析??????? 源程序 -------? -----? -----------???? ---------------------??????????????????????????????? org?? 0x0000000000?? 2810?? GOTO? 0x10????? goto? main??????????????????????????????? org?? 0x0004000004?? 2818?? GOTO? 0x18????? goto? int_
文档评论(0)