80C51和ARM的Intel hex解析
更改说明
版本号 |
日期 |
作者 |
描述 |
1.0 |
2020-11-20 |
靴子丢了的猫 |
第一个版本 |
1.1 |
2020-11-21 |
靴子丢了的猫 |
添加ARM汇编和intel hex对应关系 |
- 创建开发环境得到汇编代码
- 创建开发环境
由于新换了电脑所以需要装C51的开发环境,下了几个版本都是ARM的开发环境,不过最终还是找到了C51版本的keil,版本信息如下:
然后创建了一个工程,添加了测试代码以后测试如下:
- 编译得到汇编
编译以后选择模拟调试:
点击开始调试:
然后得到汇编代码如下:
- 整理汇编文件和Intel hex
- 汇编文件整理
上面已经展示的汇编由于参杂了注释需要进一步整理分析:
需要参考工程请下载:https://download.csdn.net/download/qq_39880374/13133287 资源文件方便您查看
详情请看aa工程中的asm.asm
// 0x0000地址存放跳转指令跳转到080F C:0x0000 02080F LJMP STARTUP1(C:080F) 6: int main(){ 7: int a=0; C:0x0800 E4 CLR A C:0x0801 F508 MOV 0x08,A C:0x0803 F509 MOV 0x09,A 8: delay(100); C:0x0805 7F64 MOV R7,#0x64 C:0x0807 FE MOV R6,A C:0x0808 12081B LCALL delay(C:081B) 9: return 0; 10: C:0x080B E4 CLR A C:0x080C FE MOV R6,A C:0x080D FF MOV R7,A 11: } C:0x080E 22 RET 133: MOV R0,#IDATALEN - 1 ************************************************************* STARTUP.A51的内容 C:0x080F 787F MOV R0,#0x7F 134: CLR A C:0x0811 E4 CLR A 135: IDATALOOP: MOV @R0,A C:0x0812 F6 MOV @R0,A 136: DJNZ R0,IDATALOOP C:0x0813 D8FD DJNZ R0,IDATALOOP(C:0812) C:0x0815 758109 MOV SP(0x81),#0x09 196: LJMP ?C_START C:0x0818 020800 LJMP main(C:0800) ************************************************************* 3: void delay(int t){ 4: while(t--); C:0x081B EF MOV A,R7 C:0x081C 1F DEC R7 C:0x081D AC06 MOV R4,0x06 C:0x081F 7001 JNZ C:0822 C:0x0821 1E DEC R6 C:0x0822 4C ORL A,R4 C:0x0823 70F6 JNZ delay(C:081B) 5: } C:0x0825 22 RET C:0x0826 00 NOP |
- Intel hex
然后是Intel hex的内容:参考aa工程下的aa.hex
:0300000002080FE4 :0C080F00787FE4F6D8FD7581090208002E :0B081B00EF1FAC0670011E4C70F622AF :0E080000E4F508F5097F64FE12081BE4FEFF14 :01080E0022C7 :00000001FF |
- 解析intel hex与汇编对应
- Intel hex格式
由于以前只是稍稍看了一下hex的文件结构,没有深究参考这篇文章:
https://blog.csdn.net/lwanttowin/article/details/56682047
参考博客得到信息如下:
有一条intel hex语句如下(用我们上面的整理的语句吧)
:0300000002080FE4
得到了这两个文件以后需要确定的是如何解析intel hex并且让其与汇编对应。这也就是接下来要做的工作
:0300000002080FE4 |
这条语句可以拆分成如下的本部分:
: 03 0000 00 02080F E4 起始标志 数据长度 地址 记录类型 数据 检验和 |
了解了这个以后需要明确的是这些数据分别对应了汇编中的什么东西,由于我是使用的notepad查看所以分离了数据以后首先观察到的就是02080F这个数据对应了LJMP STARTUP1这样一条语句:
然后我将上面的那些语句前面的十六进制进行了整理
02080F 787F E4 F6 D8FD 758109 020800 E4 F508 F509 7F64 FE 12081B E4 FE FF EF 1F AC06 7001 1E 4C 70F6 22 |
同时对intel hex进行了分割:
:03 0000 00 02080F E4 :0C 080F 00 787F E4 F6 D8FD 758109 020800 2E :0B 081B 00 EF 1F AC06 7001 1E 4C 70F6 22 AF :0E 0800 00 E4 F508 F509 7F64 FE 12081B E4 FE FF 14 :01 080E 00 22 C7 :00 0000 01 FF |
然后就发现数据段的部分和我分离出的十六进制顺序是一致整理后展示如下:
Intel hex地址就对应了在单片机ROM中的储存位置,后面的数据段就分别对应了不同的指令和数据,由于在ROM中储存的位置不一样,所以上面Intel hex就在不同的行,连续的指令数据是在统一行的。
以上就找到了intel hex和实际机器指令的关系的关系,那么下一步就需要找到指令和汇编代码之间的关系。
- 机器码与对应的汇编
我对比了比较长的时间去对比MOV汇编指令看看有没有对应关系:
结果发现这些MOV指令不是同一条照我的理解每一条MOV指令应该是这样的结构:
MOV指令(八位根据数据不同而不同)+数据……
然后查阅相关资料得到如下的博客内容:指令集参考博文
https://blog.csdn.net/weixin_30363981/article/details/99122106
我对比了下面这样一条指令和博客所给出的结果如下:
发现我猜想的确实是如此,MOV指令不同的情况下机器码不一样,所以找起来没有头绪,不过有这样一张表对应着就刚好能够找出所有的对应的规则。
至此intel hex和汇编的对应关系就建立起来了,如果想要整理出整套的编译规则那么顺应着上面介绍的内容就可以了。
- ARM汇编和intel hex
依照着上述的步骤在keil for arm的环境下创建工程展示如下:
然后得到汇编代码展示如下:
编译产生的hex文件如下图所示:
由于我测试的编译工程较大找对应关系还是同找51汇编和产生的额intel hex关系一样,由于我只是复制出部分的汇编代码所以需要找到地址对应的代码部分最终找到一部分对应的:
红色标记的部分是地址,蓝色标记的部分intel hex的数据段对应了汇编部分,你会看到高八位和低八位是反着的这就是大小字节序的问题,这个对应关系和51汇编对应的方式是一样的,最后当然是机器码和汇编的对应部分了,当然这部分比较复杂,如果您想了解具体的ARM机器指令请参考图书:《ARM体系结构与编程》杜春雷。
版权声明:博客内提及的内容仅作为学习使用。本文刊载的所有内容为本人自主创作,访问者可将本文提供的内容或服务用于个人学习、研究或以及其他非商业性或非盈利性用途。如需作商业用途需要请求作者意见,同时应遵守著作权法及其他相关法律的规定,不得侵犯本文及作者的合法权利。
80C51和ARM的Intel hex解析相关推荐
- Intel HEX文件解析
Hex文件的INTEL格式:这是Intel公司提出的按地址排列的数据信息,数据宽度为字节, 所有数据使用16进制数字表示. 这是一个例子: :10008000AF5F67F0602703E0322CF ...
- c语言解析hex文件格式,HEX文件格式,ihex,hex解析
来自:http://blog.csdn.net/GZFStudy/archive/2008/09/03/2873814.aspx Intel HEX 文件是由一行行符合Intel HEX 文件格式的文 ...
- Intel Hex 文件格式
简介 这种文件格式一般是以hex为后缀名,在嵌入式MCU程序开发中,经常编译链接后生成一个这样文件,然后将这个文件烧写到MCU的ROM中. 所以,这个是开发工程的输出文件类型的一种. 发明这种文件格式 ...
- 【嵌入式烧录/刷写文件】-2.1-详解Intel Hex格式文件
目录 1 什么是Intel Hex 2 Intel Hex的格式 2.1 Intel Hex的Record结构 2.1.1 "Record type记录类型"的说明 2.1.2 & ...
- ARM、Intel、MIPS处理器的区别
安卓支持三类处理器(CPU):ARM.Intel和MIPS.ARM无疑被使用得最为广泛.Intel因为普及于台式机和服务器而被人们所熟知,然而对移动行业影响力相对较小.MIPS在32位和64位嵌入式领 ...
- 【Android 逆向】arm 汇编 ( 使用 IDA 解析 arm 架构的动态库文件 | 分析 malloc 函数的 arm 汇编语言 )
文章目录 一.分析 malloc 函数的 arm 汇编语言 一.分析 malloc 函数的 arm 汇编语言 在上一篇博客 [Android 逆向]arm 汇编 ( 使用 IDA 解析 arm 架构的 ...
- Intel Hex格式说明
1.什么是Intel Hex文件 Intel HEX文件时遵循Intel HEX文件格式的ASCII文本文件.在Intel HEX文件的每一行都包含了 一个HEX记录.这些记录是由一些代表机器语言代码 ...
- Intel Hex概述
什么是Intel Hex文件 Intel HEX文件时遵循Intel HEX文件格式的ASCII文本文件.在Intel HEX文件的每一行都包含了 一个HEX记录.这些记录是由一些代表机器语言代码和常 ...
- hex文件matlab处理,基于MATLAB生成Intel HEX文件
%生成Intel Hex file的MATLAB源程序 %see also http://www.matlabsky.com %2008.12.6 % % Intel HEX文件是由一行行符合Inte ...
最新文章
- Angular - - ngReadonly、ngSelected、ngDisabled
- grep、cut、awk、sed文本处理
- python测试网站功能_Python检测网站链接是否已存在
- vb.net中的-String类
- matlab 2017 ubuntu,ubuntu安装matlab R2017,
- “自启动”树莓派上的 .NET Core 3.0 环境
- C语言自学《三》---- 条件判断
- c语言编程命令,C语言编程命令
- 《Expert C Programming》(C专家编程)读书笔记
- Unity3D 一些工具总结
- 有意思的atoll函数
- excel冻结行和列_怎样锁定Excel表格中的某一行或某一列
- Android打开日历账号管理,Android 日历CalendarProvider
- 哇哦,它让美味随心所“鲜”
- ftp服务器文件复制文件路径,FTP将文件复制到同一FTP的另一个位置
- 定位器百科:老人、小孩的GPS定位器是如何工作的
- 【Proteus仿真】【51单片机】LED点阵花样显示设计
- zookeepr 简介
- 百度百科计算机科学与技术,徐明伟(清华大学计算机科学与技术系教授)_百度百科...
- 【CJOJ P1096】最佳老农
热门文章
- 你的计算机 dota2服务器,(仅负责处理)盲目追求高性能计算机配置的朋友,您确实使用... [dota2 bar]...
- 安全帽识别系统的基本参数
- Linux命令之精确控制文件访问权限setfacl
- 开机后 电子计算机器上显示什么,电脑开机后显示器无信号怎么回事 应该怎么处理...
- 关于DNS反解的一些资料
- 稀疏学习、稀疏表示、稀疏自编码神经网络、字典学习、主成分分析PCA、奇异值分解SVD 等概念的梳理,以及常用的特征降维方法
- 2021,CSS杀疯了
- 2020年6月营销节点来啦(附活动建议)
- [分享]尝试赞美这残缺的世界
- 帝国网站管理系统之网站迁移教程