打印
[STM32]

中断向量表处存放的是跳转指令还是地址

[复制链接]
1308|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
landheart|  楼主 | 2021-4-10 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
中断向量表处的跳转处理归纳已知有下面几种:
(1)、DCD rst_proc,然后执行时候就是PC=rst_proc  ,st的.s文件提供的方式。
(2)、B   rst_proc,  arm会对这个指令译码,然后执行。 应该不是像上面那样 把B lable 的机器码赋值给PC吧
(3)、
LDR   PC,lable
lable  DCD  rst_proc
LDR指令把lable所在地址的内容赋值给PC,而lable的内容正是中断处理函数的起始地址。
(4)、
LDR PC,=rst_proc, 这使用的类似与MOV的操作,伪指令实现。实际的汇编后代码应该是上面第三种。

问题是,(2),(3),(4)都好理解,和用户程序一样译码执行就可以了。第一种写法理解不了,PC跳转到那里,译码一个地址的时候,为什么不是返回一个未定义错误,而是把这个值直接赋值给PC了呢。 小弟初学ARM汇编不太懂,希望大佬能帮忙解答下,谢谢。

使用特权

评论回复

相关帖子

沙发
aozima| | 2021-4-10 15:48 | 只看该作者
目前只有arm的M系列是第1种,是地址。

其它的基本都后面几种。后面几种可以归为1类,就是指令。
之所以写法不同,是因为单条指令跳转范围有限,间接跳转可以跳到任意地址。

至于为什么? 因为硬件是这么设计的,所以不会有你担忧的问题。

使用特权

评论回复
板凳
landheart|  楼主 | 2021-4-10 16:36 | 只看该作者
aozima 发表于 2021-4-10 15:48
目前只有arm的M系列是第1种,是地址。

其它的基本都后面几种。后面几种可以归为1类,就是指令。

懂了,处理器机制不太一样。多谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

0

粉丝