- ベストアンサー
Z80プログラムなんですが・・・。
Z80関係のレポートで困っています。 レジスタ退避・復帰の時にEX、EXX命令を使う事が好ましくない 理由を挙げなければならないんです。 全然分かりませんので、詳しい方のお知恵を拝借できませんでしょうか? どうか宜しくお願いいたしますm(_ _)m
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
たしか裏レジスタとの切り替え命令だったかな? であれば、主な理由としてはレジスタの待避がEX、EXXじゃまずいのは、再帰や内部で更に別のルーチンを呼ぶことがある場合、レジスタ内容の保証が出来ないことでしょう。 スタックであればオーバーフローするまで何度でも待避、復帰できますが、裏レジスタとの交換だと一階層しか潜れません。 通常、コンパイルやアセンブルが出来る言語の場合、ソースを分割しての作成が出来るので、設計の段階では機能(関数やルーチン)などは入力と出力しか定義しません(特にチーム開発時とか。一人でやってても3ヶ月前の自分の書いたコードは別の人が書いたコードと思えといった言葉もあります)。 そのような場合、ルーチンコール中で二度以上レジスタ交換してしまうと内容が破壊されてまともにプログラムが動かなくなるからでしょう。
その他の回答 (2)
- terra5
- ベストアンサー率34% (574/1662)
EX AF,AF' EXX が対象でしょうか。 一度しか使えないことが最大の問題でしょう. プログラムを組んだことがあれば、一度しか使えないことが大きな制約になることがわかると思いますが。 EX (SP),HLみたいのは別口で問題無しと考えてます。 使えるレジスタに制限がありますが、スタックとのやりとりですから。
- kabasan
- ベストアンサー率44% (264/588)
仕事で使ってると基本忘れますね~ 「見た目」の問題ではないでしょうか? pushとpopは一組で使いますよね、文字も違うので待避した、復帰したがわかりやすいと思います。 exは何度も使用していると、表レジスタなのか裏レジスタなのかわからなくなってきます。必ず2個一組で使うと決めていても、うっかりミスでバグとなったとき、ある行のexが待避なのか復帰なのか前後のプログラムを見ないとわかりません。 プログラムの透過性が良いとか表現しますが、見た目でわかりやすい、バグを発見しやすいプログラムのためには好ましくないと言いたいのだと思います。 おまけですが、 単にほんの一瞬待避したいだけならpushよりもexの方が高速なので性格的につい使ってしまいます。(笑)
お礼
的確なアドバイスありがとうございました。 お蔭様でレポートもなんとかなりそうです★ また、ご縁がありましたら宜しくお願いいたします。 簡単ですが失礼しますm(_ _)m