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:带链接的跳转

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 付钱给微商没有保障怎么办 电镀锌钢带生锈怎么办 电机机油从空气滤芯里流出怎么办 把塑料皮套吃了怎么办 塑料框眼镜有点小了怎么办 出口纸箱打了钉怎么办 买房子交款单据丢了怎么办 买房子所有单据丢失怎么办 车险单据都丢了怎么办 真空包装的东西里面有空气怎么办 发货物忘记写唛头了怎么办 Word文档撤销按钮删除了怎么办 ai保存时未响应怎么办 ai还没保存卡了怎么办 ai卡住了没保存怎么办 屁股沟有硬块红肿怎么办 卧室床选太大了怎么办 画板的笔尖掉了怎么办 宜家水壶盖子有水怎么办 背滤鱼缸除油膜怎么办 书多了没地方放怎么办 学生在教室内丢手机怎么办 新车尾箱坏了怎么办 放书的箱子烂了怎么办 车钥匙锁后备箱里怎么办 布的收纳箱有味怎么办 车漆清漆层掉了怎么办 副驾驶储物箱卡子断了怎么办 玛莎拉蒂车门打不开怎么办 新买的水杯漏水怎么办 泰迪小狗掉毛怎么办 手机jlc调用接口状态异常怎么办 进门和厕所对着怎么办 p过的照片有竖条怎么办 当照片p出竖条纹怎么办 月子里落下脚心怕风怕凉怎么办 鞋胶把手粘住了怎么办 凉鞋魔术贴长了怎么办 新买的狗一直叫怎么办 刚买的幼犬老叫怎么办 狗狗什么都不吃怎么办