当前位置: 首页 > news >正文

IMX6ULL裸机-汇编_反汇编_机器码

程序处理的4个步骤

我们编写的C程序是不能直接在ARM等平台上运行的,必须经过一系列的程序处理才可以,我们的第一个LED程序涉及两个文件:start.S、main.c,它们的处理过程如下:

  1. 对于汇编程序,经过汇编之后,转换成目标文件(里面包含机器码)。
  2. 对于C程序,经过预处理之后,得到.i文件,在经过编译后得到汇编文件,汇编文件经过汇编后得到目标文件。
  3. 所有目标文件经过链接之后,生成elf文件(可执行文件),再经过反汇编,得到汇编文件。

我们想深入理解ARM架构,深入理解汇编与C,想深入理解栈的作用,想深入理解C语言的实质,就必须把最终的可执行程序,反汇编后,得到汇编代码。

汇编:将汇编文件(是汇编码)转换成目标文件(里面是机器码)。

反汇编:将可执行文件(目标文件,里面是机器码),转换成汇编文件。

 

 

 反汇编文件详解

第一列是指令的地址,第二列是机器码,第三列是汇编指令

 

第一条指令,伪指令将这个数据加载到sp寄存器中,在反汇编文件中,使用到了pc,实际上,是keil在链接程序时,在pc+4这个位置保存了这个值,读到该指令时,会把这个数值加载到sp寄存器中,前面是对应这条指令的机器码 f8dfd004

下面这个指令是在A系列上的机器码,可以看到,相似的指令对应的机器码相差很多,这是因为不同系列平台上使用指令集对应的机器码不同,也就是不同架构使用的指令集的机器码可能会不同,同样,查看使用什么样的指令集就可以知道使用什么样的架构

下面是LDR指令对应的机器码 

 

该机器码的二进制机器码 可以看到bit15-bit12对应的是寄存器,经查看对应的是R13,也就是SP寄存器,后面的就是12位立即数  通过机器码看就是4,至于PC,它内部已经设计好不用我们自己设定了

  

那么还有一个问题 可以看到,当前指令的地址是0X08000088,而PC+4对应是0x8000090

ARM的A系列  PC=当前地址+8

 

ARM的M系列 PC=当前地址+4

 

 这里官方给出了解释

CORTEX M3/M4:使用Thumb2指令集,一条指令是16位或32位
CORTEX A7:默认使用ARM指令集,一条指令是32位的。
ARM指令采用流水线机制:当前执行地址A的指令,同时已经对下一条指令进行译码,同时已经在读取下下条指令:PC=A+4(Thumb/Thumb2),PC=A+8(ARM指令集)

图解|30张图,带你深入理解CPU流水线和分支预测的那些事儿 - 知乎

PC=当前地址+8,使用了ARM指令集,一条指令是32位,对应的是4,也就是在执行当前指令时,同时在对下一条指令进行译码,同时又在读取下下条的指令, 三级流水线

 


http://www.mrgr.cn/news/61963.html

相关文章:

  • .NET Core WebApi第4讲:控制器、路由
  • linux之awk
  • 微服务之网关、网关路由、网关登录校验
  • Chrome谷歌浏览器加载ActiveX控件之allWebDesktop控件介绍
  • modelsim命令:abort
  • WordPress中最值得推荐的AI插件:专家级指南
  • 利士策分享,赚大钱与赚小钱的哲学,选大还是小?
  • Unity可视化Shader工具ASE介绍——自定义函数
  • PyQt入门指南三十五 QAction动作组件
  • OpenCV基本操作(python开发)——(7)实现图像校正
  • 【网络】1.UDP通信
  • 空气断路器和真空断路器介绍
  • 端到端拥塞控制的公平性和稳定性
  • 一个方法助你快速取消Word文档只读模式
  • HTTP的初步了解
  • golang gin ShouldBind的介绍和使用
  • LivePortrait——生成可拼接和重定向控制的高效肖像动画翻译
  • 【约束优化】一次搞定拉格朗日,对偶问题,弱对偶定理,Slater条件和KKT条件
  • asp.net webapi实现FileStreamResult
  • Maven下载安装配置(环境、本地仓库、阿里云、jdk、idea)(Win11)
  • 论分布式存储系统架构设计
  • 为什么资产管理中会用到RFID系统
  • NavVis LX系列产品典型应用—现有住宅装修改造-沪敖3D
  • 使用SPM为ios项目添加lookin所遇问题总结
  • 记MySQL下一次DEPENDENT SUBQUERY的优化
  • 从0学习React(10)