お世話になっています。hamayan です。 手持ちのH8/3069Fに転送して、逆アセンブル結果を出力しました。 HTERMの逆アセンブルウインドウは、画面の内容がクリップボードに コピーできなかったので、手打ちでコードを書いています。もしかし たらタイプミスが有るかも知れません。 コメントは、私が付けた物です。 元のCソース /*************************************************************************/ /* アセンブルコードにどう展開されるかの試験 */ /*************************************************************************/ #include <h83069f.h> int *adrR = ((int *)0x1234); int *adrL = ((int *)0x5678); volatile unsigned int DA0; volatile unsigned int DA1; int count,foreleg,hindleg,b; void Test( void ) { register unsigned a = (count & (64 - 1)); DA0 = *(adrR + a); DA1 = *(adrL + a); count++; P1DR.BIT.B0 = ( foreleg >> b ); P1DR.BIT.B1 = ( hindleg >> b ); } 逆アセンブル出力 JSR @H'40545C:24 ;スタックチェック? MOV.L #H'004140CE:32,ER1 ;変数count MOV.W @ER1,R5 ; AND.W #H'003F:16,R5 ;丸め EXTU.L ER5 ;符号拡張 SHLL.L ER5 ;int型のインデックスに変換 MOV.L ER5,ER4 ; MOV.L @H'4100A0:24,ER0 ;adrR ADD.L ER5,ER0 ;アドレス計算 MOV.W @ER0,R0 ;データ取得 MOV.W R0,@H'4140CA:24 ;DA0に代入 MOV.L @H'4100A4:24,ER0 ;adrL ADD.L ER4,ER0 ;アドレス計算 MOV.W @ER0,R0 ;データ取り出し MOV.W R0,@H'4140CC:24 ;DA1に代入 MOV.W @ER1,R0 ;変数countを再度取り出し INC.W #1,R0 ;count++ MOV.W R0,@ER1 ;ここから下は、ビット操作。 MOV.W @H'4140D0:24,R0 ;変数foreleg MOV.W @H'4140D5:24,R1L ;変数b DEC.B R1L ; BMI 400494:8 ;マイナスなら、下のBLD何とかにジャンプ SHAR.W R0 ;右シフト BRA 40048C:8 ;上のDEC.Bにジャンプ BLD #0:3,R0L ;bit0をキャリーに転送 BST #0:3,@H'FFFFD0:8 ;P1DRのBIT0にキャリーを転送 MOV.W @H'4140D2:24,R0 ;変数hindleg MOV.B @H'4140D5:24,R1L ;以下、同様 DEC.B R1L BMI 4004AE:8 SHAR.W R0 BRA 4004A6:8 BLD #0:3,R0L JSR @H'40543A:24 RTS 上半分と、下半分の処理のコード量は、同じ位に見えますが、 ビット操作では、ループ処理に展開されているので、遥かに 時間が掛かる筈です。 面白いのは、変数bはint型なのに、アセンブルでは8bit で扱われています。シフト命令の最大値は255と言う事か。 register unsigned a = (count++ & (64 - 1)); にすると、二回もメモリから取り出したり、しまったりが無いから その分、ちょっと高速化したのでしょう。 意外と2000円のコンパイラとは言え、コードの変換効率が高 いのが判るでしょう。成るべくレジスタを使いまわして。 これの、総ステート数を計算すれば、実行可能か、どうか判断でき るのでは。 うーん、次からは折角日立が無料でデバックモニターを配っている ので、是非利用して、解析に役立てて下さい。 ------------------------------------------------------------ )^o^()^o^()^o^()^o^()^o^()^o^()^o^()^o^()^o^()^o^()^o^()^o^( ☆☆☆☆☆☆☆☆☆☆☆☆designed by hamayan☆☆☆☆☆☆☆☆☆ from はまやん アドレスは hamayan@xxxxxxxxxxxxxxxx ★★★★★★★★★end of message and thank you★★★★★★★