Initially, ESP refers to the empty space of memory.
When I push something such as push 1, then it will refers to the memory location of 1, or next empty space?
here is the example
push    ebp
mov ebp, esp
/*
---------
(empty space)    <- esp, ebp
---------
ebp     (initially stack pointer was here)
---------
*/
Another question is that when I make an empty stack space, which point ESP will points?
Here is the example: (each memory location is 4 bytes)
/*
  --------
1        <- initial esp
  --------
*/
sub esp, 12
; now esp points to this one 
/*
  --------
4          <- esp
  --------
3
  --------
2  
  --------
1        
  --------
*/
; or this one
/*
  --------
3           <- esp
  --------
2  
  --------
1        
  --------
*/
Assume that numbers are the memory location addresses
 
    