title: What is the best way to go about writing a simple x86 assembler?
body: <p>I'm interested in writing an x86 assembler for a hobby project.  </p>
  
  <p>At first it seemed fairly straight forward to me but the more I read into it, the more unanswered questions I find myself having.  I'm not totally inexperienced: I've used MIPs assembly a fair amount and I've written a toy compiler for a subset of C in school.</p>
  
  <p>My goal is to write a simple, but functional x86 assembler.  I'm not looking to make a commercially viable assembler, but simply a hobby project to strengthen my knowledge in certain areas.  So I don't mind if I don't implement every available feature and operation.</p>
  
  <p>I have many questions such as: Should I use a one-pass or two-pass method?  Should I use ad-hoc parsing or define formal grammars and use a parser-generator for my instructions?  At what stage, and how do I resolve the addresses of my symbols?</p>
  
  <p>Given my requirements, can anyone suggest some general guidelines for the methods I should be using in my pet-project assembler?</p>