That's probably left over from me, although I wonder why __SI and __DI aren't included... The Win32 ABI specifies that you should preserve ESI, EDI, and EBX in procedures; EAX, ECX, and EDX are fair game. In a lot of my old Win32 code I would just automatically preserve all three (ESI, EDI, EBX) in case I used them later on when flushing out the procedure. So yeah, I'll fall on the bullet here, it was probably my fault. But no, ECX doesn't have to be preserved (ever), that's callee's job to preserve not the caller's.