在x86中有8个32位寄存器 EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP
其中ESP和EBP涉及函数的entry和exit的操作,一般不用于应用程序级的编程。
剩下的6个寄存器分成两种:
1 EBX,ESI,EDI为必须受保护寄存器,使用前要push,使用后要pop
2 EAX,ECX,EDX可以供编程自由临时使用。

EDI和ESI不可进行字节级操作,但可以使用DI和SI(为EDI和ESI的低16位)

成套使用的指令:PUSHAD,POPAD    PUSHFD,POPFD

内存中的数据互相拷贝不可以直接用
! mov mVar, lpMem      ; this fails, no opcode to do it.
因为x86没有对应的操作符。
可以考虑这两种方案
1  通过空闲的寄存器
      ! mov eax, lpMem      ; copy memory value into register.
      ! mov mVar, eax      ; copy register into memory value.
2  通过stack,但慢一些
      ! push lpMem            ; push memory value onto the stack.
      ! pop mVar            ; pop it back off as another memory value.


STACK使用
当进行压栈操作PUSH时,首先是将栈指针ESP减小操作数的大小,然后将操作数  的数值存入堆栈。出栈操作POP反之。
要注意stack的平衡性 也就是push和pop的数据的占用的字节数一致(大多数情况下是必须的)。
但可以这样使用。
PUSH eax
...
...
pop ax
pop cx