“Push” refers to the operation to add (store) an item to the stack. Such an item can be 16-bit (a word) or 32-bit (a long). For example, we can add the value of register eax to the stack using the following instructions:
The first instruction “allocates” four bytes on the stack, but leaves those allocated bytes uninitialized. The second instruction copies the value of register eax to the four bytes allocated.
Note how we first move the bookmark to make sure the four bytes are reserved before copying into them. This is because, in general, an interrupt can happen between the two instructions. For now, let us just say that an interrupt also uses the stack. If we do not allocate first, and copy into those four bytes first, then an interrupt can overwrite the copied bytes.