Z80関係のレポートで困っています。

レジスタ退避・復帰の時にEX、EXX命令を使う事が好ましくない
理由を挙げなければならないんです。

全然分かりませんので、詳しい方のお知恵を拝借できませんでしょうか?
どうか宜しくお願いいたしますm(_ _)m

A 回答 (3件)

たしか裏レジスタとの切り替え命令だったかな?



であれば、主な理由としてはレジスタの待避がEX、EXXじゃまずいのは、再帰や内部で更に別のルーチンを呼ぶことがある場合、レジスタ内容の保証が出来ないことでしょう。

スタックであればオーバーフローするまで何度でも待避、復帰できますが、裏レジスタとの交換だと一階層しか潜れません。

通常、コンパイルやアセンブルが出来る言語の場合、ソースを分割しての作成が出来るので、設計の段階では機能(関数やルーチン)などは入力と出力しか定義しません(特にチーム開発時とか。一人でやってても3ヶ月前の自分の書いたコードは別の人が書いたコードと思えといった言葉もあります)。
そのような場合、ルーチンコール中で二度以上レジスタ交換してしまうと内容が破壊されてまともにプログラムが動かなくなるからでしょう。
    • good
    • 0
この回答へのお礼

的確なアドバイスありがとうございました。
お蔭様でレポートもなんとかなりそうです★
また、ご縁がありましたら宜しくお願いいたします。
簡単ですが失礼しますm(_ _)m

お礼日時:2002/02/22 00:30

EX AF,AF'


EXX
が対象でしょうか。

一度しか使えないことが最大の問題でしょう.
プログラムを組んだことがあれば、一度しか使えないことが大きな制約になることがわかると思いますが。

EX (SP),HLみたいのは別口で問題無しと考えてます。
使えるレジスタに制限がありますが、スタックとのやりとりですから。
    • good
    • 0

仕事で使ってると基本忘れますね~



「見た目」の問題ではないでしょうか?
pushとpopは一組で使いますよね、文字も違うので待避した、復帰したがわかりやすいと思います。
exは何度も使用していると、表レジスタなのか裏レジスタなのかわからなくなってきます。必ず2個一組で使うと決めていても、うっかりミスでバグとなったとき、ある行のexが待避なのか復帰なのか前後のプログラムを見ないとわかりません。
プログラムの透過性が良いとか表現しますが、見た目でわかりやすい、バグを発見しやすいプログラムのためには好ましくないと言いたいのだと思います。

おまけですが、
単にほんの一瞬待避したいだけならpushよりもexの方が高速なので性格的につい使ってしまいます。(笑)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


人気Q&Aランキング

おすすめ情報