Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
That's not going to work. You should understand what it is you're trying to accomplish and how you're going to accomplish that before attempting to write any code. Start by reading http://wiki.osdev.org/Context_Switching.
What you say "just swap esp" can work in a cooperative multitasking scheme where each thread yeld() and jumps to next context but thats probably not what you are looking for.
To take advantage of the CPU protection mechanisms, user/kernel mode, interrupt handling etc you actually must use some support from the CPU to get this to work properly.
Read up on task/context switching in the Intel Developer manual or try the Wiki here for a more detailed code centric tutorial on how to proceed.
@eltomato
I suggest you think about the stack state when you enter the function, because you don't have the right idea about it at the moment. Look up the cdecl calling convention and then take another look at your "pop eax".
Also, you're going to want to save the original stack pointer so it can be restored later.