神野です。 Fri, 22 Aug 2003 15:16:31 +0900 ごろに <200308220616.h7M6GV9O027282@xxxxxxxxxxxxxxxxxxx> の "[H8-ML(3764)] Re: スタートアップルーチンのI/O定義" のメールで Shigeru Makino <mac@xxxxxxxxxxxxxx> さんは書きました。 > 3052マニュアルの「2.3アドレス空間」に記載されているよう、 > 1M mode動作時は、アドレスの上位ビットは無視されますので、 > 動作には支障ありません。 > > ただ、アセンブラーは言いつけ通り16Mのコードを作りますんで、 > サイズが大きくなり、実行速度も低下します。 そこが腑に落ちないんですが… アドレッシングモードには8/16/24bitがありますが、 20/24bitの違いでそんなに差の出るコードを吐くんですか? 20bitのアドレッシングモードは無いので、上位4bitをゼロで (あるいは1で)埋めた24bitのアドレッシングモードが使われるんじゃ ないかと想像するのですが。 ディスプレースメント付きレジスタ間接なら、場合によっては 「24bitだったのが16bitで済む」ことがあるかもしれませんが、 特殊レジスタは上の方にまとまって配置されているので、 そういう状況は考えにくいです。 人間が書くコードなら、 ・アドレス(ポインタ)をたくさん含んだ構造体で、 ・RAM容量が厳しく、少しでもサイズを減らしたい ・20bitのビットフィールドにしてぎちぎちに詰める ようなこともあるかもしれませんが、これはコンパイラが そのように最適化(?)してくれるわけじゃありませんし。 -- 神野健吾 <kengo@xxxxxxxxxxxx>