SVC HANDLER:ARM皮质m处理器

时间:2016-09-30 02:34:11

标签: arm

关于互联网上的svc没有足够的信息。我学会了SVC处理程序是如何工作的但事情是我无法理解为什么它将寄存器R0,R1,R2,R3和R12堆叠到堆栈上。除非它有一个不会存储的目的,所以这些寄存器中存在的对处理器很重要的信息是什么。

并且任何一位建议如何学习ARM Cortex M3? 如何开始学习,以便在上面的基本内容中不会有任何混淆。 提前谢谢你

1 个答案:

答案 0 :(得分:0)

这是因为每次调用函数时,ABI都会描述:

  • 寄存器r0 - r3可以包含参数,可以用作临时寄存器。这意味着不需要保存它们的功能(它们将被修改)
  • 函数需要保存其他寄存器,即函数返回时需要恢复到之前的值。

这与r12类似。

因此,如果SVC调用C函数处理程序,则寄存器r0 - r3将被C函数破坏,同时维护其他寄存器。在这种情况下,硬件会自动进行堆叠,这样我们就可以保证所有寄存器的值都与调用SVC之前的值相同。

请注意,对于SVC,知道这些寄存器已损坏是可以接受的(因为我们知道何时调用SVC指令)。但是其他异常(如中断)具有相同的行为,对于这些异常,这是至关重要的,因为我们不知道它们何时发生。

关于一本书,我知道这本书,所以我可以建议:

ARM Cortex-M3权威指南,第二版第2版 作者:Joseph Yiu