スタック/スタックポインタとは:タイプとそのアプリケーション

問題を排除するために楽器を試してください





スタックは、挿入と削除が一方の端でのみ行われる線形データ構造に他なりません。挿入操作にはPUSHと呼ばれる特別な名前があり、削除操作にもPOPと呼ばれる特別な名前があります。 PUSHとPOPは、特定のスタックでのみ実行できる2つの基本的な操作です。これはメモリ位置のグループであり、メモリ位置は読み取りメモリまたは書き込みメモリのいずれかに関連しています。これは、プログラムの実行中にバイナリ情報を格納するために使用されます。プログラムを実行すると、そのプログラムの内容がスタックに格納されます。続く 最初のうちの最後の (LIFO)であり、データの保存と取得にのみ使用され、データの保存には使用されません。スタック/スタックポインタの簡単な説明を以下で説明します。

スタック/スタックポインタとは何ですか?

定義: スタックは、LIFO(後入れ先出し)の方法で情報またはデータを格納するために使用されるストレージデバイスです。 LIFO形式でデータを入力する場合は常に、最初に削除する必要がある要素が最後の挿入要素であるため、最後に挿入された要素が最初に取り出されます。スタックポインタ(SP)と呼ばれるアドレスレジスタ内のメモリユニットです。スタックポインタは常にスタックの最上位の要素を示します。これは、データを挿入する必要がある場所を意味します。




スタックの種類

スタックには、レジスタスタックとメモリスタックの2種類があります。

レジスタスタック

レジスタスタックもメモリユニットに存在するメモリデバイスですが、処理するデータはごくわずかです。レジスタスタックのサイズはメモリに比べて非常に小さいため、スタックの深さは常にレジスタスタックで制限されます。



レジスタスタックでのプッシュ操作

ステップ1: スタックポインタが1ずつ増加します。

SP←SP + 1


ステップ2: データをスタックに入力します。

1000 [SP]←CT

ここで、DRはデータレジスタです

ステップ3: スタックがいっぱいかどうかを確認します

if(sp = 0)then(full←1)

ステップ4: 空ではないマーク

空←0

レジスタスタックでのポップ操作

ステップ1: スタックからデータを読み取ります。

DR←M [SP]

ステップ2: スタックポイントをデクリメントします。

SP←SP-1

ステップ3: スタックが空かどうかを確認します

sp = 0の場合は空←1

次の図に、64ビットレジスタスタックのスタック構成を示します。

スタック組織の登録

スタック組織の登録

メモリスタック

メモリスタックでは、スタックの深さは柔軟です。大量のメモリデータを占有しますが、レジスタスタックには有限数のメモリワードしか格納されません。

メモリスタックでのプッシュ操作

ステップ1: SP←SP-1

ステップ2: 1000 [SP]←CT

メモリスタックでのポップ操作

ステップ1: DR←M [SP]

ステップ2: SP←SP-1

レジスタユニットと比較して、メモリユニットは大量のデータを格納します。次の図に、メモリスタックの図を示します。

メモリスタック

メモリスタック

合計メモリユニットは3つの部分に分かれており、最初のメモリユニットにはプログラム(命令のみ)があり、2番目の部分はデータ(オペランド)で、3番目の部分はスタックです。プログラム命令は常にプログラムカウンタ(PC)に格納され、データレジスタはアドレスレジスタ(AR)によって識別されます。スタックと最初のアイテムまたは要素に使用されるアドレス3000から4001は、4001に格納されます。

8085マイクロプロセッサのスタック/スタックポインタ

8085のプログラマービュー マイクロプロセッサ 汎用レジスタが含まれ、 専用レジスタ 。汎用レジスタはA、B、C、D、E、H、Lであり、専用レジスタはSP(スタックポインタ)とPC(プログラムカウンタ)です。以下の図に、8085マイクロプロセッサのプログラマービューを示します。

8085のプログラマービュー

8085のプログラマービュー

スタックポインタは16ビットレジスタであり、メモリアドレスが含まれています。スタックポインタ(SP)の内容がFC78Hであるとすると、マイクロプロセッサ8085がそれを解釈します。メモリ位置には、FC78HからFFFHまでの有用な情報があり、FC77Hから0000Hまでのメモリ位置には有用な情報がありません。スタックポインタの解釈を次の図に示します。

スタックポインタの解釈

スタックポインタの解釈

スタック/スタックポインタの基本操作

スタックには、PUSH操作とPOP操作の2つの操作があります。

PUSH操作

