POPA/POPAD -- Pop all General Registers

POPA/POPAD -- Pop all General Registers Opcode Instruction Clocks Description 61 POPA 24 Pop DI, SI, BP, SP, BX, DX, CX, and AX 61 POPAD 24 Pop EDI, ESI, EBP, ESP, EDX, ECX, and EAX Operation IF OperandSize = 16 (* instruction = POPA *) THEN DI = Pop(); SI = Pop(); BP = Pop(); throwaway = Pop (); (* Skip SP *) BX = Pop(); DX = Pop(); CX = Pop(); AX = Pop(); ELSE (* OperandSize = 32, instruction = POPAD *) EDI = Pop(); ESI = Pop(); EBP = Pop(); throwaway = Pop (); (* Skip ESP *) EBX = Pop(); EDX = Pop(); ECX = Pop(); EAX = Pop(); FI; Description POPA pops the eight 16-bit general registers. However, the SP value is discarded instead of loaded into SP. POPA reverses a previous PUSHA, restoring the general registers to their values before PUSHA was executed. The first register popped is DI. POPAD pops the eight 32-bit general registers. The ESP value is discarded instead of loaded into ESP. POPAD reverses the previous PUSHAD, restoring the general registers to their values before PUSHAD was executed. The first register popped is EDI. Flags Affected None Protected Mode Exceptions #SS(0) if the starting or ending stack address is not within the stack segment; #PF(fault-code) for a page fault Real Address Mode Exceptions Interrupt 13 if any part of the operand would lie outside of the effective address space from 0 to 0FFFFH Virtual 8086 Mode Exceptions Same exceptions as in real-address mode; #PF(fault-code) for a page fault