寺脇です。 16bit サイズのビットフィールドを使うと、アドレス計算が おかしくなるようです。 gcc のバージョンは、 gcc version 2.95.3 20010315 (release) で、以下の3種類のオプションで同じような出力がでました。 h8300-hms-gcc -fomit-frame-pointer -c -O2 -mh -Wall -S initperi.c h8300-hms-gcc -fomit-frame-pointer -c -O -mh -Wall -S initperi.c h8300-hms-gcc -fomit-frame-pointer -c -mh -Wall -S initperi.c あまり、凝った定義はしないほうがいいかもしれません。 ------ この不具合がでるソースファイル initperi.c ------------ union un_mstpcr { /* union MSTPCR */ unsigned int WORD; /* Word Access */ struct { /* Byte Access */ unsigned char H; /* MSTPCRH */ unsigned char L; /* MSTPCRL */ } BYTE; /* */ struct { /* Bit Access */ unsigned char B15:1; /* DMAC */ unsigned char B14:1; /* DTC */ unsigned char B13:1; /* TPU */ unsigned char B12:1; /* TMR */ unsigned char B11:1; /* PPG */ unsigned char B10:1; /* D/A */ unsigned char B9 :1; /* A/D */ unsigned char :0; /* */ unsigned char B7 :1; /* SCI2 */ unsigned char B6 :1; /* SCI1 */ unsigned char B5 :1; /* SCI0 */ } BIT; /* */ }; /* */ #define MSTPCR (*(volatile union un_mstpcr*)0xFFFF3C)/*MSTPCRAddress*/ ttest() { MSTPCR.BIT.B15 = 1 ; MSTPCR.BIT.B5 = 0 ; } ----- 展開されるコード ---------------------------------------- _ttest: mov.l #16777020,er2 mov.b @er2,r3l or #128,r3l mov.b r3l,@er2 mov.b @16777022,r2l <------ここがおかしい and #-33,r2l mov.b r2l,@16777022 rts PS 今日は、これで半日つぶしました(^^;) -- --------- Computer Artisan --------------------------- シーエー 寺脇 勝彦 E-mail wakky@xxxxxxxxxxxxxxxxxxx URL http://www.computerartisan.com/