1

スタック:

0xDDDD
0xCCCC
0xBBBB
0xAAAA

ポップアックスの意味:

  • 0xAAAA は ax に配置されます
  • SS:SP は 0xBBBB を指します。

今、私はこれを取得します。

0xDDDD
0xCCCC
0xBBBB

斧の価値を救いたい。

push ax.

0xDDDD
0xCCCC
0xBBBB
0xAAAA

ほら、また行きます。

mov ax, [ss:sp+2]

0xBBBB は ax にロードされます。

機能が完了したら、0xAAAA と 0xBBBB の両方をスタックから削除します。まず、斧を元に戻します。

pop ax. (Now loaded with 0xAAAA)

スタックから 0xBBBB を取り除くにはどうすればよいですか? 引数なしで単純に「ポップ」しますか (これは存在しますか?)、それとも sp, 2 を追加しますか?

ありがとうございました。

4

1 に答える 1

1

のように、スタック ポインタをスタックの前の方を指すように調整するだけadd sp, $2です。構文は、使用するアセンブラによって異なる場合があります。$2「即時値 2」を意味します。

Intel 64 and IA-32 Architectures Software Developer's Manualsをダウンロードできます。

(16 ビット レジスタの使用はかなり古いことに注意してください。作成しているプラ​​ットフォームによっては、スタック アラインメントを 4 バイトの倍数以上に維持する必要がある場合があります。特に、ルーチンを呼び出すときやルーチンから戻るときなどです。)

于 2013-03-18T20:26:44.823 に答える