Register contents on procedure entry

Hi,

I'm writing a routine in a Delphi application using the built-in
assembler, and I think I need to know a little more about the register
contents on entry to an asm block.  The Delphi 3 help file mentions that
the ESI register (amongst others) must be preserved by an asm..end block.
I want to use the SI register so I was planning to save ESI on entry to
the asm block then restore it on exit, but there's a chance that an
exception might throw me out of the asm routine before ESI gets restored.
So, the question is this:

What is the meaning of the contents of ESI register on entry to a
procedure (written as an asm block) and what are the consequences of
accidentally scrambling it?

I'm also using the floating point unit stack, so I'm wondering if it is
always safe for me to use (and scramble) all eight of the FPU stack
registers (STx) or will there sometimes be values in them that I should
preserve?

Thanks,

Michael Collas