天天看点

arm编译后指令定位地址分析(编译顺序和运行顺序)

指定了程序编译的起始链接地址0x87800000,那么编译时候就按照顺序编译出机器码。在前面的代码先编译,因此定位地址也靠前。可以看出,Reset_Handler函数在32行开始,因此编译的值就不是0x87800000,而是靠后了87800020。但是Reset_Handler函数运行是最靠前的(上电运行的第一个函数,看我这篇文章arm cortex-A中断基本知识和通用汇编中断服务函数模板(必读!!!)),因此只需要在第一行跳转给它即可。这当然是不能同时在前面啦,前面又要放中断向量表,那就没法放Reset_Handler函数的具体实现的机器码了嘛~

也就是说编译顺序,和运行顺序是不一样的。下面是cortex-a内核处理器过程,一目了然。

arm编译后指令定位地址分析(编译顺序和运行顺序)
arm编译后指令定位地址分析(编译顺序和运行顺序)

继续阅读