### A good answer might be:

Of course. Say that the emulator is written in C. Compile the emulator and run it on a MIPS computer. Now the program running on the MIPS is a MIPS emulator. This is a very computer-science-like notion.

# Separate Translation

An emulator running on the processor it is emulating is often used for debugging. Working with an emulator is usually more convenient than dealing with the hard silicon of the actual hardware.

A true computer nut (a "hacker", in the correct sense) will wonder if an emulator of (say) an Apple can run on an emulator of (say) an Intel machine that is running on a MIPS machine. Yes, as long as the various emulators exist.

For very many years (in computer years) assembly language was used for serious enterprise-wide programming for one reason: separate source files could be individually assembled, and later combined (linked) into the full executable. Each source file was assembled into an object module. This is called separate assembly (or separate translation).

An object module is a file that contains a machine language program that is not quite ready to run. It may not be ready to run for several reasons: the source code might not be completely translated (since more information is needed), memory locations for code and data might not be assigned, and more code is needed before the program is complete. An assembler creates an object module for each source file of assembly language.

### QUESTION 13:

(Software Engineering Question:) Why translate many individual source files? Why not have one, big, complete program that translates into a complete, ready-to-run executable?