互联网上没有足够的关于svc的信息。我了解了SVC处理程序是如何工作的,但问题是我不明白为什么它要将寄存器R0、R1、R2、R3和R12堆到堆栈中。除非它有目的,否则它不会存储在这些寄存器中的信息,这对处理器来说是非常重要的。
有谁建议如何学习手臂皮质M3?如何开始学习,这样就不会有像上面这样的基本事物出现任何混乱。先谢谢你
发布于 2016-09-30 05:56:45
这是因为每次调用一个函数时,ABI都会描述:
r0-r3可以包含参数,并可用作划痕寄存器.这意味着不需要函数来保存它们(它们将被修改)这对于r12也是一样的。
因此,如果SVC调用C函数处理程序,则寄存器r0-r3将被C函数破坏,而其他寄存器将被维护。在这种情况下,硬件会自动进行堆叠,这样我们就有保证(如果C函数是正确的),所有寄存器的值都与调用SVC之前相同。
注意,对于SVC,知道这些寄存器已损坏是可以接受的(因为我们知道何时调用SVC指令)。但其他的例外(如中断)也有相同的行为,对于这些例外,这是至关重要的,因为我们不知道它们何时发生。
关于一本书,我知道这本书,所以我可以建议它:
臂皮质的最终指南-M3,第二版第二版
https://stackoverflow.com/questions/39782785
复制相似问题