title: How do assembly instruction differentiate between register, memory address, immediate value or offset parameter?
body: <p>I've been wondering, are there some invisible op-codes or flags or anything that tells the assembly instruction how to treat its parameters? Am a little confused, since apparently the same instruction can operate with different type operands - registers, memory addresses, offsets and immediate values are supported.</p>
  
  <p>There doesn't seem to be any extra specifics in the "textual representation" of the assembly program, but maybe there is difference in the binary, e.g. some bits are toggled so that the CPU knows which type of operand is used?</p>