[解決済み] アセンブリ言語ではスタックはどのように機能するのですか?
質問
私は現在、スタックがどのように機能するかを理解しようとしています。 アセンブリ言語 この本を使っています。
http://savannah.nongnu.org/projects/pgubook/
私が使っているのは ガス で開発をしていて Linux Mint .
ちょっとわからないことがあるのですが。
私が知っている限り、スタックは単なるデータ構造です。そのため、もし私がアセンブリでコーディングしているなら、スタックを自分で実装しなければならないと思っていました。しかし、これはそうではないようで、次のようなコマンドがあります。
pushl
popl
ということで、アセンブリで x86 アーキテクチャで Gas 構文を使用する場合、スタックはすでに実装されているデータ構造なのでしょうか?それとも、ハードウェア レベルで実際に実装されているのでしょうか?それとも何か他のものですか?また、他のチップセット用のほとんどのアセンブリ言語では、スタックはすでに実装されているのでしょうか?
これは少し愚かな質問であることは分かっていますが、実際、私はこれによってかなり混乱しています。
どのように解決するのですか?
私は主に、あなたが混乱に陥っていると思う
program's stack
と
any old stack
.
Aスタック
Last In First Out方式で情報を構成する抽象的なデータ構造です。スタックの上に任意のオブジェクトを置き、またそれを取り出すという、入出庫トレイのようなもので、常に一番上のアイテムが取り出され、常に一番上に置かれることになります。
プログラムスタック
スタックとは、実行中に使用されるメモリのセクションのことで、一般にプログラムごとに固定されたサイズを持ち、関数のパラメータを格納するために頻繁に使用されます。関数を呼び出すときにパラメータをスタックにプッシュし、関数はスタックを直接アドレスするか、スタックから変数をポップオフします。
プログラムのスタックは一般的にハードウェアではありませんが(メモリに保存されているので、そのように主張することはできます)、スタックの現在の領域を指すスタックポインタは一般的に CPU レジスタです。このため、スタックがアドレス指定されるポイントを変更できるため、LIFO スタックよりも少し柔軟性があります。
を読み、理解する必要があります。 ウィキペディア の記事を読み、理解する必要があります。この記事では、あなたが扱っているハードウェア スタックについて詳しく説明しています。
また、次のようなものもあります。 このチュートリアル では、スタックを古い16ビットレジスタの観点から説明していますが、参考になるかもしれませんし もうひとつ は、特にスタックについて説明しています。
Nils Pipenbrinckからです。
プロセッサによっては、スタックにアクセスして操作する命令 (プッシュ、ポップ、スタックポインタなど) をすべて実装していないものもありますが、x86 はその使用頻度から実装しているということは、注目に値します。このような状況では、スタックが必要な場合、自分で実装する必要があります (一部の MIPS および一部の ARM プロセッサはスタックなしで作成されます)。
たとえば、MIP ではプッシュ命令は次のように実装されます。
addi $sp, $sp, -4 # Decrement stack pointer by 4
sw $t0, ($sp) # Save $t0 to stack
となり、Pop命令は次のようになります。
lw $t0, ($sp) # Copy from stack to $t0
addi $sp, $sp, 4 # Increment stack pointer by 4
関連
-
[解決済み] JavaScriptで呼び出し元の関数を調べるには?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] JavaScriptでStackとQueueを実装するには?
-
[解決済み】マルチコアアセンブラとはどのようなものですか?
-
[解決済み] FS"/"GS "レジスタは何のためにあるのですか?
-
[解決済み] コールスタックはどのように機能するのか?
-
[解決済み] アセンブリコードで "int 0x80 "とはどういう意味ですか?
-
[解決済み] なぜインテルはプロセッサーに内蔵RISCコアを隠すのか?
-
[解決済み] x86アセンブリの「rep; nop;」とはどういう意味ですか?pause "命令と同じですか?
-
[解決済み] ここでいう「@plt」とは、どういう意味でしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] cmp命令の理解
-
[解決済み] どちらが速いですか?スタックアロケーションとヒープアロケーション
-
[解決済み] FS"/"GS "レジスタは何のためにあるのですか?
-
[解決済み] なぜx86は醜いのか?なぜ他と比較して劣っていると言われるのか?[クローズド]
-
[解決済み] 最近のシステムでは、スタックの成長方向はどうなっているのでしょうか?
-
[解決済み] アセンブリコードで "int 0x80 "とはどういう意味ですか?
-
[解決済み] 学習会【終了
-
[解決済み] x86アセンブリの「rep; nop;」とはどういう意味ですか?pause "命令と同じですか?
-
[解決済み] x86_64 registers rax/eax/ax/al overwriting full register contents [duplicate] レジスタの内容をすべて上書きする。
-
[解決済み] ここでいう「@plt」とは、どういう意味でしょうか?