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 行目です!!! エラーじゃないですか?読んでくれてありがとう!
ボブ