将cmp结果存储在arm中的哪个寄存器?

问题描述

我需要编写一个函数,在工作之后将除r0-r3以外的所有寄存器都设置为其初始值。我使用推入和弹出,但是找不到哪个寄存器存储CMP的值。

UPD 。谢谢。看来我错了。我的作业有一个提示:“不要忘记保存被调用者的寄存器”,因此它并不建议将标志视为已保存被调用者)

解决方法

cmp,就像所有带有s后缀的subs的ARM指令一样, s et标志/条件代码。这些条件代码存在于称为CPSR的寄存器Current Program Status Register中。也是https://en.wikipedia.org/wiki/ARM_architecture#Registers

在所有标准函数调用约定中,标志/条件代码都被调用。 您不需要保存/恢复呼叫者的CPSR。只需将其与r0..3。一起进行呼叫处理即可。

但是,如果您这样做了,请参见https://heyrick.eu/armwiki/The_Status_register以获得诸如

    MRS     R0,CPSR                ; Copy CPSR into R0

    ...
    MSR     CPSR,R0                ; Copy R0 into CPSR

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...