• ベストアンサー

プログラムカウンタのハードウェアの動き方

プログラムカウンタを変える命令が実行されたら、本当に即座にそこへ飛んでいき、追い越し・逆走何でもありだそうで、いちいち順に飛ばし読みをしたりはしないと聞きました。 ここで聞きたいのは プログラム実行後に順次進行、追い越し、逆走するときに(例えばカウンタ009から001)に即座に飛んでいくまでのハードウェアの働きのプロセスをプログラム的に教えてほしいということです。 自分が想像する例として 1.カウンタ009のプログラムを実行する。 2.プログラムカウンタを計算する。 3.プログラムカウンタを読んでそこだけに電気を流す? 4.・・・なぜ001のプログラムに即座に戻れるのか?なぜ002などほかのプログラムは無視できているのか?ほかのところは電気が流れないのか?というか電気が流れないとプログラムは実行できないのか?など 勉強不足ですいません。 自分はフローチャートを指でなぞっていく考えのせいか、順次進行でプログラムを進めていくという概念から離れることが困難で、即座に追い越し、即座に逆走をするハードウェアの動きがイメージできません。 何か詳しいサイト等がありましたらそれも教えていただけるとうれしいです。 長くなりましたがよろしくお願いします。

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

  • ベストアンサー
回答No.1

ハードウェアに関する知識をどのくらいお持ちなのか分からないですが、適当に答えてみます。 標準ロジックICには74161、74163、74191、74193カウンタ回路が用意されています。 http://ja.wikipedia.org/wiki/%E6%B1%8E%E7%94%A8%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AFIC (標準ロジックICの等価回路はデータシート検索すれば直ぐ見つかると思うので省略します) カウンタ出力をS-RAMのアドレスに接続されているような回路をご想像いただければと思います。 このカウント値(アドレス値)がプログラムカウンタ。 で、S-RAMの出力データが実行される命令。 ジャンプ命令は標準ロジックで言うとロードやプリセットと同様にカウンタの初期値を与える動作を行う。 このように考えると分かりやすくなりませんか?(逆に分かりにくい?)

RWSP
質問者

お礼

ありがとうございます

その他の回答 (2)

noname#194317
noname#194317
回答No.3

変に難しく考えすぎていますね。順次実行だろうとジャンプだろうと、考え方は同じですよ。CPUとしては、プログラムカウンタが指しているメモリアドレスの命令を取り込んで実行するだけです。 通常の命令なら、その命令長(オペランドがある場合はその長さも含む)だけプログラムカウンタが加算され、分岐命令だったらプログラムカウンタに分岐先のアドレスがセットされます。どんな命令であれ、実行されればプログラムカウンタの値が変化し、その値を参照して次の命令を実行するという点では同じなんですよ。違いは変化量のみです。 フローチャートだって、分岐したら一気に手前とかに飛んでるじゃないですか。人間だって英単語を辞書で引く時、調べたい単語がMARCHだったら、いきなりMのページから調べるでしょう?1ページから全ての単語を順に追って、MARCHが出てくるまで捜すなんて人はいませんよね? また順次実行にしても、例えば009のプログラムを実行している時、他のアドレスに入っているプログラムは無視しているわけです。分岐しようがしまいが、今注目している以外の命令を無視していることに、変わりはありません。

RWSP
質問者

お礼

ありがとうございます

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

プログラムカウンタが保持しているのはメモリアドレスです。 メモリにはランダムアクセスできるんだから 順序なんてどうにでもなるでしょ。 > 自分はフローチャートを指でなぞっていく考えのせいか、順次進行でプログラムを進めていくという概念から離れることが困難で、 あなたのフローチャートには分岐やループがないのですか? > 何か詳しいサイト等がありましたらそれも教えていただけるとうれしいです。 本当に勉強したいなら、 計算機やコンピューターアーキテクチャに関する書籍を読んだほうが良いと思います。 一応こんなの見つけたけど、入門向きじゃなさそう。 https://jndb.pc.mycom.co.jp/column/architecture/index.html

RWSP
質問者

お礼

ありがとうございます

関連するQ&A