ARM当前程序状态寄存器(SPSR)读 - 修改 - 写策略实践

时间:2013-04-16 21:48:36

标签: assembly coding-style arm cpu-registers

  

图2-10中的位标识为“不修改”(DNM),“读取为”   零(RAZ),不得由软件修改。这些位是:

     

•可读,以便保持处理器状态,例如,   在进程上下文切换期间

     

•可写,以启用处理器   国家要恢复。保持与未来ARM的兼容性   处理器和作为良好实践,强烈建议您使用   更改CPSR时的读 - 修改 - 写策略

但是通过按位运算,您可以清楚地定义要更改的位,而无需修改任何意外值,并且可以避免浪费额外的周期。这个建议的原因是什么?

1 个答案:

答案 0 :(得分:5)

手册警告你的是不要在DNM位写入零(或其他),假设它们不会被修改 - 这可能是当前处理器实现的情况,但即使今天是这种情况可能不会在将来的实施中。

同样,它们似乎保留了将来更改RAZ位的权利,以便它们可能不会总是为零或者可能会向它们写入一个可能会导致状态发生一些变化,即使重新读取该位也是如此仍然读为零。

另外,请记住,“明确定义要更改的位”的大多数按位操作通常会导致读/写/修改序列。例如,val |= 0x08;执行读取/修改/写入。