EIP is the
instruction pointer, and it cannot me a subject of MOV instructions, because its purpose is very special. For example, if your execution moves from one instruction to another, EIP is modified accordingly. By this reason, the whole problem of "reading" EIP is not really well-defined. If you write some code to determine EIP, which is the EIP values would you need to remember: before calling this code, after, before return, or what? Any code execution modifies this register. Usually, this register is stored on the stack and is retrieved from the stack by instructions like CALL, RET or IRET instructions. The fact that it's stored on stack can help you to find out the EIP at the point of the call of some method which could retrieve that value from stack. It would be the offset in the code segment representing return address from such function.
So, you can store this register in another register indirectly. For more detail, please see, for example,
http://stackoverflow.com/questions/4062403/how-to-check-the-eip-value-with-assembly-language[
^].
I would wonder why would you need it. I'm not sure you that mean some good programming technique. :-)
—SA