STM32启动文件_0
来源:互联网 发布:淘宝投诉失败怎么办 编辑:程序博客网 时间:2024/05/21 19:41
1.STM32程序开始阶段:
; Reset handlerReset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP
第一行: LDR R0, =SystemInit
这是一条伪代码,转化为汇编代码后的结果如下:
LDR的作用为将指定位置的数据读取至指定的寄存器。 [pc,#36]
就是将pc(程序计数器)的地址+36(十六进制下的24)+4(因为CM3内部使用了指令流水线,所以读pc后返回的数据都自动加4)地址上的字数据copy到指定寄存器上,这里就是R0寄存器上。
计算:0x08000268(PC)+24(36的十六进制)+4=0x08000290
然后查看存储器地址0x08000290上的数据为
取一个字的长度(32bit),既为41 1A 00 08。按照地址从高到低排列,既为0x08001A41。单步调试的结果:
果然也没有让我们失望。(系统RST后的R0的值为0x00000000)
第二行:
BLX R0
BLX指带链接跳转并切换指令集。说人话的话就是,将程序指针指向SystemInit(),并开始执行这个函数。
第三行 LDR R0, =__main
这条带吗如上,将[pc的地址+24+4]地址处的数据copy到R0处。
第四行: BX R0
BX:跳转并转换指令集。那么他和BLX的不同之处又在哪里呢?
BLX必定会转换指令集
BL:需要检查BL之后寄存器的值。如果最低位为0,则会转化为ARM指令集;如果最低位为1,则会转化为Thumb-2指令集。
ASM总结
B:跳转
B Label:表示立即跳转到Label指定的地址执行
BL:带链接的跳转
阅读全文
0 0
- STM32启动文件_0
- STM32 启动文件选择
- STM32 启动文件选择
- STM32 启动文件选择
- STM32 启动文件解析
- STM32启动文件选择
- STM32 启动文件选择
- stm32的启动文件
- STM32启动文件选择
- STM32 启动文件分析
- STM32启动文件详解
- STM32 启动文件选择
- STM32 启动文件
- STM32启动文件分析
- STM32启动文件分析
- stm32启动文件详解
- STM32启动文件详解
- stm32启动文件
- 浏览器加载和渲染html的顺序
- 7.18
- Parentheses Balance
- 嵌入式学习日记(十二)
- linux常用的命令7.20
- STM32启动文件_0
- abstract 抽象
- 编程学习应用 Growth 发布 3.0,在碎片时间里练习
- Recyclerview数据显示错乱完全解析
- C++向上造型
- notepad++ pythonScript插件之列转SQL查询条件
- 常用Linux指令之chacl指令
- ES6---箭头函数与function定义函数有什么区别?在箭头函数中,this指向,构造函数,变量提升是如何表现的?
- 一个简单的服务器和客户机程序