Opcode Instruction Clocks Description FF /6 PUSH m16 5 Push memory word FF /6 PUSH m32 5 Push memory dword 50 + rw PUSH r16 2 Push register word 50 + rd PUSH r32 2 Push register dword 6A PUSH imm8 2 Push immediate byte 68 PUSH imm16 2 Push immediate word 68 PUSH imm32 2 Push immediate dword 0E PUSH CS 2 Push CS 16 PUSH SS 2 Push SS 1E PUSH DS 2 Push DS 06 PUSH ES 2 Push ES 0F A0 PUSH FS 2 Push FS OF A8 PUSH GS 2 Push GS
IF StackAddrSize = 16 THEN IF OperandSize = 16 THEN SP := SP - 2; (SS:SP) := (SOURCE); (* word assignment *) ELSE SP := SP - 4; (SS:SP) := (SOURCE); (* dword assignment *) FI; ELSE (* StackAddrSize = 32 *) IF OperandSize = 16 THEN ESP := ESP - 2; (SS:ESP) := (SOURCE); (* word assignment *) ELSE ESP := ESP - 4; (SS:ESP) := (SOURCE); (* dword assignment *) FI; FI;
The 80386 PUSH eSP instruction pushes the value of eSP as it existed before the instruction. This differs from the 8086, where PUSH SP pushes the new value (decremented by 2).
up:
Chapter 17 -- 80386 Instruction Set
prev: POPF/POPFD Pop Stack into FLAGS or EFLAGS Register
next: PUSHA/PUSHAD Push all General Registers