中断向量表处存放的是跳转指令还是地址
中断向量表处的跳转处理归纳已知有下面几种:(1)、DCD rst_proc,然后执行时候就是PC=rst_proc,st的.s文件提供的方式。
(2)、B rst_proc,arm会对这个指令译码,然后执行。 应该不是像上面那样 把B lable 的机器码赋值给PC吧
(3)、
LDR PC,lable
lableDCDrst_proc
LDR指令把lable所在地址的内容赋值给PC,而lable的内容正是中断处理函数的起始地址。
(4)、
LDR PC,=rst_proc, 这使用的类似与MOV的操作,伪指令实现。实际的汇编后代码应该是上面第三种。
问题是,(2),(3),(4)都好理解,和用户程序一样译码执行就可以了。第一种写法理解不了,PC跳转到那里,译码一个地址的时候,为什么不是返回一个未定义错误,而是把这个值直接赋值给PC了呢。 小弟初学ARM汇编不太懂,希望大佬能帮忙解答下,谢谢。
目前只有arm的M系列是第1种,是地址。
其它的基本都后面几种。后面几种可以归为1类,就是指令。
之所以写法不同,是因为单条指令跳转范围有限,间接跳转可以跳到任意地址。
至于为什么? 因为硬件是这么设计的,所以不会有你担忧的问题。 aozima 发表于 2021-4-10 15:48
目前只有arm的M系列是第1种,是地址。
其它的基本都后面几种。后面几种可以归为1类,就是指令。
懂了,处理器机制不太一样。多谢
页:
[1]