2009-08-21 10 views
3

たとえば、8ビットCPUの場合、スタックサイズは8ビット幅、16ビットCPUと16ビットスタック幅、32ビット、64ビットCPUなどが想定されます。すべてのアーキテクチャーに当てはまりますか?スタックの幅は常にCPUレジスタのサイズと同じですか?

+0

これは、「オール白鳥が白い」アサーションのようなものです – skaffman

+3

「スタックの幅」とはどういう意味ですか? – starblue

+0

スタック幅とは、アドレス指定可能なメモリスポットの最小間隔を指しています。たとえば、一度にスタックに最低2バイトを格納することができれば、スタック幅は16ビットと言えますか? –

答えて

5

CPUにはデータバスとアドレスバスがあります。同じ幅を持つことができますが、しばしばそうではありません。

スタックポインタはメモリへのポインタなので、内部で使用される(奇妙な/あいまいな)変換がない限り、アドレスバスと同じくらいの幅です。命令ポインタ(現在の命令を指す)もまた、メモリへのポインタであり、スタックポインタのような幅である。

他のレジスタはほとんどがデータを扱うため、データバスと同じ次元を持ちます。しかし、いつものように、例外があります。

古い例を挙げる。 6502。8ビットCPU(8ビットデータバス、16ビットアドレスバス)。これは、多かれ少なかれ汎用レジスタXとYとAと呼ばれる "アキュムレータ"を持っています。すべての8ビットレジスタ。スタック・ポインタと命令ポインタがあり、スタック・ポインタは8個の明示的ビットと8個の暗黙ビット(スタックは常に同じ256バイト領域にある)を有し、したがってスタック・ポインタ・レジスタは8ビットを有し、命令ポインタは16ビットを有する。

8086には、16ビットのデータバスと20ビットのアドレスバスがあります。汎用レジスタは8(および16ビット)です。命令ポインタとスタックポインタは16ビットであるが、セグメントレジスタ(16ビットも含む)を使用して完全な20ビットアドレスを得る。

4

8ビットCPU、スタックサイズは、あなたがそれを期待するかもしれない は8ビット幅

ことを期待するだろうが、あなたは間違っているだろう。スタックの基本的な使い方は、復帰アドレスを取得するために&を格納することです.8ビットプロセッサでは、実際には16ビットの値になります。例えばZ80命令:

PUSH HL 

がスタックに(2つの8ビットレジスタ、HとLの内容)は、16ビット値をプッシュします。 8ビット値をプッシュするZ80命令はありません。

1

スタックは本当に単なる概念であり、 "スタック幅"は実際に何も意味しません。

おそらく、スタック要素の幅を意味しますが、アーキテクチャのバス幅またはレジスタサイズのサイズに関係なく、通常、任意のサイズの値を任意のスタックに格納できます(いくつかのパディングまたは配置で)。

8ビット、16ビットなどの用語は、少し恣意的であり、実際にはタイトな定義ではないため、「幅」の試行された定義が複雑になります。

1

まだ言及されていない1つのポイントは、通常のRAMのようにアクセスされない専用のスタックを持つCPUもあります(マイクロチップPICファミリなど)。 PIC16シリーズでは、スタックはプログラムカウンタのみに結び付けられ、スタックはプログラムカウンタと同じ幅(おそらく)の幅です。 PIC18シリーズでは、スタックとプログラムカウンタは両方とも21ビット幅です。上位20ビットをプログラムカウンタにコピーしたり、プログラムカウンタからコピーしたりできます。コードでは、先頭のスタック要素を5ビット部分と2つの8ビット部分として調べることもできます。

関連する問題