0

HCS08 CPU (Freescale MCU で使用) を使用していますが、分岐命令を理解できません。ここにマニュアルがあります。このアーキテクチャのプログラム カウンタは、フェッチされる次の命令を指します。BSR 命令 (237 ページ) は、次の方法でプログラム カウンター レジスタを更新します (スタックに保存して分岐を行う前に)。

PC ← (PC) + $0002 PCをリターンアドレスに進める

彼らは、「プログラムカウンターはオペコードアドレスから2ずつインクリメントされます(したがって、リターンアドレスになる次の命令のオペコードを指します)」と言います。しかし、なぜ 1 だけでなく 2 なのか??? 私が持っているとしましょう

  • 行 1 命令 1
  • ライン 2 BSR
  • 3行目命令2
  • 4行目命令3

CPU が "instruction1" をフェッチしている間、次の行に分岐があることを認識していないため、"instruction1" フェッチの後、プログラム カウンターは行 2 を指します。CPU が BSR をフェッチするとき、それは増加しません。プログラムカウンター; プログラム カウンタの実際の値に 2 を加えた値がスタックに保存されます。この値は、分岐の最後で return 命令によって使用されます。しかし、プログラム カウンター + 2 ポイントは、3 行目ではなく 4 行目です!!! エラーじゃないですか?読んでくれてありがとう!

ボブ

4

1 に答える 1

2

アセンブラのロケーションカウンタと CPUプログラムカウンタの間で混乱している可能性があります。BSR は 2 バイトの命令 (AD + addr) であるため、PC を 2 進める必要があります。

于 2013-06-19T14:48:15.327 に答える