arm中存放cmp结果的寄存器是哪个?

Which register does store cmp result in arm?

我需要编写一个函数,在工作结束后将除 r0-r3 之外的所有寄存器设置为它们的初始值。我用的是push和pop,但是找不到哪个寄存器存放了CMP的值

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

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

在所有标准 function-calling 约定中,标志/条件代码为 call-clobbered。 您不需要 save/restore 调用者的 CPSR。 只需 call-clobbered,连同 r0..3.

但如果你这样做了,请参阅 https://heyrick.eu/armwiki/The_Status_register 中的示例,例如

    MRS     R0, CPSR                ; Copy CPSR into R0

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