帮忙看看这段汇编代码意思

1 STMFD SP! , {R0-R3,R12,LR} //这里进行了现场保护那么还有必要在第三句保存SPSR吗?为什么2 MRS R0 ,SPSR3 STMFD SP! ,{R0}//这对花括号是什么意思,第二句读取了SPSR到R0,现在又把SPSR保存到R0,那么不是覆盖了先前的R0?那么如果是覆盖了的话还有必要写第二句吗?4 TST R0 ,#0X205 LDRNEH R0, [LR,#-2]//这句话是什么意思?6 BICNE R0 , R0, #0XFF007 LDREQ R0 , [LR ,#-4]8 BICEQ R0 ,R0 , #0XFF000000//这句话我一点也看不懂
2026年09月25日 09:47
有1个网友回答
网友(1):

1:这里进行了现场保护,可是并没有保护SPSR中的内容,所以还是要把SPSR保存下来,等子程序返回时再把R0-R3,R12,LR、SPSR恢复。
3:STMFD是批处理指令,要求必须带上花括号,就算你处理的只是一个寄存器,也要带上花括号,这是格式要求。前一句已经把SPSR读到R0中去了,这句话的意思是把R0中的内容压栈,SP带个叹号,说明是回写指令。由于SPSR中的内容智能用MRS和MSR指令进行读写,所以要先用MRS读出来才能将其保存。第一句R0已经保存了,这里就不算是覆盖了,因为后面R0可以恢复的
5:这句指令时先变址不回写指令,意思是,如果R0中的内容不等于0x20,则将LR减2后的所对应的内存中的内容以无符号半字形式加载到R0,也就是低16位
8:由于5、6、7指令没有影响标志位,所以SPSR中的内容还是第4句判断后的结果,所以这句指令的意思是如果R0中的内容等于0x20,则将R0的高8位清零。
若有不对的地方,敬请指正……希望对你有帮助