2013-04-16 1 views
2

Биты, которые на рисунке 2-10 идентифицируются как «Не изменять» (DNM), читать как Zero (RAZ), не должны быть изменены программным обеспечением , Эти биты являются:ARM Текущий статус регистрации программы (SPSR) стратегия чтения-изменения-записи

• Читаемым, для того, чтобы состояние процессора должны быть сохранены, например, во время контекста процесса переключателей

• Writable, для того, чтобы состояние процессора должны быть восстановлены. Для обеспечения совместимости с будущими процессорами ARM и рекомендуется использовать стратегию чтения-изменения-записи при изменении CPSR.

Но с побитовыми операциями вы уже можете четко определить, какие биты вы хотите изменить, не изменяя никаких неожиданных значений, и это позволяет избежать лишних циклов. В чем причина этой рекомендации?

+0

Существуют специальные инструкции по предотвращению и уменьшению маскировки. Например, 'msr cpsr_c, r2'. См. Также: [Режимы исключения CPSR] (http://stackoverflow.com/questions/15641149/current-program-status-register-exception-modes) –

+0

В вашем названии вы написали SPSR (сохраненный регистр статуса программы), но я думаю вы имели в виду CPSR. –

+0

@ Étienne Это настоящая CPSR против SPSR; они разные. Но базовая концепция одинаково применима к обоим. –

ответ

5

В руководстве, о котором вы предупреждаете, не записываются нули (или что-то еще) в биты DNM, предполагая, что они не будут изменены - это может иметь место в текущих реализациях процессора, но даже если это так это может быть не в будущих реализациях.

Аналогичным образом, похоже, что они оставляют за собой право изменить бит RAZ в будущем, чтобы они не всегда были равны нулю или, возможно, что запись одного из них может привести к некоторому изменению состояния, даже если перечитать бит по-прежнему считается нулевым.

Также имейте в виду, что большинство побитовых операций, которые «четко определяют, какие биты вы хотите изменить», обычно приводят к последовательности чтения/записи/изменения. Например, val |= 0x08; выполняет чтение/изменение/запись.

+0

Я так и не подумал об этом. Спасибо за четкое объяснение! –