08/02/27 11:24:40
> 組み込み用のコンパイラは、基本的にビット操作を見つけたら
> BSET/BCLR 系のビットON/OFF命令にしてくれるもの。
BSET/BCLR系のビットON/OFF命令って、オペランドで操作するビット位置
を指定するので、ほとんどのCPUアーキテクチャ(Z80,H8等)で複数ビットの
同時操作はできないんですが?
つまり、
#define STROBE 0x80
#define DEV_READ 0x40
PIO_A.OUTREG|=(STROBE|DEV_READ);
を論理演算命令ではなく、無理やりビット操作命令で展開すれば、
BSET #7,PIO_A.OUTREG
BSET #6,PIO_A.OUTREG となる。
それどころか、BSET/BCLR系のビットON/OFF命令自体を持っていない
アーキテクチャも多数あるし、配列要素に対するビット演算では、
対応するアドレッシングモードがなく、一旦汎用レジスタ経由で
ビット演算した後、書き戻すような複数ステップのコードしか生成
できない場合もある。
MOV A,[X]
OR A,#$C0
MOV [X],A