2013-10-24 4 views
1

Я хочу понять важность флага Q в ARM-процессоре. Я знаю, что есть определенные инструкции, такие как QADD, QSUB и т. Д.Важность Q (флаг насыщения) в ARM

Но мне нужно понять это с некоторыми примерами, которые прояснят концепцию.

Пожалуйста, объясните меня.

Спасибо

ответ

6

Это объясняется в "ARM Architecture Reference Manual" (ARM DDI 0100E):

Бит [27] из CPSR является липкий переполнения флаг, также известный как Q. Этот флаг установлен в 1, если любой из следующих ситуаций:

  • Насыщенность результата сложения в QADD или QDADD инструкции
  • насыщение результата вычитания в QSUB или QDSUB инструкции
  • насыщение удвоение промежуточного результата в QDADD или QDSUB инструкции
  • Подпись перелива во время SMLA<x><y> или SMLAW<y> инструкции

Флаг Q равен липким тем, что после того, как он был установлен в 1, на него не влияют, будут ли последующие вычисления насыщены и/или переполнены. Предполагаемое использование:

  1. Используйте команду MSR CPSR_f,#0, чтобы очистить флаг Q (это также очищает флаги кода условий).
  2. Формирование последовательности расчетов.
  3. Используйте инструкцию MRS Rn,CPSR для чтения CPSR, затем проверьте значение флага Q. Если он все еще равен 0, ни один из вышеперечисленных типов насыщения или переполнения не произошел во время шага 2. В противном случае, по крайней мере, один экземпляр stauration или overflow произошел.

Пример:

mov  r2,#0x70000000 
qadd r3,r2,r2 

0x70000000 + 0x70000000 стал бы 0xE0000000, но так как qadd насыщается, результат насыщается до 0x7FFFFFFF (наибольшее положительное 32-разрядное целое число) и флаг Q является задавать.

+0

Спасибо, Майкл. Пример - то, что я искал .. :) – vkulkarni