• ベストアンサー

アセンブラの相対ジャンプについて

 いつもお世話になっています。 今回もよろしくお願いします。  今、マイクロコンピュータのZ80を使用して実験を行っています。 それの相対ジャンプについて教えてください。  相対ジャンプの動作はPC+e(e:ディスプレイスメント)で、機械コードは18e-2となっているんですが、なぜ「-2」としなければならないのかがわかりません。    ご存知の方がいたら教えてください。よろしくお願い致します。 足りなければ補足させていただきます。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

ジャンプを実行タイミングには既に自分自身の命令を実行しているのでその分の-2をしてやる必要があります。

cherry_blossom
質問者

お礼

回答ありがとうございました。 お礼と締め切るのを忘れていました。 遅くなってしまい申し訳ありませんでした。

その他の回答 (1)

  • poppoyan
  • ベストアンサー率32% (58/177)
回答No.2

プログラム実行中の大まかな流れとして 1 PCの示すアドレスから命令を読む。 2 その命令のバイト数分だけPCに加算する。 3 読み込んだ命令を実行する。 4 1 に戻る。 ここで大事なのは、命令を実行する前にPCに加算している事です。 絶対ジャンプの場合は、PCにアドレスを代入するだけで次の命令はそのアドレスから読み込んで実行しますが 相対ジャンプの場合は、その時のPCを基準にして前後に飛びますので、 #1のかたの回答にあるように、命令実行時に既に加算された分を引いてやる必要があります。

cherry_blossom
質問者

お礼

回答ありがとうございました。 お礼と締め切るのを忘れていました。 遅くなってしまい申し訳ありませんでした。

関連するQ&A