Quote Originally Posted by JSoftware
You are free to do whatever with ebx in the function, but if you modify any of the others and they are not used to pass parameters in, then you must restore them to the value they were before you altered them
Actually EBX, ESP and EBP values must be always preserved. Also you're free to change and not restore contents of EAX, EDX and ECX even if they were not used to pass parameters into the function. That's the case with all normal calling conventions (fastcall, stdcall, cdecl) as far as I know. Or maybe I do not understand your post correctly.

EDIT: How to delete my own double-post? I can't seem to find a buttom for that.