关于互联网上的svc没有足够的信息。我学会了SVC处理程序是如何工作的但事情是我无法理解为什么它将寄存器R0,R1,R2,R3和R12堆叠到堆栈上。除非它有一个不会存储的目的,所以这些寄存器中存在的对处理器很重要的信息是什么。
并且任何一位建议如何学习ARM Cortex M3? 如何开始学习,以便在上面的基本内容中不会有任何混淆。 提前谢谢你
答案 0 :(得分:0)
这是因为每次调用函数时,ABI都会描述:
r0
- r3
可以包含参数,可以用作临时寄存器。这意味着不需要保存它们的功能(它们将被修改)这与r12
类似。
因此,如果SVC
调用C函数处理程序,则寄存器r0
- r3
将被C函数破坏,同时维护其他寄存器。在这种情况下,硬件会自动进行堆叠,这样我们就可以保证所有寄存器的值都与调用SVC之前的值相同。
请注意,对于SVC,知道这些寄存器已损坏是可以接受的(因为我们知道何时调用SVC指令)。但是其他异常(如中断)具有相同的行为,对于这些异常,这是至关重要的,因为我们不知道它们何时发生。
关于一本书,我知道这本书,所以我可以建议:
ARM Cortex-M3权威指南,第二版第2版 作者:Joseph Yiu