I don't understand how this is supposed to work.
GCC inline assembler is a pain to get right, but very specific about marking clobbering information, so that the compiler knows what you're doing.
Microsoft Visual C++'s inline assember is really easy to use (it always seems to Just Work), but I have no ideas what kinds of guarantees or assumptions it makes about your code.
Does VC++ try to "auto-detect" what registers are clobbered? How does it know how the registers and the stack pointer will be changed? Does it make any assumptions? If so, how do you get around those assumptions?