arm中存放cmp结果的寄存器是哪个?
Which register does store cmp result in arm?
我需要编写一个函数,在工作结束后将除 r0-r3 之外的所有寄存器设置为它们的初始值。我用的是push和pop,但是找不到哪个寄存器存放了CMP的值
UPD。谢谢你。看来我错了。我有一个有提示的作业:“不要忘记被调用者保存寄存器”,所以它并不建议将标志视为被调用者保存)
cmp
,就像所有带有 s
后缀的 ARM 指令一样,如 subs
、s 等标志/条件代码。这些条件代码存在于一个名为 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
我需要编写一个函数,在工作结束后将除 r0-r3 之外的所有寄存器设置为它们的初始值。我用的是push和pop,但是找不到哪个寄存器存放了CMP的值
UPD。谢谢你。看来我错了。我有一个有提示的作业:“不要忘记被调用者保存寄存器”,所以它并不建议将标志视为被调用者保存)
cmp
,就像所有带有 s
后缀的 ARM 指令一样,如 subs
、s 等标志/条件代码。这些条件代码存在于一个名为 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