スタックとは、プログラムごとに割り当てられるメモリ領域の一つで、関数の呼び出しや関数内である程度のサイズのデータを扱う際、この領域を利用してデータをキープしたり、関数にデータを渡したりします。スタックを扱うために esp レジスタというものがあり、このレジスタには現在スタックがどのアドレスを指しているかを保持しています。スタックにデータを入れるには、形式的には push / pop をして行います。push をすると現在のスタック位置(esp)がマイナスされ、その位置にデータが書き込まれます。逆に pop するとその位置のデータが読み込まれ、スタック位置は増えます。 右の表(図)は、push / pop 命令や、call / ret 命令でスタックにどのような変化が起こるかを流れで示しています。黄色の背景の部分は現在のスタック位置(esp が保持しているアドレス)を表しています(最初はスタ