• ベストアンサー

ハードウェアでスタック構造をサポート

(c)一般的なアーキテクチャではハードウェアでスタック構造をサポートしているものが多いが、その機構を説明せよ。 「LIFO」「FILO」に行き着いたのですが、それはソフトウェアの話ですよね? ハードウェア視点からのスタック構造サポートとはなにがあるのでしょうか?

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

  • ベストアンサー
  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.3

レジスタとしてスタックポインタ(汎用レジスタを同じ目的で使えるものも含む)があり。 push/popのようなスタック操作命令が実装されている。 と言う当たりをもうちょっと調べて膨らましては

その他の回答 (2)

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.2

アドレス修飾レジスタの中でスタックポインタ(SP)を持つものを調べ、その動作について記述すると良いと思います。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ここでいう 「ハードウェアでスタック構造をサポートしている」 とは, どういうことですか?

関連するQ&A

  • ハードウェアでスタック構造をサポート2

    (c)一般的なアーキテクチャではハードウェアでスタック構造をサポートしているものが多いが、その機構を説明せよ。 スタック操作という手法がある。スタック操作は,スタック・ポインタで操作するアドレスを保持し,スタックへ書き込み(押し込み)したデータ数だけポインタ値を調整する手法のこと.スタックへのデータ格納命令(PUSH,CALLなど)を実行すると,スタック・ポインタが保持するアドレスは格納データ数だけ若くなり,逆にデータ取り出し命令(POP,RETなど)を実行するとそのデータ数だけポインタ値は大きくなる。 (d)前問で説明したストック構造の代表的な使い方を説明せよ。 アドレス修飾レジスタの中でスタックポインタ(SP)を持つものがある。スタックポインタはアドレスレジスタの一種で、コールスタックの先頭を指すポインタレジスタである。これが示すアドレスの内容を読み出すと同時にアドレスを増やす、逆に、示すアドレスに書き込むと同時にアドレスを減らす、といった動作を行えるものが多い。 というふうにまとめてみました。ご確認お願い致します。  

  • スタックに構造体をつむには?

    C言語でスタックに構造体を積む方法を知りたいのですがどうしたらよろしいのでしょうか? 教えてください。

  • スタックモジュール

    「スタックモジュール」を作ることを考える。データ構造の定義と、以下の操作の定義を書け。ただしC言語を使え。 create 空のスタックを作る push スタックにデータを一つ挿入 pop スタックトップのデータを返すとともに、そのデータをスタックから削除 という問題です。 私は、C言語でのスタック構造は配列でしか扱ったことがなく、「スタックモジュール」の意味がよくわかりません。スタック構造はFILOのデータ構造ですが、これをC言語で書こうとすると配列を宣言して終わってしまう気がします。 create・push・popは、int (&num){......}のように普通に関数を宣言すればよいのでしょうか。 どなたか教えてください。

  • ハードウェアアーキテクチャ?

    ハードウェアアーキテクチャ? プログラムがコンピュータで実行されるまでの筋道が知りたいです。 C言語を勉強していたのですがmalloc();などの動的メモリの部分や #pragmaを使って変数のパッキングを弄る方法、部分的にアセンブラ命令を書いて処理を軽くするインラインアセンブラなどのテクニック、 レジスタ上にメモリを確保するregisterをつけて変数を宣言する方法など、ハードウェアに近い根幹的部分のほうを知りたいです。 メモリにしろヒープ領域とスタック領域があるだとかC言語の入門書には載っていないことがよくあります。 CPUの仕組みや、メモリの動作や、根本的なことが知りたいです。 このようなハードウェア寄り?なことを専門に扱っているHPや本などありましたら教えてください。

  • アルゴリズムは、たった3つの制御構造の組み合わせで記述することができることのハードウエアとからめた理解。

    すべてのアルゴリズムは、たった3つの制御構造の組み合わせで記述することができる。3つの制御構造とは、図1~3が示すような順次実行、分岐実行、繰り返し実行である http://www.rsch.tuis.ac.jp/~kitakaze/2008/flow.html とありますが、 以前、学生時代、教授がこれについて、ハードウェアとからめて説明していたのを 思い出します。 「ハードウエアを見ても、CPUがどうの、こうのだから、 順次実行、ハードウエアのここで分岐を実行して、 ハードウェアのここで反復実行をしている。だからソフトウエアとしてもこの3つの命令ですべてのアルゴリズムを記述できるわけだ」 というような感じの説明でした。 そのときは、なるほど深く理解しているひとは、アルゴリズムというソフトウエアと 回路、素子などによる構成物であるハードウエアと両方見て、合理的に説明する能力が あるのだなと感心しました。 その具体的なひとことは残念ながら思い出せませんので質問します。 ハードウェアとアルゴリズムが3つの指令(分岐、繰り返し、順次)ですべて記述できること の間の関係をうまく説明できる方はいますか? よろしくお願いします。

  • ポインタ版リスト構造によるスタックの実装

    C言語を用いてアルゴリズムの勉強をしています。 現在、ポインタ版リスト構造によるスタックを実装し、入力された文字列の中で括弧の整合性を判定するプログラムを作成しているのですが、難航しています。 プログラムの内容は、以下の通りです。 入力:a{z[e(b){j}(p)]w}(j) 結果:整合 入力:a{z[e(b){j}(p)}w](j) 結果:不整合 ですが、所持している参考書の例題プログラムには、スタックに入れる要素が整数値のものしかなく、文字をスタックに入れるところからわかりません。 また、先輩に尋ねたところ、以下のような構造体を使うと良いとアドバイスされました。 typedef struct { int max; int num; List stk; } Stack; typedef struct { Node *head; Node *crnt; } List; typedef struct node { char data; struct node *next; } Node; 先輩には申し訳ないのですが、余計にわからなくなってしまいました。 この構造体を用いてプログラムをかける方、ご指導のほどよろしくお願いします。

  • キューとスタックの問題です、宜しくお願いします

     (多分基本情報処理に関する問題だと思うのですが)データ構造に関する問題です、いくら考えても分かりません、宜しくお願いします。 【問】空の状態のキューとスタックの二つのデータ構造がある。 次の手続きを順に実行した場合、変数xに代入されるデータはどれか。 ここで、 ・データyをスタックに挿入することをpush(y) ・スタックからデータを取り出すことをpop( ) ・データyをキューに挿入することをenq(y) ・キューからデータを取り出すことをdeq( ) と表す。 (1)push(a) (2)push (b) (3)enq(pop( )) (4)enq(c) (5)push(d) (6)push(dep( )) (7)pop( ) → x 以上の答えとして(6)にはbがスタックにpushされるので、後入れ先出し を考えると当然「xにはb」が入るはずなのですが、どうも答えは「d」となっています。 「d」は「b」より前にスタックされてますので、最新で取出される情報は「b」しかないと思うのですが、誰か誤りを指摘してください、宜しくお願いします。

  • なぜソフトウェアでハードウェアが動くのか

    組み込み機器のソフトウェア開発を行なっております。 ソフトウェアのようなテキスト文書で、なぜハードウェアが制御できるのかがわかりません。 例えば一般的なマイコンで あるレジスタの値を1に書き換えることで 該当するポートの電圧がHになるという制御において レジスタの値が書き換われば電圧がHになるというのはイメージがつかめるのですが ソフトウェアでなぜレジスタの値が書き換わるのかがわかりません。 なるべく具体例でアセンブリ言語→機械語→レジスタが書き換わる の対応関係を説明していただけると幸いです。 よろしくお願いいたします。

  • ハードウェアのシミュレーション方法

    こんにちは。 ハードウェアのシミュレーション方法について教えてください。 現在、C++の勉強として一般家庭にある電気ポットをソフトウェアで完全シミュレーションという課題をしています。 [GUI]⇒[Hardware] Windows フォームアプリケーションで作成したGUIのボタンを押した時 Hardwareのヒーターの温度をあげたいのですが、友人等に聞いても、わかりません。 例としては以下の様にかけば良い言われたのですが……どなたか簡単な例を教えてくれませんか? ※できれば最初の文(#include)から教えてください。 class Water { double quantity; // 水量 double temp; // 温度 int heatig(double temp, double time) ;  ………  …… } できれば、C++が詳しい方、ご教授お願いします。

  • ハードウェア時計の同期

    solaris9やRedhat Enterprise Linuxで ntpを使用して公共ntpサーバを参照して 時刻同期を行っています。 システム時刻(ソフトウェア時刻)は ntpで補正されると思うのですが、 そのソフトウェア時刻はどのような方法、 タイミングでハードウェア時刻を更新しに いくのでしょうか? 気にしているのは暫く電源断していた時に、 大きくハードウェア時刻がずれて、ntp で合わせるのに多大な時間がかかってしまう 事などと憂慮しています。 昔のredhat等は、電源断時に今のソフトウェア 時刻をファイルに保存しておいて、起動時に ハードウェア時計がそれ参照して、ハードウェア 時刻とソフトウェア時刻を更新する なんて 話を聞いたことがあります。(信頼度中位) solarisはsparcマシン redhatはx86マシンとして、それぞれどのように してソフトウェア時刻とハードウェア時刻を 同期しているか、それとそのタイミングについて 教えて頂けませんでしょうか。