これを正しく理解すれば、プログラムカウンタは実行される命令のアドレスを指し示し、ほとんどの場合、次の命令アドレスに進むためにプログラムカウンタに4を加算します。しかし、メモリ内の単語(例えば、ワード15)を指しているプログラムカウンタがあり、次の命令に進むには、次の命令を得るために15を4に直接加算すると仮定していますか?どんな説明もあります。プログラムカウンタ?
答えて
そのことを命令ポインタといいます。プロセッサが現在の命令をデコードすると、それは占有するバイト数を検出し、現在の命令ポインタ値にどの程度加算して次の命令に進むかを知るので、現在の命令が実行されたときにプロセッサは次に何をするかを知る。
例えば、プロセッサはあなたの例のように値15を格納している命令ポインタから始まります - そのアドレスに何が起こっているかを見て、5バイトを占める命令があっても問題ありません。現在の値であり、これにより20が生じるので、命令ポインタは現在値20を格納し、プロセッサは現在の命令を実行する。
プログラムカウンタを直接進めることはありません.CPUはプログラムを実行することであなたのために実行します。プログラマは、さまざまなジャンプ命令(条件付き、無条件、サブルーチンへのジャンプなど)を実行することによってプログラムカウンタを操作します。プログラムカウンタにオフセットを追加する必要がある特定のケースは、位置に依存しないコードで分岐する場合です。ただし、この場合でも、プログラムカウンタに命令のサイズを追加することはありません。代わりに、 "相対アドレスへの分岐"を実行してジャンプ先のオフセットを指定します。
絶対アドレス0x4000にあるアプリケーションコードにジャンプするブートローダを作成するときはどうでしょうか?この場合、プログラムカウンタを絶対アドレスに直接変更します。 – eepty
@eeptyこれは、2番目のセンテンスが言うことです:あなたはレジスタ設定命令ではなく、ジャンプ命令でそれを実行しています。 – dasblinkenlight
- 1. Pthreadプログラムカウンタ
- 2. プログラムカウンタのサイズ
- 3. Verilogプログラムカウンタ構文エラー
- 4. 命令ポインタとプログラムカウンタ?
- 5. プログラムカウンタが進まない
- 6. foobarのデバッグ方法プログラムカウンタ
- 7. Javaプログラムのプログラムカウンタのレジスタ値
- 8. "プログラムカウンタ"と "開始アドレス"の差
- 9. 分岐付きVerilogプログラムカウンタ
- 10. Delphiのデバッグでプログラムカウンタを移動する
- 11. 新しい場所へのプログラムカウンタのジャンプ
- 12. 「各JVMスレッドには独自のプログラムカウンタがありますか?
- 13. プログラムカウンタは常に変更する必要がありますか?
- 14. Cを使用したARM Cortex Mシリーズのプログラムカウンタ値の取得
- 15. Cのプログラムカウンタの正確な値を出力する方法
- 16. ボルタのスレッドごとのプログラムカウンタのレジスタ消費
- 17. スタック上の関数の "プログラムカウンタ"を取得する方法は?
- 18. プログラムカウンタの変更やアクセスは可能ですか?
- 19. PIC18Fのスタックからプログラムカウンタの値を取得する方法
- 20. Chromeデバッガでプログラムカウンタを移動する方法はありますか?
- 21. MIPSでは、なぜジャンプ命令がプログラムカウンタを28ビットのターゲットアドレスに設定できるのですか
- 22. すぐに遠いメモリアドレスにプログラムカウンタを移動することはできますか?
- 23. プロセッサ内のプログラムカウンタのゲートレベル回路はどのように見えますか?またはタイムステップカウンター?
- 24. Forthのような言語を1つのスタックで実装できますか?
- 25. 「選択したフレームのプログラムカウンタが関数に含まれていません」と表示されたら、GDBにコードを逆アセンブルさせる方法はありますか?
- 26. VHDL 10ビットプログラムカウンタを1ずつインクリメント
- 27. LC-3アセンブリ言語では、メモリ内の特定の場所(おそらくオフセットあり)に値を格納するにはどうすればよいですか?
- 28. MIPSコードのこの行でオフセットは何をしますか:lw $ s0,4($ t0)?
- 29. jalを使わずにMIPSでリターンアドレスを指定する方法はありますか?
- 30. メモリマップにR0とR1レジスタはありますか?
あなたの例は理にかなっていますが、追加するものがそのアドレスのwhatsに依存する場合、PC + 4はどこから来ますか? – Ockham
@ user28694:これはプロセッサによって異なります。一部のプロセッサでは、すべての命令の長さが同じであるため、無条件に+4にすることができます。一部のプロセッサは可変長命令を持ち、命令自体の最初のバイトを使用して処理する命令を決定します。 – sharptooth
[MIPS命令はすべて32ビット長ではありません](http://en.wikipedia.org/wiki/MIPS_architecture#MIPS_I_instruction_formats)? –