assembly 为什么状态寄存器(CPSR)没有压入ARM的堆栈?

p1tboqfb  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(152)

在研究ARM Thumb指令集时,我注意到通用寄存器和链接寄存器(Link Register)(大多数情况下)被压入堆栈,而状态寄存器(CPSR)却没有。这让我很惊讶,因为状态寄存器是程序状态的一部分,在子例程结束后需要恢复。状态寄存器没有保存是有原因的吗?

pvabu6sv

pvabu6sv1#

我在大学里用thumb 2编写了一个操作系统的一部分。当你从处理程序模式切换到非特权线程模式时,你会看到CSPR被推到堆栈上,反之亦然。在切换模式时,几乎所有的寄存器都被弹出/推到堆栈上。
从相同模式的子程序返回时,ARM惯例不维护该标志,但可手动保存和引用最后一个事务的标志。

相关问题