>>555 >ただpをvolatile int *p;と定義すればたぶん・・・
それでダメだったので553の表現に至ったのです。チビ助チップのクロスコンパイラはそんなもん

>do〜while()では駄目なのだろうか
do whileで書くと「書いたメモリ比較して違ったら」のif文を全部 if( *p++ != xx )の表現で書く
ことになるでしょ。それが翻訳されると CMP Ri,@(Rj+) BEQ 次の実行文 BRA whileの外 という
機械語が出て、BNEwhileの外 という機械語が出なかったのですよ。 それでわざわざ反対に
書いて if( *p++ == xx )で書いてるのです。そうすればコンペアの後BNE whileの外 が出るから。
そのかわりwhileの条件が反対になるから、あ〜いうループ構造になったわけです。
あの書き方が「機械語が最も少ない」出方をするのは「百万回の試行錯誤」で確認済みなのです