limning, relocating the object file explain in details.
Answers (1)
The difference between the first and second pass is different for different assemblers but what you generally find is that the first pass compiles code and produces symbols for things (i.e. jump points, memory structures like the stack and heap, etc.) and the second pass doesn't do any compilation but instead goes back and replaces the symbols with actual locations (or relative locations). So the first pass keeps tabs on things it may not know for sure until the end of the first pass. Then when it does know, the second pass fills in the blanks.