搜索

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

[复制链接]
304|2
 楼主 | 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汇编不太懂,希望大佬能帮忙解答下,谢谢。

使用特权

评论回复

相关帖子

| 2021-4-10 15:48 | 显示全部楼层
目前只有arm的M系列是第1种,是地址。

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

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

使用特权

评论回复
 楼主 | 2021-4-10 16:36 | 显示全部楼层
aozima 发表于 2021-4-10 15:48
目前只有arm的M系列是第1种,是地址。

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

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

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表