У Вас StatusPrer объявлен и в приведённом фрагменте меняется только в одном месте.
Объявите его для начала как volatile чтобы компилятор не оптимизировал доступ к нему.
Если по умолчанию значение StatusPrer = 0, и в Вашем фрагменте ему присваивается 0 то компилятор решил что его значение константное и всегда равно 0.
Поэтому и выкинул ненужный кусок кода. Ещё i=StatusPer может быть оптимизирована из-за того что прочитав его значение в i Вы пытаетесь исп. его для условия if. Компилятор волне мог считать значение в регистр и не использовать переменную i которая могла-бы быть расположенной в стеке. Объявите i volatile если хотите чтобы обмен шёл именно через i.
пока писал ответ sergeeff уже дал ответ
Сообщение отредактировал mempfis_ - Aug 10 2011, 17:40