pusha,popa - 16bit regs - ax,cx,dx,bx,sp,bp,si,di
pushad,popad - 32bit regs - eax,ecx,edx,ebx,esp,ebp,esi,edi
pushf,popf,pushfd,popfd - 16bit flags or 32bit eflags
in order of push, in reverse for pop.
32bit opcodes only valid for 16bit mode because in 32bit mode all opcodes operate the extended 32bit registers.
you have to push/pop the segments selectors manually.
i tend to find pusha/popa is costly on the stack.
irrelevant when task switching.
i find when manipulating registers for return values using ebp to modify stack and popa does not award any benefits over manual pops ie to return eax value
push ebx
push ecx
push eax
<BLAH>
<set eax to return value>
pop ecx ;lose old eax value
pop ecx
pop ebx
ret <or iret as the case maybe>
hope it helps - straiph
"There are 10 types of people in this world, those who know binary and those who don't!"