STM32学习笔记03-汇编指令1:LDR和ADR指令

发布网友 发布时间:2024-09-27 01:42

我来回答

1个回答

热心网友 时间:9分钟前

书接上回,上篇文章让我们初次接触了汇编编程。本文将验证一些常用的汇编指令,以更好地理解计算机运行原理。

在asm_main.s文件中,我们首先验证了CM3权威指南P页的内容:

验证LDR伪指令

在my_main标号下添加以下内容:

在KEIL仿真中,可以看到R0变成了0x10。

同时,这也证明了这是一条伪指令,在汇编器中会被替换成上图中的形式,立即数会被替换成基于PC指针的偏移量。

在执行LDR R1,=loop这一句前,可以看到loop标号对应的地址为1038h。

执行完后,可以看到R1的值为1039h,它自动把LSB置位1了!但是这里汇编器的注释地址为103Ch,笔者不清楚为什么。

验证ADR指令

在main标号下写入以下代码:

可以看出,ADR指令移动的是一个程序地址,但是并没有让LSB置1。

尝试进入ARM模式抛出错误

众所周知,CortexM3不能进入ARM模式,只能在Thumb模式下运行,否则就会进入fault错误。

如果此时使用BLX指令进入它呢?

各位,请看仿真:

当单步调试时,CM3并不会进入fault,但是一旦让它全速运行,立即跳到HardFault处理函数,并且模式从Thread态跳到Handler态。

如图,进入HardFault处理函数。

-2023.12.28于HNIP9607

By Sightseer.

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com