By default (compiler version 0.9.4 and up), the assembly file is removed after it has been compiled. Only in the case of the -s command-line option, the assembly file must be left on disk, so the assembler can be called later. You can disable the erasing of the assembler file with the -a switch.
The unit file contains all the information the compiler needs to use the unit:
The detailed contents and structure of this file are described in the first appendix. You can examine a unit description file using the ppudump program, which shows the contents of the file.
If you want to distribute a unit without source code, you must provide both the unit description file and the object file.
You can also provide a C header file to go with the object file. In that case, your unit can be used by someone who wishes to write his programs in C. However, you must make this header file yourself since the Free Pascal compiler doesn't make one for you.
When you compile a program, the compiler produces again 2 files :
The assembly language file is converted to an object file by the assembler, and then linked together with the rest of the units and a program header, to form your final program.
The program header file is a small assembly program which provides the entry point for the program. This is where the execution of your program starts, so it depends on the operating system, because operating systems pass parameters to executables in wildly different ways.
It's name is prt0.o, and the source file resides in prt0.s or some variant of this name. It usually resided where the system unit source for your system resides. It's main function is to save the environment and command-line arguments and set up the stack. Then it calls the main program.