2

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

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

• 可写,使处理器状态能够被恢复。为了保持与未来 ARM 处理器的兼容性,并且作为一种良好做法,强烈建议您在更改 CPSR 时使用 read-modify-write 策略

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

4

1 回答 1

5

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

同样,他们似乎保留在未来更改 RAZ 位的权利,因此它们可能并不总是为零,或者向它们写入 1 可能会导致状态发生一些变化,即使重新读取该位仍然读取为零。

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

于 2013-04-16T22:23:27.683 回答