如何解决将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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。