The coursework requires you to work in pairs to write a Java application that will take a numerical representation of a MIPS program and simulate its execution.
MIPS is a Load-Store or RISC (Reduced Instruction Set Computer) architecture. Many modern processors, such as SPARC, PowerPC, and PA-RISC, have very similar characteristics to MIPS. An appendix to "Computer Organization and Design", by David A Patterson and John L Hennessy, is available to you on Blackboard as document HP_AppA.pdf. It contains precise details of the MIPS instruction set and assembly code.
Your Java program will respond to commands to load and execute MIPS machine code. Various debugging options will be supported. Example MIPS programs are provided and test scripts will be available in order to compare your output with standard results. To get you started, a Java program will be provided that partially implements the simulator. It will read in MIPS machine code and disassemble some instructions. You are strongly encouraged to study and understand this program, and then build on it to implement your simulator.
You will need to investigate the programmer's model for MIPS and decide how to represent the key architectural features in Java. Credit will be given for sensible use of object-oriented design to reflect the architecture in the class structure and choice of methods. The simulator should emulate a Little Endian architecture such as the PC. Beware that the example program MIPSMem.java for managing MIPS memory assume a Big Endian architecture so some small but important changes will need to be made.
The implementation is not expected to cover all aspects of MIPS:
- Only integer operations need be supported.
- Pseudoinstructions can be ignored as they are mapped to real instructions by the assembler.
- Memory operations will not cross word boundaries.
- Branch and Load delays can be ignored.
- Handling of interrupts can be ignored.
- The syscall instruction needs to support only string output, integer input and output, and exit.