PUSHは、要素をスタックにプッシュまたは挿入することを意味します。 PUSH操作は常にスタックポインターをインクリメントし、POP操作は常にスタックポインターをデクリメントします。プッシュ操作の場合、空き容量があるかどうかを確認する必要があります。空き容量がある場合はプッシュ操作に進み、空き容量がない場合はオーバーフローのエラーメッセージが表示されます。プッシュ操作の場合はそれぞれオーバーフローをチェックします。プッシュアンドポップの基本的な操作を下図に示します。

PUSHとPOPの基本操作

PUSHとPOPの基本操作

図(a)はスタックです。要素をスタックに挿入している要素をプッシュする場合は、push(s、a)する必要があります。ここで、「s」はスタックにすぎません。スタックに「a」要素を配置します。この操作を図(b)に示します。図(3)を参照してください。スタックに、3つの要素a、b、cが含まれ、スタックが要素で満たされているとします。

push(s、d)を使用して4番目の要素「d」を挿入したいが、要素を挿入するために使用できるスペースがない場合は、スタックがオーバーフローしていることを示しています。オーバーフローの用語は、スタックがいっぱいのときに使用され、プッシュ操作のアルゴリズムを以下に示します。

push(stack []、top、max stack、item)

if(top == maxstack-1)

{{

「オーバーフロー」を印刷

}

そうしないと

{{

top = top + 1

stack [top] = item

}

終わり

POP操作

POPは、スタックの最上位にある要素を削除することを意味します。ポップ操作の場合、スタックが最初に空であるかどうかを確認する必要があります。スタックが最初に空の場合、アンダーフロー状況が発生します。スタックが空で、スタック内の要素をポップしたいが、スタック内に要素がない場合、スタックのアンダーフローが発生するとします。

ポップ操作の場合は、それぞれアンダーフローをチェックします。ポップ操作では、スタック内に存在する、ポップまたは削除する必要のある最上位の要素が何であれ、どの要素がポップされるかを指定する必要はありません。デフォルトでは、最上位の要素がポップされます。ポップ操作のアルゴリズムを以下に示します。

pop(stack []、top、item)

if(top ==-1)

{{

「アンダーフロー」を印刷

}

そうしないと

{{

item = stack [top]

top = top-1

}

要素はA、B、C、D、Eの順に挿入され、5つの要素のスタックを表します。図(a)では、スタックに「A」要素をプッシュすると、トップがゼロ(top = 0)になります。同様に、「B」要素がプッシュされるとtop = 1、「C」要素がプッシュされるとtop = 2になります。がプッシュされ、「D」要素がプッシュされるとtop = 3、「E」要素がプッシュされるとtop = 4になります。

したがって、取得した要素がスタックに配置されても、スタックはいっぱいになります。別の要素をプッシュしたい場合は、スタックに場所がないため、オーバーフローを示します。要素「E」要素をポップする場合は、最初にスタックを削除する必要があります。プッシュ操作を下図に示します。

プッシュ操作

プッシュ操作

スタック内の要素を削除するには、pop操作を使用する必要があります。したがって、pop()はデフォルトで最上位の要素を削除するため、popに引数を記述しないでください。最初の「E」要素が削除され、次の「D」要素…..「A」が削除されます。最上位の要素が削除されると、最上位の値が減少します。 top = -1の場合、スタックはアンダーフローを示します。ポップ操作を下図に示します。

POP操作

POP操作

これは、プッシュおよびポップ操作を使用して要素がスタックに挿入および削除される方法の説明です。

アプリケーション

スタック/スタックポインタのアプリケーションは次のとおりです。

  • 文字列の反転
  • バランスのとれた括弧
  • 元に戻す/指
  • アクティベーションレコードのシステムスタック
  • 中置、接頭辞、接尾辞、式

よくある質問

1)。腕のスタックポインタとは何ですか?

ARMのアクティブスタックへのポインタとして使用されるスタックポインタレジスタ(R13)。

2)。スタックポインタが16ビットなのはなぜですか?

以前のロケーションとメモリロケーションアドレスを格納するために使用されるスタックポインタ(SP)とプログラムカウンタ(PC)は16ビットであるため、スタックポインタ(SP)も16ビットです。

3)。スタックポインタの役割は何ですか?

スタックポインタ(SP)の役割は、スタック内の要素の最上位を示すことです。

4)。どのスタックが8085で使用されていますか?

8085で使用されるスタックは後入れ先出し(LIFO)です。

5)。スタックポインタはレジスタですか?

はい、スタックポインタ(SP)は、常にスタック内の要素の最上位を示すアドレスレジスタです。

この記事では何ですか