在研究ARM Thumb指令集时,我注意到通用寄存器和链接寄存器(Link Register)(大多数情况下)被压入堆栈,而状态寄存器(CPSR)却没有。这让我很惊讶,因为状态寄存器是程序状态的一部分,在子例程结束后需要恢复。状态寄存器没有保存是有原因的吗?
pvabu6sv1#
我在大学里用thumb 2编写了一个操作系统的一部分。当你从处理程序模式切换到非特权线程模式时,你会看到CSPR被推到堆栈上,反之亦然。在切换模式时,几乎所有的寄存器都被弹出/推到堆栈上。从相同模式的子程序返回时,ARM惯例不维护该标志,但可手动保存和引用最后一个事务的标志。
1条答案
按热度按时间pvabu6sv1#
我在大学里用thumb 2编写了一个操作系统的一部分。当你从处理程序模式切换到非特权线程模式时,你会看到CSPR被推到堆栈上,反之亦然。在切换模式时,几乎所有的寄存器都被弹出/推到堆栈上。
从相同模式的子程序返回时,ARM惯例不维护该标志,但可手动保存和引用最后一个事务的标志。