push{wl} r/m[16|32] push{wl} imm[8|16|32] push{l} [%cs|%ds|%ss|%es|%fs|%gs]
r/m[16|32] -> stack segment register -> stack
For a word, SP - 2; for a long, SP - 4. Replaces the new top of stack, pointed to by SP, with the register, memory, immediate, or segment register operand.
Replaces the new top of stack with the 16-bit immediate value, -126:
pushw $-126
Replaces the new top of stack with the 32-bit immediate value, 23456789:
pushl $23456789
Replaces the new top of stack with the content of the AX register:
pushw %ax
Replaces the new top of stack with the content of the EBX register:
pushl %ebx