19

たとえば、斧を押した場合、[SP] は斧の値または斧の後の単語を指しますか? また、リアルモードとプロテクトモードの違いはありますか? これは、Art of assembly book が、sp が最後にプッシュされたデータを指すように説明および説明しているためです

4

4 に答える 4

29

ウィキペディアはここに言います:

スタックは、暗黙的にデクリメント (プッシュ) およびインクリメント (ポップ) するスタック ポインターを使用して実装されます。この暗黙のスタック ポインタは、16 ビット モードでは SS:[SP]、32 ビット モードでは SS:[ESP]、64 ビット モードでは [RSP] としてアドレス指定されます。スタック ポインターは実際には、格納された最後の値を指します。そのサイズは、プッシュ/ポップ/コールのデフォルト幅に一致するように、プロセッサの動作モード (つまり、16、32、または 64 ビット) に一致すると想定されます。 /ret 命令。

これは、私の昔の記憶がそれが機能すると言っている方法でもあります。

于 2012-12-27T19:56:03.863 に答える
23
push eax

以下と同等です。

sub esp, 4
mov [esp], eax

したがって、プッシュ後、プッシュespされた値のアドレスが保持されます。

于 2012-12-27T19:59:43.543 に答える
0

OPがこの質問をしている理由を理解していると思います。SP からの最初の変数が 4 バイトではなく 8 バイトなのはなぜですか?

いくつかの調査の後、次のことを示すこれを見つけました。

SP+0 は古い EBP SP+4 は古い EIP (命令ポインタ)

したがって、当然、最初のパラメータは SP+8 になります。

于 2015-08-23T18:36:15.403 に答える