スタックとアセンブリ
ESPレジスタは常にスタックトップのアドレスを指す
EBPレジスタは常に実行中のスタックフレームの底を指す
push命令時にESPレジスタの値は減少、pop命令時にレジスタの値は増加する
上記のようにx86-64のスタックは、アドレスの大きい方から小さい方に成長する
x86-64のスタックのイメージは、アドレスの小さいほうが上方向、大きいほうが下方向の図でかかれることが多いようだ
実際に、コンパイラが出力するアセンブリを見てみるとより理解が深まるかもしれません。 たとえば、gccにアセンブリ言語で出力させる場合は以下のようなコマンドを打ちます。
gcc -S -fverbose-asm -masm=intel -o test.s test.c
またはディスアセンブラを使って実際の実行ファイルを覗いてみるのもいいでしょう。