【发布时间】:2017-02-08 12:23:31
【问题描述】:
互联网上没有足够的关于 svc 的信息。我了解了 SVC 处理程序是如何工作的,但问题是我不明白为什么它将寄存器 R0、R1、R2、R3 和 R12 堆叠到堆栈上。除非它有一个目的,否则它不会存储这些寄存器中存在的对处理器很重要的信息是什么。
有没有人建议如何学习 ARM Cortex M3? 如何开始学习,以免对上述基本内容产生任何混淆。 提前谢谢你
【问题讨论】:
标签: arm
互联网上没有足够的关于 svc 的信息。我了解了 SVC 处理程序是如何工作的,但问题是我不明白为什么它将寄存器 R0、R1、R2、R3 和 R12 堆叠到堆栈上。除非它有一个目的,否则它不会存储这些寄存器中存在的对处理器很重要的信息是什么。
有没有人建议如何学习 ARM Cortex M3? 如何开始学习,以免对上述基本内容产生任何混淆。 提前谢谢你
【问题讨论】:
标签: arm
这是因为每次调用函数时,ABI 都会描述:
r0-r3可以包含参数,可以用作暂存寄存器。这意味着函数不需要保存它们(它们将被修改)r12 与此类似。
因此,如果SVC 调用 C 函数处理程序,则寄存器 r0-r3 将被 C 函数破坏,而其他寄存器将被保留。在这种情况下,硬件会自动进行堆栈,因此我们可以保证(如果 C 函数正确)所有寄存器的值都与调用 SVC 之前相同。
请注意,对于 SVC,知道这些寄存器已损坏是可以接受的(因为我们知道何时调用 SVC 指令)。但其他异常(如中断)具有相同的行为,对于这些异常,这是必不可少的,因为我们不知道它们何时发生。
关于一本书,我知道这本书,所以我可以建议它:
ARM Cortex-M3 权威指南,第二版,第二版 约瑟夫·姚
【讨论】: