ECOはエセコンパイラ。
コンパイラ軽~く作れるならそれでもいいけど、それはちょっと難しい。
それに似たことをテイよくやる。
例えばこんな話。
処理内容が
※Cソース
(それ以前にaやbには値が入っている)
 a += b   // aにbを足しこむ
 if(a>=256){  // aの範囲は0~255なのでクリッピング
  a=255;
 }
 if(a<0){
      a=0;
  }      
そのCPUには足した後256以上だったら255にしてくれる命令adds がある。飽和演算とよばれているやつ。
それをつかえば※の処理は1行で書けるのだ。
adds  areg  breg
が、ただ※のCソースを普通にコンパイルしたのでは
adds areg breg のコードは吐いてくれない。
//////////////////
さて、どうしようか?
ECOでの対処法の典型例を書く。
//////////////////
大筋
1.一旦シミュレータを作る
2.そのソースがそのまま使えるソースジェネレータを書く
//////////////////
1.一旦シミュレータを作る。
0~255の値をとる変数クラスを作り
関数 += を実装する。
class Reg8
{
    const  char *m_name;
     int m_value;
  Reg8(const char *name)
 {
    m_name=name; 
 }
  operator += (Reg8 b)
 {
     m_value+=b.m_va
   if(m_value>=256)
   m_value=255;
   }
  if(m_value<0){
      m_value=0;
   }
  }      
};
///
すると※の処理はC++のソースで
Reg8 areg("areg");
Reg8 breg("breg");
(ここになんらかのareg,bregを設定する処理)
areg+=breg;
と書ける。
実際にとして動かしてみれば、
void main()
{
    Reg8 areg("areg");
    Reg8 breg("breg");
 
   areg.m_value=20
   breg.m_value=70
   areg+=breg;
}
レジスタの動きがシミュレートできて。
計算が終わるとareg.m_valueに255が入ることが確かめられる。
つづく