title: How to know if a register is a "general purpose register"?
body: <p>I am trying to understand what criteria a register must have to be called a "general purpose register".</p>
  
  <p>I believe a general purpose register is a register that can be used for anything (for calculation, for moving of data to/from it, etc.) and is a register that doesn't have a special purpose.</p>
  
  <p>Now I have read that the <code>ESP</code> register is a general purpose register. I guess the <code>ESP</code> register can be used for anything, but the <code>ESP</code> register also have a special purpose, which is to point to the top of the stack.</p>
  
  <p>So does that mean that <code>ESP</code> register is a special purpose register?</p>